如何使用@riverpod注解实现自定义BooleanNotifier的Provider?
用@riverpod注解实现布尔状态管理(代码生成方式)
1. 重构BooleanNotifier类
把原来的BooleanNotifier改成带@riverpod注解的形式,继承生成的_$BooleanNotifier基类,同时将构造函数的defaultValue参数移到build方法中:
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; // 必须添加这行,指定生成的代码文件路径,替换成你的实际文件名 part 'your_file_name.g.dart'; @riverpod class BooleanNotifier extends _$BooleanNotifier { @override bool build({required bool defaultValue}) { // 初始化状态为传入的默认值 return defaultValue; } void toggle() { state = !state; } void set({required bool value}) { state = value; } void reset() { state = defaultValue; // 直接用build方法的参数重置状态 } }
2. 运行代码生成命令
在项目根目录执行以下命令,生成对应的Provider代码:
flutter pub run build_runner build
如果需要实时监听文件变化自动重新生成,改用watch命令:
flutter pub run build_runner watch
3. 使用生成好的Provider
代码生成后会自动得到booleanNotifierProvider,使用方式如下:
// 监听状态,传入默认值false final currentState = ref.watch(booleanNotifierProvider(defaultValue: false)); // 调用状态修改方法 ref.read(booleanNotifierProvider(defaultValue: false).notifier).toggle(); ref.read(booleanNotifierProvider(defaultValue: false).notifier).set(value: true); ref.read(booleanNotifierProvider(defaultValue: false).notifier).reset();
如果你的默认值是固定不变的,也可以直接在build方法里写死,这样使用时不用传参:
@riverpod class BooleanNotifier extends _$BooleanNotifier { @override bool build() { return false; // 固定默认值为false } // 方法保持不变... }
此时调用简化为:
ref.watch(booleanNotifierProvider); ref.read(booleanNotifierProvider.notifier).toggle();
内容的提问来源于stack exchange,提问作者progNewbie
相关产品推荐
相关产品推荐

