我在类State2中有一个appState,属性为pos.
class State2 {
double pos = 0.9;
String anotherProerty = "anotherproperty";
}
在使用Riverpod NotifierProvider时,我希望将pos属性用于Consumer Widget中的滑块. 不幸的是,这并不像我实现的那样起作用.无法移动滑块.
作为比较,我用一个"简单的"NotifierProvider实现了第二个Slider,它工作得很好.
你知道S出了什么问题吗?
以下是我的代码:
class Position1 extends Notifier<double> {
@override
double build() {
return 0.1;
}
void updatePos(double newPos) {
state = newPos;
}
}
final position1Provider = NotifierProvider<Position1, double>(Position1.new);
class State2 {
double pos = 0.9;
String anotherProerty = "anotherproperty";
}
class State2Notifier extends Notifier<State2> {
@override
State2 build() {
return State2();
}
void updatePos(double pos) {
state.pos = pos;
}
}
final state2Provider =
NotifierProvider<State2Notifier, State2>(State2Notifier.new);
class RiverpodExampe1 extends ConsumerWidget {
const RiverpodExampe1({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final pos1 = ref.watch(position1Provider);
return Scaffold(
appBar: AppBar(
title: const Text("Riverpod Sample 2"),
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
),
body: Column(
children: [
Text("Pos1: $pos1"),
Slider(
value: pos1,
onChanged: (newPosition) {
ref.read(position1Provider.notifier).updatePos(newPosition);
}),
Slider(
value: ref.watch(state2Provider).pos,
onChanged: (newPosition) {
ref.read(state2Provider.notifier).updatePos(newPosition);
})
],
));
}
}