Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I'm try use controller of TextField but i receive error "NoSuchMethodError: The method 'call' was called on null"

Tags:

flutter

dart

I'm try use controller of TextField but i receive error

"NoSuchMethodError: The method 'call' was called on null"

It will fine if i use onChange().

My code:

class _MyHomePageState extends State<MyHomePage> {
  Icon _searchIcon = Icon(Icons.search, color: Colors.white);
  int _searchIconState = 0;
  Widget _appBarTitle;
  TextEditingController _controller = TextEditingController();

  _onChange() {
    String text = _controller.text;
    print(text);
  }

  @override
  void initState() {
    super.initState();

   /* My TextField */
    _appBarTitle = TextField(
        controller: _controller,
        onChanged: (text) {
          print('onChanged: ' + text);
        },
        style: TextStyle(color: Colors.white, fontSize: 18),
        decoration: InputDecoration(
            border: InputBorder.none,
            icon: _searchIcon,
            hintText: 'Search...',
            hintStyle:
            TextStyle(color: Colors.white.withOpacity(0.5), fontSize: 18)));

    _controller.addListener(_onChange());
  }

  @override
  void dispose() {
    // Clean up the controller when the Widget is removed from the Widget tree
    // This also removes the _printLatestValue listener
    _controller.dispose();
    super.dispose();
  }

  _nestedScrollViewController() {}

  _tabBarController() {}

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: NestedScrollView(
          controller: _nestedScrollViewController(),
          headerSliverBuilder: (BuildContext context, bool isScrolled) {
            return <Widget>[
              SliverAppBar(
                title: _appBarTitle /* TextField put in here */,             
                pinned: true,
                floating: true,
                forceElevated: isScrolled,
                bottom: TabBar(
                  tabs: <Widget>[
                    Tab(text: 'TO DAY'),
                    Tab(text: 'TOMORROW'),
                    Tab(text: '7Days')
                  ],
                  controller: _tabBarController(),
                ),
              )
            ];
          },
          body: Scaffold(
            body: TabBarView(
              children: <Widget>[
                todayUI(),
                tomorrowUI(),
                weekUI(),
              ],
            ),
          )
        ),
      ),
    );
  }
}
like image 820
mducc Avatar asked Dec 01 '25 02:12

mducc


1 Answers

You added listener incorrect way

You have to remove () after onChange

_controller.addListener(_onChange());    

to

_controller.addListener(_onChange);     
like image 122
Long Phan Avatar answered Dec 02 '25 22:12

Long Phan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!