FutureBuilder因Flutter中的TextField而重建

Nik*_*Evi 2 dart flutter

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

\n
body: FutureBuilder(\n          future: Provider.of<Activities>(context, listen: false).fetchAndSet(),\n          builder: (context, snapshot) => snapshot.connectionState ==\n                  ConnectionState.waiting\n              ? Center(child: CircularProgressIndicator())\n              : Consumer<Activities>(\n                  child: Center(\n                    child: const Text('nothing here'),\n                  ),\n                  builder: (context, activities, ch) => SingleChildScrollView(\n                    child: Center(\n                      child: Column(children: [\n                        Container(\n                          padding:\n                              EdgeInsets.only(top: mediaQuery.size.height / 40),\n                          child: Text(time, style: TextStyle(fontSize: 30)),\n                        ),\n                        DayContainer(mediaQuery, activities),\n                        Container(\n                          height: 300,\n                          child: SingleChildScrollView(\n                            physics: ScrollPhysics(),\n                            child: Column(\n                              children: <Widget>[\n                                ListView.builder(\n                                    physics: NeverScrollableScrollPhysics(),\n                                    shrinkWrap: true,\n                                    itemCount: activities.activities.length,\n                                    itemBuilder: (context, index) {\n                                      return ElementPicker(\n                                          mediaQuery,\n                                          // this.callbackN,\n                                          activities.activities[index]);\n                                    })\n                              ],\n                            ),\n                          ),\n                        ),\n                        FloatingActionButton(\n                          onPressed: () => activities.addActivity(\n                              '0Adding0', '\xd0\x94\xd0\xbe\xd0\xb1\xd0\xb0\xd0\xb2\xd0\xb8\xd1\x82\xd1\x8c \xd0\xb0\xd0\xba\xd1\x82\xd0\xb8\xd0\xb2\xd0\xbd\xd0\xbe\xd1\x81\xd1\x82\xd1\x8c', 0.0, 0.0),\n                          child: Icon(Icons.add),\n                        )\n                      ]),\n                    ),\n                  ),\n                ),\n        )\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

Cal*_*ves 5

您需要在中初始化您的 future,initState以便每当小部件因任何原因重建(在本例中打开键盘)时,您都不会fetchAndSet再次执行:

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

//in build()

FutureBuilder(
 future: fetchAndSetFuture,
 builder: ...
);
Run Code Online (Sandbox Code Playgroud)