gpt4 book ai didi

dart - flutter 代码实验室 : Update ListView on different screen

转载 作者:IT王子 更新时间:2023-10-29 07:12:53 26 4
gpt4 key购买 nike

我完成了 Flutter NameGenerator code lab并希望扩展它以直接从“保存的建议列表”中删除项目。为此,我在下面添加了 onTap 处理程序,该处理程序从列表中删除了该对。但是,在我返回并再次重新打开屏幕之前,列表不会更新。如何立即更新第二个屏幕上的列表?

void _pushSaved() {
Navigator.of(context).push(MaterialPageRoute<void>(
builder: (BuildContext context) {
final Iterable<ListTile> tiles = _saved.map((WordPair pair) {
return ListTile(
title: Text(
pair.asPascalCase,
style: _biggerFont,
),
onTap: () => setState(() {
_saved.remove(pair);
}),
);
});

final List<Widget> divided = ListTile.divideTiles(
context: context,
tiles: tiles,
).toList();

return Scaffold(
appBar: AppBar(
title: const Text('Saved Suggestions'),
),
body: new ListView(children: divided),
);
}),
);
}

最佳答案

为什么您的代码不起作用

您的列表未更新的原因是它是导航器上推送的不同屏幕。

因为您的 _pushSaved 方法在原始屏幕内,所以您在该屏幕上调用 setState 并重建原始屏幕的所有小部件。推送的屏幕不受影响,因为它不是原始屏幕的子屏幕。相反,原始屏幕告诉 Navigator 创建一个新屏幕,因此它是 MaterialAppNavigator 的某个子树,您无法访问。

解决方案

仅使用 StatefulWidget 访问不同屏幕上的相同实时数据并不容易。基本上,您的项目已经变得足够复杂,以至于是时候考虑更复杂的状态管理解决方案了。这是一个 video from Google I/O关于状态管理,您可以查看以获取一些灵感。

关于dart - flutter 代码实验室 : Update ListView on different screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53850154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com