gpt4 book ai didi

flutter - ChangeNotifierProvider 与 ChangeNotifierProvider.value

转载 作者:行者123 更新时间:2023-12-04 11:04:48 24 4
gpt4 key购买 nike

我对这个框架很陌生,并在我遇到的地方使用提供程序包进行状态管理 ChangeNotifierProviderChangeNotifierProvider.value ,但我无法区分它们的用例。

我用过 ChangeNotifierProvider代替 ChangeNotifierProvider.value ,但它没有按预期工作。

最佳答案

让我们分步骤进行。
什么是变更通知程序?
扩展 ChangeNotifier 的类可调用notifyListeners()任何时候该类中的数据已更新并且您希望让监听器知道该更新。这通常在 View 模型中完成,以通知 UI 基于新数据重建布局。
下面是一个例子:

class MyChangeNotifier extends ChangeNotifier {
int _counter = 0;
int get counter => _counter;

void increment() {
_counter++;
notifyListeners();
}
}
我在 A beginner’s guide to architecting a Flutter app 中写了更多关于此的内容.
什么是 ChangeNotifierProvider? ChangeNotifierProvidermany types of providers 之一在 Provider package .如果你已经有一个 ChangeNotifier 类(就像上面的那个),那么你可以使用 ChangeNotifierProvider将其提供给您在 UI 布局中需要的地方。
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyChangeNotifier>( // define it
create: (context) => MyChangeNotifier(), // create it
child: MaterialApp(
...

child: Consumer<MyChangeNotifier>( // get it
builder: (context, myChangeNotifier, child) {
...
myChangeNotifier.increment(); // use it
请特别注意,在此行中创建了 MyChangeNotifier 类的新实例:
create: (context) => MyChangeNotifier(),
这是在第一次构建小部件时完成一次,而不是在随后的重建中完成。
什么是 ChangeNotifierProvider.value 呢?
使用 ChangeNotifierProvider.value如果您已经创建了 ChangeNotifier 的实例类(class)。如果您初始化了 ChangeNotifier,这种情况可能会发生。 initState() 中的类您的方法 StatefulWidgetState类(class)。
在这种情况下,您不会希望为您的 ChangeNotifier 创建一个全新的实例。因为你会浪费你已经完成的任何初始化工作。使用 ChangeNotifierProvider.value构造函数允许您提供预先创建的 ChangeNotifier值(value)。
class _MyWidgeState extends State<MyWidge> {

MyChangeNotifier myChangeNotifier;

@override
void initState() {
myChangeNotifier = MyChangeNotifier();
myChangeNotifier.doSomeInitializationWork();
super.initState();
}

@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyChangeNotifier>.value(
value: myChangeNotifier, // <-- important part
child: ...
请特别注意,没有 create这里的参数,但是一个 value范围。那就是您传递 ChangeNotifier 的地方类实例。同样,不要尝试在那里创建新实例。
您还可以找到 ChangeNotifierProvider 的用法和 ChangeNotifierProvider.value在官方文档中描述: https://pub.dev/packages/provider#exposing-a-value

关于flutter - ChangeNotifierProvider 与 ChangeNotifierProvider.value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57335980/

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