Thanks to visit codestin.com
Credit goes to github.com

Skip to content

ds-42/state_mgr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

state_mgr

State manager for flutter widgets

ChangeLog

ChangeLog.md

About

This plugin allows management of states your objects not using stateful widgets State manager allows you to separate the business logic of managing the state of the model and its presentation

Usage

Below is a basic sample application using the state_manager library

import 'package:flutter/material.dart';
import 'package:state_mgr/state_mgr.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Simple stater demo',
      home: MyStaterPage(title: 'Flutter Demo Stater Page'),
    );
  }
}

class MyStaterPage extends StatelessWidget {
  const MyStaterPage({super.key, required this.title});

  final String title;

  static int _counter = 0;

  @override
  Widget build(BuildContext context) {
    return Stater<StateManager>(
        builder: (stater) {
          return Scaffold(
            appBar: AppBar(
              title: Text(title),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  const Text(
                    'You have pushed the button this many times:',
                  ),
                  Text(
                    '$_counter',
                    style: Theme.of(context).textTheme.headline4,
                  ),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: (){
                _counter++;
                stater.invalidate();
              },
              tooltip: 'Increment',
              child: const Icon(Icons.add),
            ), // This trailing comma makes auto-formatting nicer for build methods.
          );
        }
    );
  }
}

Let's take out the logic of processing the states of the counter in a separate class CounterState. 'manager' is used to create a counter state management context

class MyStaterPage extends StatelessWidget {
  const MyStaterPage({super.key, required this.title});

  final String title;

  @override
  Widget build(BuildContext context) {
    return Stater(
        manager: () => CounterState(),
        builder: (stater) {
          return Scaffold(
            appBar: AppBar(
              title: Text(title),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  const Text(
                    'You have pushed the button this many times:',
                  ),
                  Text(
                    '${stater.counter}',
                    style: Theme.of(context).textTheme.headline4,
                  ),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: () => stater.counter++,
              tooltip: 'Increment',
              child: const Icon(Icons.add),
            ), // This trailing comma makes auto-formatting nicer for build methods.
          );
        }
    );
  }
}

class CounterState extends StateManager {
  int _counter = 0;
  int get counter => _counter;
  set counter(int value) {
    if(_counter == value) return;
    _counter = value;
    invalidate();
  }
}

Now all counter state management logic can be performed in a separate CounterState class. For example, let's add emulation of a long wait for a response from the server

class CounterState extends StateManager {
  int _counter = 0;
  int get counter => _counter;
  set counter(int value) {
    if(_counter == value) return;

    Future.delayed(const Duration(seconds: 1), () {
      _counter = value;
      invalidate();
    });
  }
}

Now we can expand and add more options to control the counter state logic

About

State manager for flutter widgets

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published