组合River pod提供商



我正试图通过组合两个提供程序来创建一个简单的riverpod计数器应用程序,如果一个提供程序的计数发生变化,结果将乘以另一个提供器的值,但按照代码中所示的方式处理时会出现编译时错误。我是Riverpod的新手,我使用的是flutter Riverpod 2.0.2版本。

我的代码:

import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
final _myCount = StateNotifierProvider((ref) => ItemProvider());
final _myPrice = StateProvider((ref) => 200);
final _priceManager = StateProvider(
(ref) {
final myCountProvider = ref.watch(_myCount);
final myPriceProvider = ref.watch(_myPrice);
// error
return (myCountProvider * myPriceProvider);
},
);
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('RIVERPOD'),
centerTitle: true,
),
body: Consumer(builder: (context, ref, child) {
final newCount = ref.watch(_myCount);
final itemChange = ref.read(_myCount.notifier);
final multiprovider = ref.watch(_priceManager);
return Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("ITEMS: "),
IconButton(
onPressed: () {
itemChange.decrement();
},
icon: const Icon(
Icons.arrow_back_ios,
size: 12.0,
)),
Text('$newCount'),
IconButton(
onPressed: () {
itemChange.increment();
},
icon: const Icon(
Icons.arrow_forward_ios,
size: 12.0,
)),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text("PRICE: "),
Text("$multiprovider"),
],
)
],
);
}),
);
}
}
class ItemProvider<int> extends StateNotifier {
ItemProvider() : super(1);
void increment() {
state++;
}
void decrement() {
if (state != 1) {
state--;
}
}
}

您的代码大部分都很好,但您忘记在一堆地方指定泛型类型:

- final _myCount = StateNotifierProvider((ref) => ItemProvider());
+ final _myCount = StateNotifierProvider<ItemProvider, int>((ref) => ItemProvider());
- class ItemProvider<int> extends StateNotifier {
+ class ItemProvider extends StateNotifier<int> {

最新更新