当print语句中的值正在更新时,状态未更新。我不知道我是否使用了正确的计数器类的方法,请帮助我。
下面是我的代码:
import 'package:flutter_riverpod/flutter_riverpod.dart';
class numbers{
int value1 = 0;
int value2 = 0;
}
class Counter extends StateNotifier<numbers> {
Counter(super.state);
void add1()
{
state.value1++;
print(state.value1.toString() + ' FromClass');
}
}
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'Counter.dart';
final counterProvider = StateNotifierProvider<Counter, numbers>((ref)=>Counter(numbers()));
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends ConsumerWidget {
@override
Widget build(BuildContext context,WidgetRef ref) {
var count = ref.watch(counterProvider.notifier).state.value1;
return MaterialApp(home: Scaffold(body: Column(mainAxisAlignment: MainAxisAlignment.center,children: [Center(child: Container(child: Text(count.toString()),),),
ElevatedButton(onPressed: (){
ref.read(counterProvider.notifier).state.value1++;
print(ref.read(counterProvider.notifier).state.value1);
//print(count.readValue1());
}, child: Text('+'))],),),);
}
}
按下+按钮后进行状态更新
1条答案
按热度按时间2ic8powd1#
首先,我转换了你的“数字”模型。首先,它必须是不可变的,并且正确地重新定义了==/hashCode。要轻松创建这样的模型,请仔细查看freezed包。
你的
Counter
类看起来像这样:接口转换如下:
我特意使用了
select
,这样更改value2
的值就不会触发重建。如果你需要跟踪Numbers
的整个状态,在build
方法中使用一个简单的ref.wacth(counterProvider)
: