ebg*_*g11 14 design-patterns flutter bloc
我创建了一个 Flutter 页面,其中有一堆输入。我认为这是一团糟,让我们重构它并为每个输入创建一个新的有状态小部件。
这很好,除了数据需要在父小部件中,而且我很难理解如何将数据从新的子小部件传递回父小部件。
我发现了一些方法,你传入一个函数,只要有变化,你就通过该函数将数据传递给父级。
我已经阅读了有关集团模式的内容,但我不确定这是否是我所需要的。我只想要一个单例样式对象,当有新输入时,主小部件及其子部件都可以读取并更新子部件。
有人能解释一下 bloc 模式是否会帮助我解决这个问题,或者是否有另一种设计模式可以帮助我解决这个问题。
** 编辑
谢谢你们的好答案。我的新问题与提供者模式/库有关。
我创建了一些状态类如下(我替换了内容以尝试保持简单)
class State1 with ChangeNotifier{
String _s;
set s(String newS){
_s = newS;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我使用 multiprovider 来传递它(在 init 中创建对象)
child: MultiProvider(
providers: [
ChangeNotifierProvider(builder: (context) => state1),
],
child: Stack(
alignment: Alignment.center,
children: stackChildren,
),
Run Code Online (Sandbox Code Playgroud)
然后使用子项widegets构建方法访问
state1Var = Provider.of<State1>(context);
Run Code Online (Sandbox Code Playgroud)
所有这些都很好用..
我的问题是当我开始使用导航推送时,我无法再访问状态。
onPressed: (() {
Navigator.push(
contextField,
MaterialPageRoute(builder: (context) => NewPage()),
);
}),
Run Code Online (Sandbox Code Playgroud)
当我收到此错误时
Could not find the correct Provider<State1> above this NewPage Widget...
Run Code Online (Sandbox Code Playgroud)
我确实设法使用它获得了它
Navigator.push(
context,
MaterialPageRoute(builder: (context) => Consumer(builder: (),child: NewPage(),)),
);
Run Code Online (Sandbox Code Playgroud)
但是当我使用 navigator.pop() 弹出小部件时,状态无法使用,因为它说它已被处理。
对不起,如果我把这弄复杂了。我不得不删除很多代码。
小智 6
您需要使用状态管理。
它存在 BLoC,但您也可以毫无问题地使用 Provider,它将解决您的问题。
这是 Diego Velasquez 写的关于Widget Communication 的内容,可以解决您的问题。
但是如果你需要更多信息,我会让你从 Karthik Ponnam 那里得到一些关于State Management with Provider 的信息。
这将帮助您从Flutter Docs 中更多地了解什么是状态管理
| 归档时间: |
|
| 查看次数: |
13601 次 |
| 最近记录: |