【发布时间】:2022-10-17 17:18:13
【问题描述】:
我正在尝试通过组合两个提供程序来创建一个简单的 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.decreament();
},
icon: const Icon(
Icons.arrow_back_ios,
size: 12.0,
)),
Text('$newCount'),
IconButton(
onPressed: () {
itemChange.increament();
},
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 increament() {
state++;
}
void decreament() {
if (state != 1) {
state--;
}
}
}
【问题讨论】:
-
什么是编译器错误?
-
不能无条件调用运算符“*”,因为接收者可以为“null”。尝试向目标添加空检查('!')。当我尝试使用上述源代码中的此代码( return (myCountProvider * myPriceProvider); )时出现
-
将 <int> 类型添加到您的整数提供程序。
标签: flutter riverpod flutter-riverpod