diff --git a/lib/mains/gt.dart b/lib/mains/gt.dart index 5dcaaca..a4f8795 100644 --- a/lib/mains/gt.dart +++ b/lib/mains/gt.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; +import 'package:riverpod_flutter_tuts/widgets/notifier/counter_widget.dart'; import '../widgets/consumer/random.dart'; import '../widgets/simples/random.dart'; @@ -42,7 +43,8 @@ class MyApp extends ConsumerWidget { const Expanded(child: Text('1')), Expanded(child: Text(value)), const Expanded(child: RandomWidget()), - const Expanded(child: Random2Widget()) + const Expanded(child: Random2Widget()), + const Expanded(child: CounterWidget()), ], ) diff --git a/lib/widgets/notifier/counter.dart b/lib/widgets/notifier/counter.dart new file mode 100644 index 0000000..98f2667 --- /dev/null +++ b/lib/widgets/notifier/counter.dart @@ -0,0 +1,29 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:riverpod_annotation/riverpod_annotation.dart'; + + +part 'counter.g.dart'; + +@riverpod +class CounterNotifier extends _$CounterNotifier { + + int x = 0; + @override + Future build() async{ + return x; + } + + void plus() { + x++; + ref.invalidateSelf(); + // state = AsyncData(x); + } + + void minus() { + x--; + // ref.invalidateSelf(); + state = AsyncData(x); + } +} diff --git a/lib/widgets/notifier/counter_widget.dart b/lib/widgets/notifier/counter_widget.dart new file mode 100644 index 0000000..ee279f8 --- /dev/null +++ b/lib/widgets/notifier/counter_widget.dart @@ -0,0 +1,34 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:riverpod_flutter_tuts/widgets/notifier/counter.dart'; + + +class CounterWidget extends ConsumerWidget { + const CounterWidget({super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + // TODO: implement build + + var myRandom = ref.watch(counterNotifierProvider); + return Column( + children: [ + Center( + child: switch (myRandom) { + AsyncData(:final value ) => Text( + 'data: $value' + ), + AsyncError() => const Text('Oops, something unexpected happened'), + _ => const CircularProgressIndicator(), + }), + ElevatedButton(onPressed:() { + ref.read(counterNotifierProvider.notifier).plus(); + }, child: const Text("plus")), + ElevatedButton(onPressed: () { + ref.read(counterNotifierProvider.notifier).minus(); + }, child: const Text("minus")), + ] + ); + } +} \ No newline at end of file