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

如何使用Riverpod Generator生成各类Provider?

使用Riverpod Generator创建各类Provider的方法

借助riverpod_generator,我们可以通过注解方式快速创建基础Provider:

@riverpod
int foo(FooRef ref) => 0;

这和传统写法效果完全一致:

final fooProvider = Provider((ref) => 0);

针对FutureProvider、StateProvider等其他Provider,同样可以用注解方式实现,具体写法如下:

FutureProvider

定义返回Future类型的函数,Ref类型会自动以函数名前缀生成(比如函数名为fetchUser,Ref就是FetchUserRef):

@riverpod
Future<User> fetchUser(FetchUserRef ref) async {
  final response = await http.get(Uri.parse('https://api.example.com/users/1'));
  return User.fromJson(jsonDecode(response.body));
}

等价于传统写法:

final fetchUserProvider = FutureProvider((ref) async {
  final response = await http.get(Uri.parse('https://api.example.com/users/1'));
  return User.fromJson(jsonDecode(response.body));
});

StateProvider

通过类继承_$[类名]的方式实现,build方法返回初始状态,还能直接在类内定义状态操作方法:

@riverpod
class Counter extends _$Counter {
  @override
  int build() => 0;

  void increment() => state++;
  void decrement() => state--;
}

等价于传统写法:

final counterProvider = StateProvider((ref) => 0);

注解写法的优势在于可以把状态修改逻辑封装在类内,代码更聚合。

StateNotifierProvider

同样用类继承方式,build返回初始状态,类内实现复杂状态操作逻辑:

@riverpod
class TodoList extends _$TodoList {
  @override
  List<Todo> build() => [];

  void addTodo(Todo todo) => state = [...state, todo];
  void toggleTodo(String id) {
    state = state.map((todo) {
      if (todo.id == id) return todo.copyWith(completed: !todo.completed);
      return todo;
    }).toList();
  }
}

等价于传统写法:

class TodoListNotifier extends StateNotifier<List<Todo>> {
  TodoListNotifier() : super([]);

  void addTodo(Todo todo) => state = [...state, todo];
  void toggleTodo(String id) {
    state = state.map((todo) {
      if (todo.id == id) return todo.copyWith(completed: !todo.completed);
      return todo;
    }).toList();
  }
}

final todoListProvider = StateNotifierProvider<TodoListNotifier, List<Todo>>((ref) => TodoListNotifier());

内容的提问来源于stack exchange,提问作者iDecode

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:50:36