- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对这个框架很陌生,并在我遇到的地方使用提供程序包进行状态管理 ChangeNotifierProvider
和 ChangeNotifierProvider.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
是
many 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
如果您已经创建了
ChangeNotifier
的实例类(class)。如果您初始化了
ChangeNotifier
,这种情况可能会发生。
initState()
中的类您的方法
StatefulWidget
的
State
类(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/
我对这个框架很陌生,并在我遇到的地方使用提供程序包进行状态管理 ChangeNotifierProvider和 ChangeNotifierProvider.value ,但我无法区分它们的用例。 我
我有一个代表电影列表的小部件,在我的模型中,我有 getMovies() 函数,它从网络请求中检索电影列表: enum MovieListState { IDLE, LOADING, ERROR }
我正在查看 flutter 网站上的以下代码: void main() { runApp( MultiProvider( providers: [ Change
我正在尝试使用 Flutter Provider package 中的 ChangeNotifierProvider 类.但是,它给我一个错误,说 The method isn't defined f
我最近开始使用 provider用于我的状态管理,我知道如何一次使用一个。 class Home extends StatelessWidget { @override Widget buil
我正在尝试添加网格列表,同时添加第二个网格的项目时发现以下错误: Error: Could not find the correct Provider above this PropertiesGri
这两个小部件之间有什么区别以及使用它的必要性ChangeNotifier在每个 Provider或者有很多使用方法Provider ? 最佳答案 提供者在小部件树下公开一个值,以便 children
我正在使用 ChangeNotifierProvider 来处理我的 Flutter 应用的应用状态。 我的 main.dart 文件 import 'package:flutter/material
是否可以添加相同类型的多个 ChangeNotifierProvider? return MultiProvider( providers: [ ChangeNotifierProvi
我不太明白 Provider.of() 和 Consumer 之间的区别。我读过here Consumer 就像 Provider.of with listen: true。 但是,在下面的示例中,我
我收到以下错误 - I/flutter (18695): The following StackOverflowError was thrown building Consumer(dirty, de
在我的 Flutter 应用中, 我想在 listView 中显示多个项目, 我想使用 Provider 处理它们的状态。 但是如果我在 ListView 中编辑一个项目,那么我该如何处理状态呢?只有
我想解释 Provider package 之间的区别(使用 ChangeNotifier 和 ChangeNotifierProvider )和 Scoped Model package在 flut
在深入研究我的应用程序的功能之前,我正在努力使我的 flutter 架构尽可能好。我已经基于 ChangeNotifierProvider 制作了一个带有 firebase Authentificat
我想在我的项目中为 Provider ( ChangeNotifierProvider ) 创建一个单元测试,我的单元测试、小部件测试和集成测试成功通过 ✔️,所以现在我尝试(努力尝试🥵...)创建
我是一名优秀的程序员,十分优秀!