riverpod_essentials 0.0.1 copy "riverpod_essentials: ^0.0.1" to clipboard
riverpod_essentials: ^0.0.1 copied to clipboard

The Essential Providers for Riverpod.

example/lib/main.dart

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