Flutter学习笔记 使用Provide实现状态管理

首先添加插件:

dependencies:
  provide: ^1.0.2

例子:
首先新建了一个provide包,里面新建了一个counter.dart文件
内容:

import 'package:flutter/material.dart';

class Counter with ChangeNotifier{
  int value = 0;

  increment(){
    value++;
    //通知
    notifyListeners();
  }
}

然后修改main.dart

import 'package:flutter/material.dart';
import 'package:fluttertest/Test.dart';
import 'package:fluttertest/Test2.dart';
import 'package:provide/provide.dart';
import 'provide/counter.dart';

void main() {
  var counter = Counter();
  var providers = Providers();
  providers..provide(Provider<Counter>.value(counter));
  runApp(ProviderNode(child: MyApp(), providers: providers));
}

新建了两个界面
页面一:

import 'package:flutter/material.dart';
import 'package:provide/provide.dart';
import 'provide/counter.dart';

class TestPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      body: Center(
        child: Column(
          children: <Widget>[
            Number(),
            MyButton(),
            Button2(),
          ],
        ),
      ),
    );
  }
}

class Number extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      padding: EdgeInsets.only(top: 200.0),
      child: Provide<Counter>(
        builder: (context, child, counter) {
          return Text(
            '${counter.value}',
            style: TextStyle(
              fontSize: 30,
            ),
          );
        },
      ),
    );
  }
}

class MyButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return RaisedButton(
      onPressed: () {
        Provide.value<Counter>(context).increment();
      },
      child: Text('递增'),
    );
  }
}

class Button2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return RaisedButton(onPressed: () {
      Navigator.of(context).pushNamed('/test2');
    },
    child: Text('第二个页面'),);
  }
}

页面2:

import 'package:flutter/material.dart';
import 'package:fluttertest/provide/counter.dart';
import 'package:provide/provide.dart';

class B extends StatefulWidget{
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return BState();
  }
}

class BState extends State<B>{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(),
      body: Center(
        child:Provide<Counter>(
          builder: (context, child, counter) {
            return Text(
              '${counter.value}',
              style: TextStyle(
                fontSize: 30,
              ),
            );
          },
        ),
      ),
    );
  }
}

会发现虽然是statelesswidget,但还是可以通过Provide来实现全局的状态管理
当点击页面一递增数据后,点击跳转到页面二,会发现状态同时发生了改变
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值