gpt4 book ai didi

dart - 当我专注于 TextField - Bloc Pattern 时小部件重新呈现

转载 作者:IT王子 更新时间:2023-10-29 06:54:56 25 4
gpt4 key购买 nike

我正在使用 BLoC 来保持两个嵌套的 FullScreenDialogs 之间的状态。

当我按下第一个屏幕时,我正在初始化 bloc,就像这样

return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (BuildContext context) => ProductBlocProvider(child: ProductEntryScreen()),
fullscreenDialog: true
));
},
);

ProductEntryScreen 有一堆 TextFields 和一个按钮,然后打开一个新的 FullScreenDialog。这个新屏幕也有 TextFields。我遇到的问题是,每次我在第二个 FullScreenDialog 上的 TextField 上书写时,我启动 ProductBlocProvider 的 onPressed 函数都会运行再次。

重新运行导致 Bloc 创建一个新实例,所以我最终失去了状态。

我想做什么?也许我做错了,所以我会解释我想要实现的目标。

我想在填写所有字段时保持两个 FullScreenDialogs 之间的状态,完成后我想按下一个按钮,将所有数据(两个屏幕)发送到数据库。

最佳答案

问题是我在 MaterialPageRoute 的构建器函数中创建了提供者内部的 bloc 实例。

该构建器函数被重复调用,并且每次都创建一个新的 bloc 实例。解决方案是从 builde 函数中删除 bloc 实例的创建,如下所示:

return FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
//Here I create the instance
var _bloc = ProductBloc();
Navigator.of(context).push(MaterialPageRoute(
//And I pass the bloc instance to the provider
builder: (BuildContext context) => ProductBlocProvider(bloc: _bloc, child: ProductEntryScreen()),
fullscreenDialog: true
));
},
);

关于dart - 当我专注于 TextField - Bloc Pattern 时小部件重新呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51956108/

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