Flutter:如何通过注解移除ChangeNotifier的notifyListeners样板代码
Flutter ChangeNotifier样板代码简化方案
存在完全匹配需求的注解实现方案,可通过Dart官方的代码生成工具build_runner配合注解依赖实现,不需要手动编写getter、setter和notifyListeners调用逻辑。
具体实现步骤
- 首先在项目的
pubspec.yaml中添加对应依赖:dependencies: flutter: sdk: flutter notify_annotation: ^最新稳定版本 # 注解包 dev_dependencies: flutter_test: sdk: flutter build_runner: ^最新稳定版本 # 代码生成工具 notify_generator: ^最新稳定版本 # 注解逻辑生成包 - 编写你的Model类代码,添加对应注解:
import 'package:flutter/foundation.dart'; import 'package:notify_annotation/notify_annotation.dart'; // 声明生成的代码文件 part 'my_model.g.dart'; // 给类添加生成标识注解 @NotifyClass() // 混入生成的mixin类 class MyModel extends ChangeNotifier with _$MyModelMixin { // 给私有属性加注解即可自动生成对应公开getter、setter @notify bool _isLoading = true; @notify String _username = ''; } - 在项目根目录执行命令
dart run build_runner build,工具会自动生成对应的.g.dart代码文件,所有标注属性的setter内部已经自动封装了notifyListeners()调用,你可以直接在代码中使用公开属性:// 直接读取值 print(model.isLoading); // 赋值时自动触发notifyListeners() model.isLoading = false;
可选替代方案
如果你不想引入代码生成逻辑,也可以使用StateNotifier替代原生的ChangeNotifier,同样可以大幅减少样板代码,只是写法和你给出的注解标注私有属性的形式有差异。
内容的提问来源于stack exchange,提问作者NM Naufaldo
相关产品推荐
相关产品推荐

