首页 > 解决方案 > 尝试按照文档使用 StateNotifierProvider

问题描述

在分别阅读和阅读了 flutter_riverpod 和 riverpod 文档后ConsumerWidgetStateNotifierProvider我使用以下内容修改了示例代码:

这是我的 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>>'

我错过了什么?

提前致谢。

标签: flutterdartriverpod

解决方案


尝试final selectedFoodsProvider = StateNotifierProvider<SelectedFoodsNotifier, List<Food>>((ref) => SelectedFoodsNotifier());

StateNotifierProvider接受两个通用参数。


推荐阅读