flutter - 尝试按照文档使用 StateNotifierProvider
问题描述
在分别阅读和阅读了 flutter_riverpod 和 riverpod 文档后ConsumerWidget
,StateNotifierProvider
我使用以下内容修改了示例代码:
这是我的 StateNotifier 类:
class SelectedFoodsNotifier extends StateNotifier<List<Food>> {
SelectedFoodsNotifier() : super([]);
void add(Food food) {
state = [...state, food];
}
void remove(int foodId) {
state = [
for (final food in state)
if (food.id != foodId) food,
];
}
}
这是我的提供者:
final selectedFoodsProvider = StateNotifierProvider((ref) => SelectedFoodsNotifier());
这是我的 ConsumerWidget 类:
import 'package:diabretes/providers/providers.dart';
import 'package:diabretes/respository/DatabaseRepository.dart';
import 'package:diabretes/widgets/FoodCalculator/no_foods_selected.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
class CalculatorDrawer extends ConsumerWidget {
@override
Widget build(BuildContext context, ScopedReader watch) {
List<Food> selected_foods = watch(selectedFoodsProvider);
return AnimatedContainer(
duration: Duration(milliseconds: 500),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0),
topRight: Radius.circular(10.0),
),
boxShadow: [
BoxShadow(
offset: Offset(0, 0),
color: Colors.black.withOpacity(0.20),
blurRadius: 16,
spreadRadius: 2)
],
),
child: NoFoodsSelected());
}
}
但是线
List<Food> selected_foods = watch(selectedFoodsProvider);
给出以下错误:The argument type 'StateNotifierProvider<SelectedFoods, dynamic>' can't be assigned to the parameter type 'ProviderBase<Object?, List<Food>>'
我错过了什么?
提前致谢。
解决方案
尝试final selectedFoodsProvider = StateNotifierProvider<SelectedFoodsNotifier, List<Food>>((ref) => SelectedFoodsNotifier());
StateNotifierProvider
接受两个通用参数。
推荐阅读
- ruby-on-rails - 为什么 webpacker:compile 在 javascript_pack_tag 中插入特定的主机名?
- domain-driven-design - 按 id 检索实体引用其他聚合
- c# - 循环遍历类属性并获得不同的值
- python - 将 csv 列的某些值替换为另一个列中的值
- ruby-on-rails - 满足条件后如何自动更新父级?
- bash - 根据索引从数组中删除多个元素
- electron - 如何在我的 Electron 应用程序的客户端代码中导入 Node 模块?
- html - ReactJs - SPA 导航栏
- c - 套接字:连接失败,连接被拒绝
- node.js - npm 不支持 Node.js v10.0.0 但安装了旧版本