o 0.0.3 copy "o: ^0.0.3" to clipboard
o: ^0.0.3 copied to clipboard

o is a simple state management util to manage AppState and LocalState.

o #

Under Progress #

o is a simple state management util to manage AppState and LocalState.

  • Based on Streams
  • Easy LocalState management
  • Global singleton for AppState
  • Beta

Features #

  • It's so bad and dumb
  • StreamBuilder based helper widgets
  • Previous state
  • Notify state
  • Hooks for easy usage
  • Customizable
  • Filter-out unwanted rebuilds.

Local State

final (count, setCount, _) = useState(50);
setCount(23);
final (count, _, setCount) = useState(50);
setCount(((prev) => prev + 10));
Usage
class App extends StatelessWidget {
  const App({super.key});

  @override
  Widget build(BuildContext context) {
    final (count, setCount, _) = useState(50);
    final (balls, _, setBalls) = useState(50);

    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Observer(
          observable: count,
          builder: (context, obs, value) => Text('Count : $value'),
        ),
        Observer(
          observable: balls,
          builder: (context, obs, value) => Text('Balls : $value'),
        ),
        OutlinedButton(
            onPressed: () => setCount(100), child: const Text('make it 100')),
        OutlinedButton(
            onPressed: () => setBalls(((prev) => prev + 100)),
            child: const Text('more balls'))
      ],
    );
  }
}

App State

final (down, setDown, _) = useStore('counter', 500);
setDown(69);
final (down, _, setDown) = useStore('counter', 500);
setDown((prev) => prev - 1);
Usage

main() {
  useStore<int>('counter', 150);
  // unnecessary, [ref] automatically creates a state if needed.
  // use it when runtime stream listeners create states.
  // refer auth_example

  runApp(const MaterialApp(home: App()));
}

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

  @override
  Widget build(BuildContext context) {
    final (down, _, setDown) = useStore('counter', 500); // [ref]

    return Column(
      children: [
        Observer(
          observable: down,
          builder: (context, obs, value) => Text('Store : $value'),
        ),
        FloatingActionButton(onPressed: () => setDown((prev) => prev - 1)),
      ],
    );
  }
}

Filtered Local State

final (count, _, setCount) = useTag(3);

setCount((prev)=> 1, tags : ['widget1']); // tags?
Usage
// same Observer, multiple listeners
// refer tag_example

Widget : 

TaggedObserver(
            observable: count,
            builder: (context, value, obs, invalid) => Text(
                  'data',
                  style: TextStyle(
                    color: invalid ? Colors.white : Colors.blueAccent,
                  ),
                ),
            tag: 'tag')
        .distinct(); // extension
        .....
TaggedObserver extensions
distinct();
invalidatePrevNext();
invalidateDistinctPrevNext();
invalidateNext();
// refer API docs
:)

Special thanks to @theniceboy | Gist

License #

MIT

Free Software, Hell Yeah!

2
likes
0
pub points
13%
popularity

Publisher

unverified uploader

o is a simple state management util to manage AppState and LocalState.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

flutter

More

Packages that depend on o