首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ChangeNotifier是如何通知州的?

ChangeNotifier是如何通知州的?
EN

Stack Overflow用户
提问于 2022-01-31 04:50:09
回答 3查看 1.5K关注 0票数 1

有人能告诉我提供者是如何通知州的吗?

我不想使用ChangeNotifierProvider,你能给我一个没有图书馆的建议吗?

我只是需要更好的例子来解释。提供者如何结合InheritedWidget。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-01-31 05:27:03

您认为下面的示例(受答案这里的启发)和AnimatedBuilder如何?

代码语言:javascript
复制
import 'package:flutter/material.dart';

class MyChangeNotifier extends ChangeNotifier {
  int count = 0;

  void addOne() {
    count++;
    notifyListeners();
  }
}

class MyApp extends StatelessWidget {
  final MyChangeNotifier myChangeNotifier = MyChangeNotifier();

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: ExampleButton(myChangeNotifier),
        ),
        floatingActionButton: FloatingActionButton(
          child: const Icon(Icons.add),
          onPressed: myChangeNotifier.addOne,
        ),
      ),
    );
  }
}

class ExampleButton extends StatelessWidget {
  final MyChangeNotifier myChangeNotifier;
  const ExampleButton(this.myChangeNotifier, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return AnimatedBuilder(
        animation: myChangeNotifier,
        builder: (context, child) {
          return OutlinedButton(
              onPressed: myChangeNotifier.addOne,
              child: Text(
                'Tap me - or the floating button\n\n${myChangeNotifier.count}',
                textAlign: TextAlign.center,
              ));
        });
  }
}

void main() => runApp(MyApp());

ChangeNotifier实现Listenable类。您可以看到这里如何监听该Listenable,例如使用AnimatedBuilder (我的代码所做的)。ChangeNotifyProvider (我知道,您不想这样做)也会为您实现这一点,并将更改通知小部件树中较低的部件。

票数 1
EN

Stack Overflow用户

发布于 2022-01-31 05:50:23

以下是一些给你的建议:

小部件侦听更改,并在有重新构建时相互通知。状态一发生变化,这个特定的小部件就会重新构建,而不会影响树中的其他小部件。

三个主要组件使这一切成为可能: Flutter中的ChangeNotifier类、ChangeNotifierProvider (主要用于我们的示例应用程序)和Consumer。

无论从ChangeNotifier类中观察到的状态发生什么变化,都会导致侦听小部件重新生成。提供者包提供不同类型的提供者--以下列出了其中一些:

提供程序类接受一个值并公开它,而不考虑ListenableProvider是用于listenable对象的特定提供程序。它将侦听,然后根据它询问小部件并受状态变化的影响,以便在监听器调用ChangeNotifierProvider与ListenableProvider相似时重新构建,但对于ChangeNotifier对象,并在需要时ValueListenableProvider侦听ValueListenable并公开值时自动调用ChangeNotifier.dispose。

StreamProvider侦听流,公开发出的最新值,并要求依赖于流的小部件重新构建FutureProvider,接受未来类,并在未来完成时根据其更新小部件

票数 0
EN

Stack Overflow用户

发布于 2022-01-31 08:17:37

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70921402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档