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

如何使用@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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:12:35