【问题标题】:FutureBuilder rebuilds because of TextField in Flutter由于 Flutter 中的 TextField,FutureBuilder 重建
【发布时间】:2021-06-06 08:17:34
【问题描述】:

问题是当我尝试在文本字段中输入一些文本时,键盘会显示一秒钟,然后整个 FutureBuilder 会立即重建。 这是我的 FutureBuilder

body: FutureBuilder(
          future: Provider.of<Activities>(context, listen: false).fetchAndSet(),
          builder: (context, snapshot) => snapshot.connectionState ==
                  ConnectionState.waiting
              ? Center(child: CircularProgressIndicator())
              : Consumer<Activities>(
                  child: Center(
                    child: const Text('nothing here'),
                  ),
                  builder: (context, activities, ch) => SingleChildScrollView(
                    child: Center(
                      child: Column(children: [
                        Container(
                          padding:
                              EdgeInsets.only(top: mediaQuery.size.height / 40),
                          child: Text(time, style: TextStyle(fontSize: 30)),
                        ),
                        DayContainer(mediaQuery, activities),
                        Container(
                          height: 300,
                          child: SingleChildScrollView(
                            physics: ScrollPhysics(),
                            child: Column(
                              children: <Widget>[
                                ListView.builder(
                                    physics: NeverScrollableScrollPhysics(),
                                    shrinkWrap: true,
                                    itemCount: activities.activities.length,
                                    itemBuilder: (context, index) {
                                      return ElementPicker(
                                          mediaQuery,
                                          // this.callbackN,
                                          activities.activities[index]);
                                    })
                              ],
                            ),
                          ),
                        ),
                        FloatingActionButton(
                          onPressed: () => activities.addActivity(
                              '0Adding0', 'Добавить активность', 0.0, 0.0),
                          child: Icon(Icons.add),
                        )
                      ]),
                    ),
                  ),
                ),
        )

在 ElementPicker 内部,还有另一个小部件,其中有 TextField

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您需要在initState 中初始化您的future,这样每当小部件因任何原因重建时(在这种情况下打开键盘),您就不会再次执行fetchAndSet

    void initState() {
     super.initState();
     fetchAndSetFuture = Provider.of<Activities>(context, listen: false).fetchAndSet();
    }
    ...
    
    //in build()
    
    FutureBuilder(
     future: fetchAndSetFuture,
     builder: ...
    );
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 2020-08-23
    • 2021-02-06
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    相关资源
    最近更新 更多