问题是当我尝试在文本字段中输入一些文本时,键盘会显示一秒钟,然后整个 FutureBuilder 立即重建。\n这是我的 FutureBuilder
\nbody: 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 )\nRun Code Online (Sandbox Code Playgroud)\n在 ElementPicker 内部,还有另一个小部件,其中有 TextField
\n您需要在中初始化您的 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)
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |