我正在测试riverpod,但它不起作用。
我只想拥有一个典型的计数器,当它达到两个时它会转到另一个屏幕。计数器工作但不启动第二个屏幕或通过 ProviderListener。
void main() {
runApp(ProviderScope(child: MyApp()));
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
final _counterProvider = StateNotifierProvider<CounterStateNotifier>((ref) {
return CounterStateNotifier();
});
class CounterStateNotifier extends StateNotifier<int> {
CounterStateNotifier([int count]) : super(count ?? 0);
void increment() {
state++;
}
}
class MyHomePage extends ConsumerWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
Widget build(BuildContext context, ScopedReader watch) {
final int _counter = watch(_counterProvider.state);
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: ProviderListener<StateNotifier<int>>(
provider: _counterProvider,
onChange: (context, _counter) {
if (_counter == 2) {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (BuildContext context) => ScondScreen(),
),
);
}
},
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
context.read(_counterProvider).increment();
},
tooltip: 'Increment',
child: Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
我还没有找到一个 ProviderListener 示例来指导我。
Lorem ipsum dolor sit amet, consectetur adipiscing elit。Vivamus vel sem velit。Sed 调味品 convallis sollicitudin。Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus。Quisque maximus congue porttitor。