riverpod_essentials 0.0.1
riverpod_essentials: ^0.0.1 copied to clipboard
The Essential Providers for Riverpod.
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:riverpod_essentials/riverpod_essentials.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return ProviderScope(child: MaterialApp(home: const HomePage()));
}
}
final _countProvider = valueProvider<int>('counter', initialValue: 0);
final _countdownProvider = countdownProvider('countdown');
final _textProvider = valueProvider<String>('text', initialValue: '');
class HomePage extends ConsumerWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context, WidgetRef ref) {
final count = ref.watch(_countProvider);
final countdown = ref.watch(_countdownProvider);
final isCountdownStopped = countdown == 0;
final text = ref.watch(_textProvider);
final debouncedText = ref.watch(debounceProvider(text)).value;
return Scaffold(
appBar: AppBar(title: Text('Riverpod Essentials Example')),
body: ListView(
children: [
ListTile(
title: Text('Count: $count'),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
IconButton(
onPressed: () => ref.read(_countProvider.notifier).increase(),
icon: Icon(Icons.add),
),
IconButton(
onPressed: () => ref.read(_countProvider.notifier).reset(),
icon: Icon(Icons.restart_alt),
),
],
),
),
ListTile(
title: Text('Countdown: $countdown'),
trailing: Row(
mainAxisSize: MainAxisSize.min,
children: [
FilledButton(
onPressed: () => isCountdownStopped
? ref.read(_countdownProvider.notifier).start(10)
: ref.read(_countdownProvider.notifier).stop(),
child: Text(isCountdownStopped ? 'Start' : 'Stop'),
),
],
),
),
ListTile(
title: TextField(
decoration: InputDecoration(hintText: 'Please input'),
onChanged: (value) => ref.read(_textProvider.notifier).set(value),
),
trailing: Text(debouncedText == null ? 'Typing...' : 'Ready to Go'),
),
],
),
);
}
}