簡體   English   中英

由於 Flutter 中的 TextField,FutureBuilder 重建

[英]FutureBuilder rebuilds because of TextField in Flutter

問題是當我嘗試在文本字段中輸入一些文本時,鍵盤會顯示一秒鍾,然后整個 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

您需要在initState中初始化您的期貨,以便每當小部件因任何原因重建時(在本例中為打開鍵盤),您就不會再次執行fetchAndSet

void initState() {
 super.initState();
 fetchAndSetFuture = Provider.of<Activities>(context, listen: false).fetchAndSet();
}
...

//in build()

FutureBuilder(
 future: fetchAndSetFuture,
 builder: ...
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM