我正在努力学习如何使用Ffltter_riverpod进行国家管理,我很难理解ChangeNotifierProvider的"需求"是什么,StateNotifierProvider的"需求"也是如此.让我们以下面的ChangeNotifier为例:

class CounterNotifier extends ChangeNotifier {
  int value = 0;

  void increment() {
    value++;
    notifyListeners();
  }
}

为什么"建议"将ChangeNotifier声明为ChangeNotifyProvider,并将其用于ChangeNotifier的值的watch()read(),如下所示:

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

final counterProvider = ChangeNotifierProvider((ref) => CounterNotifier());


class ChangeCounterPage extends ConsumerWidget {
  const ChangeCounterPage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context, WidgetRef ref) {
    return Scaffold(
      floatingActionButton: FloatingActionButton(
        onPressed: () {
        
          ref.read(counterProvider).increment();
        },
        child: const Icon(Icons.add),
      ),
      body: Center(
       
        child: Text(ref.watch(counterProvider).value.toString()),
      ),
    );
  }
}

为什么不直接使用ChangeNotifier(就像我们对供应商所做的那样)?在Riverpod的官方文件中,它说:" we are using the ChangeNotifierProvider to allow the UI to interact with our ChangeNotifier class."->这是什么意思?ChangeNotifierProvider是一个包裹在ChangeNotifier周围的小部件,因此在小部件树中是"可见的"吗?我还读到,它使我们国家的"操纵"变得更容易或更容易管理,但我不明白为什么或如何需要它.

推荐答案

为了有用,必须使用与更改事件相关联的操作来侦听ChangeNotiator.在听众离开之前,它也必须不被倾听.

ChangeNotifierProvider将侦听ChangeNotiator的过程包装到"ProviderListener"协议中,该协议知道如何使小部件在事件发生时监视提供程序重新构建,以及如何在小部件被释放时断开自身连接.

Flutter相关问答推荐

build_runner显示错误没有为类ClassDeclaration定义getter宏关键字'

DART 3.3:为什么扩展类型不起作用?

功能不起作用的Flutter 块复制

更改BottomNavigationBar onTap?的大小

TextFormfield无法与自动路由一起正常工作

如何在用Ffltter成功登录后重定向下一页?

Flutter 应用程序中的Firebase实时数据库中的orderByChild()不适用于我

如何从DART中的事件列表中获取即将到来的日期

在Flutter 小部件测试中找不到框中的AssetImage装饰

使用Ffltter CREATE创建项目时,androidManifest.xml中缺少包属性

如何在Flutter 中使用选定的键和值从 map 列表创建 map

Dart/Flutter 泛型:类型 '(SearchFilterItemModel) => String' 不是类型 '(SearchFilterItemModel) => String' 的子类型

Dart:未捕获错误:RangeError(索引):索引超出范围:索引应小于 7:7

如何在 Flutter (iOS) 中解决这个问题

转换函数上传文件上传Uint8List

如何使用 riverpod_annotation 创建非自动处置提供程序?

Flutter:为什么我的 listTile colored颜色 被容器 colored颜色 覆盖了?

出现错误;运算符[]不是为对象类型定义的?功能()'

Flutter 中的无效日期格式 2022 年 11 月 14 日

FLUTTER+SQL:在 ListViewBuilder 中显示数据库中的数据