ChangeNotifier 应该使用“extends”还是“with”关键字? - 颤振

2024-01-05

我见过几个使用“extends”和“with”关键字扩展 ChangeNotifier 的模型示例。我不确定有什么区别。

class myModel extends ChangeNotifier {...}

class myModel with ChangeNotifier {...}

这两者有什么区别?我应该使用哪一个?


您可以使用extends(继承)或with(作为混合)。两种方式都可以让您访问notifyListeners()中的方法ChangeNotifier.

遗产

延伸ChangeNotifier意思是ChangeNotifier是超级类。

class MyModel extends ChangeNotifier {
  
  String someValue = 'Hello';
  
  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

如果您的模型类已经扩展了另一个类,那么您无法扩展ChangeNotifier因为Dart不允许多重继承。在这种情况下,您必须使用 mixin。

Mixin

mixin 允许您使用 mixin 类的具体方法(即,notifyListeners()).

class MyModel with ChangeNotifier {
  
  String someValue = 'Hello';
  
  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

因此,即使您的模型已经从另一个类扩展,您仍然可以“混合”ChangeNotifier.

class MyModel extends SomeOtherClass with ChangeNotifier {
  
  String someValue = 'Hello';
  
  void doSomething(String value) {
    someValue = value;
    notifyListeners();
  }
}

以下是一些关于 mixins 的好读物:

  • Dart:什么是 mixins? https://medium.com/flutter-community/dart-what-are-mixins-3a72344011f3
  • Dart for Flutter:Dart 中的 Mixins https://medium.com/flutter-community/https-medium-com-shubhamhackzz-dart-for-flutter-mixins-in-dart-f8bb10a3d341
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChangeNotifier 应该使用“extends”还是“with”关键字? - 颤振 的相关文章

随机推荐

  • 如何使用 Selenium ChromeDriver 执行右键单击?

    我一直在寻找这个问题 但找不到Python的答案 是否可以模拟右键单击 或通过 selenium chromedriver 打开上下文菜单 我见过 Java 和其他一些语言的选项 但从未见过 Python 我需要做什么才能模拟右键单击链接或
  • 我们可以使用 MS WebDeploy 创建一个新网站吗

    我已经阅读了许多关于通过 VS2012 和通过命令行进行 WebDeploy 的帖子 文档页面等 在所有部署方案中 我注意到目标站点应该已经存在于目标计算机 IIS 上 是否有一个选项可以创建一个包如果站点不存在则创建该站点在目标 托管 机
  • 处理 RDFa 中“rel”的非语义使用

    我使用 RDFa 将链接数据添加到我的网页 我也偶尔使用rel用于非语义目的的各种标签中的属性 例如触发 javascript 工具提示 我想知道我可以做些什么来区分用途 例如 我的社交网络图标周围有 RDFa 如下所示 a alt twi
  • 在 OpenShift 上使用密码保护 django 应用程序的非常简单的方法

    有没有一种非常简单的方法可以在测试时使用 htaccess 创建密码访问权限 我不想做任何会干扰应用程序的事情 有没有办法在 OpenShift 中做到这一点 您可以使用 htaccess 和 htpasswd 进行密码保护 以避免在网站尚
  • 在 zsh 中,如何对程序的退出状态执行条件?

    我想做类似的事情 if git status gt dev null then echo is a git repo else echo is not a git repo fi 但我不知道如何检查退出状态 我该如何解决 变量 包含最后命令
  • AutoFixture/AutoMoq 忽略注入实例/冻结模拟

    现在已经找到解决方案 简短的结论是 AutoFixture 返回冻结模拟就好了 我的 sut 也是由 AutoFixture 生成的 它只有一个公共属性 该属性具有对测试很重要的本地默认值 并且 AutoFixture 设置为新值 除此之外
  • 如何在android 2.2中使用fragment?

