Add counter and notifier for a value.

This commit is contained in:
zahra 2024-07-19 21:25:38 +03:30
parent 36e5156660
commit e9d74e2326
3 changed files with 66 additions and 1 deletions

View File

@ -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()),
],
)

View File

@ -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<int> build() async{
return x;
}
void plus() {
x++;
ref.invalidateSelf();
// state = AsyncData(x);
}
void minus() {
x--;
// ref.invalidateSelf();
state = AsyncData(x);
}
}

View File

@ -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")),
]
);
}
}