zoukankan      html  css  js  c++  java
  • flutter State管理

    import 'package:flutter/material.dart';
    import 'package:scoped_model/scoped_model.dart';
    
    class StateManagementDemo extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ScopedModel(
          model: CounterModel(),
          child: Scaffold(
            appBar: AppBar(
              title: Text('StateManagementDemo'),
              elevation: 0.0,
            ),
            body: CounterWrapper(),
            floatingActionButton: ScopedModelDescendant<CounterModel>(
              rebuildOnChange: false,
              builder: (context, _, model) => FloatingActionButton(
                    child: Icon(Icons.add),
                    onPressed: model.increaseCount,
                  ),
            ),
          ),
        );
      }
    }
    
    class CounterWrapper extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return Center(
          child: Counter(),
        );
      }
    }
    
    class Counter extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return ScopedModelDescendant<CounterModel>(
          builder: (context, _, model) => ActionChip(
            label: Text('${model.count}'),
            onPressed: model.increaseCount,
          ),
        );
      }
    }
    
    class CounterProvider extends InheritedWidget {
      final int count;
      final VoidCallback increaseCount;
      final Widget child;
    
      CounterProvider({
        this.count,
        this.increaseCount,
        this.child,
      }) : super(child: child);
    
      static CounterProvider of(BuildContext context) =>
          context.inheritFromWidgetOfExactType(CounterProvider);
    
      @override
      bool updateShouldNotify(InheritedWidget oldWidget) {
        return true;
      }
    }
    
    class CounterModel extends Model {
      int _count = 0;
      int get count => _count;
    
      void increaseCount() {
        _count += 1;
        notifyListeners();
      }
    }
    scoped_model: ^0.3.0

    效果:

  • 相关阅读:
    FreeMarker中List排序
    Mingyang.net:为什么不将Bean定义在Action参数中?
    长春市学校标识码
    java解析html的table
    java发送http的get、post请求【备忘】
    CentOS安装CAS 5.3.4服务端
    设置JAVA环境变量
    CentOS安装Maven
    为tomcat8安装Native library
    openresty用naxsi防xss、SQL注入
  • 原文地址:https://www.cnblogs.com/loaderman/p/11345972.html
Copyright © 2011-2022 走看看