我有一个 AppBar 按钮,我想在其中读取 childData 列表并对其进行处理:
class _ParentState extends State<Parent> {
....
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
actions: <Widget>[
IconButton(icon: Icon(Icons.add),
onPressed: () async {
//Need to access childData data here
print(childData); //currently prints null
},
),
],
),
body: SafeArea(
child: Column(
children: <Widget>[
ChildWidget(),
],
ChildWidget 使用 StreamBuilder 并遍历快照并在将快照附加到列表之前执行其他操作:
class ChildWidgetState extends State<ChildWidget> {
....
Widget build(BuildContext context) {
return StreamBuilder<List<DocumentSnapshot>>(
stream: stream,
builder: (context, snapshots) {
if (snapshots.connectionState == ConnectionState.active &&
snapshots.hasData) {
List<DocumentSnapshot> childData = [];
for (var x in snapshots.data) {
//do something else with snapshot data
childData.add(x);
}
我尝试使用回调函数通知父小部件进行刷新,但这会产生setState() or markNeedsBuild() called during build
错误,因为它在 ChildWidget 的构建方法期间设置状态。我的流构建器中肯定有数据,因为它在其他地方使用,目前没有问题。
像 Provider 这样的状态管理包似乎只向子小部件提供数据,而不是把它们传回来,而且我读过使用全局变量是不受欢迎的。将 childData 列表添加到 Hive 之类的数据库包中,然后在我的 ParentWidget 中读取它是否也是不好的做法?我不一定要重建父小部件 - 只需在单击 AppBar 按钮时读取子小部件中的数据。
谢谢。