美文网首页
状态管理

状态管理

作者: 梦幽辰 | 来源:发表于2020-01-31 20:05 被阅读0次

    InheritedWidget

    // 爷爷组件
    class StateManagementDemo extends StatefulWidget {
      @override
      _StateManagementDemoState createState() => _StateManagementDemoState();
    }
    
    class _StateManagementDemoState extends State<StateManagementDemo> {
      int _count = 0;
    
      void _transform() {
        setState(() {
          _count += 1;
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return CounterProvider(
          count: _count,
          transform: _transform,
          child: Scaffold(
              appBar: AppBar(
                title: Text('StateManagementDemo'),
                elevation: 0,
              ),
              body: CounterWrapper()),
        );
      }
    }
    
    // 父亲组件
    class CounterWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Counter();
      }
    }
    
    // 孙组件
    class Counter extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        final int count = CounterProvider.of(context).count;
        final VoidCallback transform = CounterProvider.of(context).transform;
        return Center(
          child: ActionChip(label: Text('$count'), onPressed: transform),
        );
      }
    }
    
    // 状态管理组件
    class CounterProvider extends InheritedWidget {
      final int count;
      final VoidCallback transform;
      final Widget child;
    
      CounterProvider({this.count, this.transform, this.child}) : super(child: child);
    
      static CounterProvider of(BuildContext context) => context.inheritFromWidgetOfExactType(CounterProvider);
    
      @override
      bool updateShouldNotify(InheritedWidget oldWidget) {
        return true;
      }
    }
    

    ScopedModel(第三方库)

    // 爷爷组件
    class StateManagementDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ScopedModel(
          model: CounterModel(),
          child: Scaffold(
            appBar: AppBar(
              title: Text('StateManagementDemo'),
              elevation: 0,
            ),
            body: CounterWrapper(),
            floatingActionButton: ScopedModelDescendant<CounterModel>(
              rebuildOnChange: false,
              builder: (context, _, model) => FloatingActionButton(
                child: Icon(Icons.add), 
                onPressed: model.transform
              ),
            ),
          ),
        );
      }
    }
    
    // 父亲组件
    class CounterWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Counter();
      }
    }
    
    // 孙组件
    class Counter extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ScopedModelDescendant<CounterModel>(
          builder: (context, _, model)=>ActionChip(
            label: Text('${model.count}'),
            onPressed: model.transform,
          ),
        );
      }
    }
    
    // 状态管理组件
    class CounterModel extends Model {
      int _count = 0;
      int get count => _count;
    
      void transform() {
        _count += 1;
        notifyListeners();
      }
    }
    

    相关文章

      网友评论

          本文标题:状态管理

          本文链接:https://www.haomeiwen.com/subject/vyqnthtx.html