gpt4 book ai didi

design-patterns - 选择正确的 Flutter 设计模式

转载 作者:IT王子 更新时间:2023-10-29 07:02:48 27 4
gpt4 key购买 nike

我创建了一个 Flutter 页面,其中包含大量输入。我认为这是一团糟,让我们重构它并为每个输入创建一个新的有状态小部件。

这很好,除了数据需要在父小部件中,而且我很难理解如何将数据从新的子小部件传回给父小部件。

我发现了一些 hacky 方法,你传入一个函数,每当有变化时,你就通过该函数将数据传递给父级。可行,但现在有多个变量,一个在子级中,一个在父级中.

我已经阅读了有关 bloc 模式的信息,但我不确定这是否是我所需要的。我只想要一个单例样式对象,主要小部件及其子部件都可以读取,并且在有新输入时子部件可以更新。

有人可以解释一下 bloc 模式是否可以帮助我解决这个问题,或者是否有另一种设计模式可以帮助我解决这个问题。

** 编辑

感谢各位的精彩回答。我的新问题与提供者模式/库有关。

我创建了一些状态类如下(我替换了内容以尽量保持简单)

class State1 with ChangeNotifier{

String _s;

set s(String newS){
_s = newS;
notifyListeners();
}

}

然后我使用多供应商来传递它(在 init 中创建对象)

child: MultiProvider(
providers: [
ChangeNotifierProvider(builder: (context) => state1),
],
child: Stack(
alignment: Alignment.center,
children: stackChildren,
),

然后使用

在子 widegets 构建方法中访问它
 state1Var = Provider.of<State1>(context);

所有这一切都很好..

我的问题是,当我开始使用导航推送时,我无法再访问状态。

onPressed: (() {
Navigator.push(
contextField,
MaterialPageRoute(builder: (context) => NewPage()),
);
}),

当我收到这个错误

Could not find the correct Provider<State1> above this NewPage Widget...

我确实设法用它得到它

  Navigator.push(
context,
MaterialPageRoute(builder: (context) => Consumer(builder: (),child: NewPage(),)),
);

但是当我使用 navigator.pop() 弹出小部件时,状态无法使用,因为它说它已被处置。

抱歉,如果我把事情弄复杂了。我不得不删除很多代码。

最佳答案

您需要使用 stateManagement。

它存在 BLoC,但您也可以毫无问题地使用 Provider,它将解决您的问题。

这是 Diego Velasquez 写的关于 Widget Communication 的东西并且可以解决你的问题。

但如果您需要更多信息,我会让您从 Karthik Ponnam 那里得到一些关于 State Management with Provider 的信息.

这将帮助您从 Flutter Docs 中更多地了解什么是状态管理。

关于design-patterns - 选择正确的 Flutter 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56722443/

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