You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:45:04