    我有一个支持 android 2 2 库的应用程序 在这个应用程序中我想使用片段 有人建议我 如果可能的话该怎么做 Thanks 是的 您需要使用支持库 重要的是要知道 您也可以使用蜂窝和冰淇淋三明治的支持库 这样您就可以在所有平台上使用相
  • htaccess 从根目录重定向到子文件夹,然后屏蔽 url?

    两件事情 Firstly 我的网站版本 2 位于名为 v2 的文件夹中 并且我想将不是 v2 文件夹子级的任何流量重定向到 www example com v2 位于根目录的旧站点是在 iWeb 中创建的 并且有很多子文件夹和子子文件夹 S
  • Qt:无法创建以 QVideoWidget 作为父级的浮动小部件?

    我正在尝试创建一个浮动的 无布局的小部件 但它似乎不适用于QVideoWidget因为它是父母 工作 MRE from PySide6 import QtWidgets as qtw app qtw QApplication w1 qtw
  • Python-从csv文件中读取特定列

    我只想读取 csv 文件中的第一列 我尝试了下面的代码 但没有从可用的解决方案中得到结果 data open data csv reader csv reader data interestingrows i 1 for i in read
  • 数值求解非线性方程

    我需要解决 Java 程序中的非线性最小化 N 个未知数的最小残差平方 问题 解决这些问题的常用方法是莱文伯格 马夸特 http en wikipedia org wiki Levenberg Marquardt algorithm算法 我
  • 如何根据属性值禁用数据绑定列表框项?

    有谁知道是否以及如何禁用数据绑定中的项目ListBox基于财产的价值 我最好想要一个DataTrigger其中 当某个属性是false 禁用该项目 使其无法选择 而不影响该项目中的其他项目ListBox
  • Terraform 不尊重 git 的 ssh 配置

    我的 terraform 模块位于通过 ssh 密钥访问的私有 bitbucket 存储库中 我不知道 git 命令 terraform 运行什么或如何更改身份验证 但它似乎使用不同的 ssh 配置 这是我的 tf file module
  • 使用 XPath/XQuery 获取元素名称

    有了以下 XML 示例文档 我需要发出 XPath XQuery 表达式来获取 CD 元素的每个子元素的元素名称
  • 如何更改 datagridview 选定行的背景颜色?

    如何在 C Windows 应用程序中更改 datagridview 选定行的背景颜色 来吧 伙计 必须有一个简单的解决方案 终于找到了一个 dataGridView1 DefaultCellStyle SelectionBackColor
  • 反应引导手风琴未加载

    我正在尝试将 React bootstrap 与 Bootstrap 5 一起使用 我想在我的页面之一中使用 Accordion 为此 我刚刚复制了此页面的结构 gt https react bootstrap netlify app co
  • 原型 AJAX 请求作为 OPTIONS 而不是 GET 发送;结果出现 501 错误

    我正在尝试使用 Prototype AJAX 访问 Web 服务 但遇到了一个我无法弄清楚的错误 似乎当我向服务器发出请求时 我的请求被解释为 OPTIONS 而不是 GET 请求 进而抛出 501 not Implemented 错误 因
  • 无法创建大小为 8064 的行,该行大于允许的行大小 8060

    在向现有表添加列时 我遇到了这个奇怪的问题 现有的表如下所示 CREATE TABLE BinaryAssets BinaryAssets BinaryAssetId int IDENTITY 1 1 NOT NULL BinaryAsse
  • 将多个参数传递给 Blade 指令

    我正在尝试创建一个刀片指令来突出显示将从我的搜索查询中返回的一些单词 这是我的刀片指令 class AppServiceProvider extends ServiceProvider public function boot Blade
  • ChangeNotifier 应该使用“extends”还是“with”关键字? - 颤振

    我见过几个使用 extends 和 with 关键字扩展 ChangeNotifier 的模型示例 我不确定有什么区别 class myModel extends ChangeNotifier class myModel with Chan