flutter_state_management 0.6.0 copy "flutter_state_management: ^0.6.0" to clipboard
flutter_state_management: ^0.6.0 copied to clipboard

A collection of helper classes to make the use of ChangeNotifier easier for state management

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_state_management/flutter_state_management.dart';
import 'package:isar_key_value/isar_key_value.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends RStatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    final counter = counterResolver()..watch(context);

    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text('You have pushed the button this many times:'),
              counter.builder(
                onLoaded: (context, data) => Text(
                  data.toString(),
                  style: Theme.of(context).textTheme.headlineMedium,
                ),
                onLoading: (_, __) => const CircularProgressIndicator(),
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: counter.increment,
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}

final counterResolver = Resolver((arg) => Counter());

class Counter extends PersistedStateNotifier<int, int> {
  Counter() : super(IsarKeyValueStore(), startState: 0);

  // Overriding persistence key is useful for versioning or
  // for differentiating between models of the same type
  @override
  String get key => '$runtimeType.1';

  void increment() async {
    persistedState = Loading(data: data);
    await Future.delayed(const Duration(seconds: 2));
    persistedState = Loaded(data: data + 1);
  }
}

class _Counter extends StateNotifier<int, Error> {
  _Counter() : super(const Loaded(data: 0));

  void increment() async {
    setLoaded(data);

    await Future.delayed(const Duration(seconds: 2));

    if (data > 20) {
      setFailure(StateError('greater than 20'));
    } else {
      setLoaded(data + 1);
    }
  }
}

class IsarKeyValueStore extends IsarKeyValue implements KeyValueStore {}
1
likes
140
pub points
64%
popularity

Publisher

verified publishermuha.dev

A collection of helper classes to make the use of ChangeNotifier easier for state management

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (LICENSE)

Dependencies

flutter

More

Packages that depend on flutter_state_management