hive_state 0.4.0 copy "hive_state: ^0.4.0" to clipboard
hive_state: ^0.4.0 copied to clipboard

MVVM state management tool based on RxDart

Features #

基于RxDart 实现的MVVM状态管理工具

  • 适用于: App/Page全局共享状态: 典型的如 '放置在App顶层,Page顶层的Provider状态'
  • 不适用: Widget私有状态: 如包装后的通过Widget树搜索状态的Widget, 请使用Provider等基于InheritedWidget,Controller,ValueNotifier...的方案

Getting started #

run example:

# simple example: use String type model
flutter run example/ex1_simple.dart -d chrome
# complex example: use custom type model
flutter run example/ex2_use_model.dart -d chrome
# use `hive_flutter`, persistent API data example
flutter run example/ex3_use_hive_box.dart -d chrome

Usage #

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

/// 1. Define your state
/// 1. 定义状态
class FooState extends HiveState<String> {
  @override
  StreamController<String> onCreate({String? initValue}) =>
      super.onCreate(initValue: 'this is initial value');
}

/// 2. Update your state
/// 2. 更新状态数据/异常
/// ... callback, API, ...
onTap() {
  FooState().put('some data');
  // or
  FooState().putError('error info');
  // or 
  FooState().update((old) => 'new data with [$old]');
  // if old is object:
  FooState().update((old) => old
    ..someField = null
    ..fooField = null
    ..barField = null);
  // or
  FooState().updateOrNull((old) => 'new data with [$old]');
}

/// 3. Read Value
/// 3. 读取状态数据
/// ... UI2 ...
buildSimpleUI() {
  var v;
  v = FooState().value;
  // or
  v = FooState().valueOrNull;

  return Text("$v");
}

/// 4. Listen to your state
/// 4. 监听状态&异常数据变化
/// ... UI ...
class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    // 可以在进入页面时初始化状态, 自定义类型的状态必须要提供初始状态
    BarState().put("this is init value");

    // 监听异常1
    BarState().stream.listen((event) {}, onError: (e) {
      ScaffoldMessenger.of(context)
          .showSnackBar(SnackBar(content: Text("App收到异常 $e")));
    });
    super.initState();
  }

  buildSomeUI() {
    return StreamBuilder(
      // 监听状态
      stream: FooState().stream,
      builder: (context, snapshot) {
        // 监听/处理异常2
        if (snapshot.error != null) {
          return Text("ERROR: ${snapshot.error}");
        }
        return Text("${s.data}");
      },
    );
  }

}


/// 5. dispose
/// 如果该状态退出页面后不再使用,则可以清除
/// ... UI3 ...
class XxxPageState extends State<XxxPage> {
  dispose() {
    FooState().dispose();
    super.dispose();
  }
}

0
likes
100
points
224
downloads

Publisher

verified publisherwyattcoder.top

Weekly Downloads

MVVM state management tool based on RxDart

Repository (GitHub)

Topics

#state #mvvm #rx #reactive

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter, hive_flutter, injectable, provider, rxdart

More

Packages that depend on hive_state