我尝试使用TextField控制器,但收到错误“ NoSuchMethodError:方法'call'在null上调用”

时间:2019-03-05 03:38:42

标签: dart flutter

我尝试使用TextField控制器,但收到错误

  

“ NoSuchMethodError:方法'call'在null上被调用”

如果我使用onChange(),就可以了。

我的代码:

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(),
              ],
            ),
          )
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:2)

您添加监听器的方式不正确

您必须在onChange之后删除()

_controller.addListener(_onChange());    

_controller.addListener(_onChange);