当前位置: 首页 > news >正文

flutter的provider4.0使用

dependencies:
  flutter:
    sdk: flutter
  # 状态管理 https://github.com/rrousselGit/provider
  provider: ^4.3.3

Counter.dart

import 'package:flutter/material.dart';

class Counter with ChangeNotifier {
  int _count = 0;
  int get count => _count;  //外部使用
  void incCount() {         //更新状态
    this._count++;
    notifyListeners();        //表示更新状态
  }
}




  main.dart 


import 'package:flutter/material.dart';
import 'package:flutters/pagea.dart';
import 'package:flutters/pageb.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(MyApp());
}


class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return  MultiProvider(
        providers: [
          ChangeNotifierProvider(create: (_)=>Counter()),
        ],
        child: Consumer<Counter>(
            builder: (_,Counter counter,__){
            return MaterialApp(
              title: "测试数据",
              home:MyHomePage(),
              builder: (BuildContext context, Widget child) {
                return MediaQuery(
                  data: MediaQuery.of(context).copyWith(textScaleFactor: 1.0),
                  child: child,
                );
              },
            );
    },
   )

    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("测试数据"),
      ),
      body: Center(
        child: Column(
          children: [
            FlatButton(onPressed: (){
             Navigator.push(context, MaterialPageRoute(builder: (_){
               return PageA();
             }));
            }, child: Text("设置")),
            FlatButton(onPressed: (){
              Navigator.push(context, MaterialPageRoute(builder: (_){
                return PageB();
              }));
            }, child: Text("获取"))
          ],
        ),
      ),
    );
  }
}

 pageA.dart

import 'package:flutter/material.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';

class PageA extends StatefulWidget {
  PageA({Key key}):super(key:key);

  @override
  _PageAState createState() => _PageAState();
}
class _PageAState extends State<PageA> {
  @override
  Widget build(BuildContext context) {
   var counterProvider= Provider.of<Counter>(context);    //获取其上下文
    return Scaffold(
      appBar: AppBar(
        title: Text("pageA"),
      ),
      body: Center(
        child: FlatButton(
          onPressed: (){
           counterProvider.incCount();
          },
          child: Text('${counterProvider.count}'),

        ),
      ),
    );
  }
}

pageB.dart

import 'package:flutter/material.dart';
import 'package:flutters/provider/Counter.dart';
import 'package:provider/provider.dart';

class PageB extends StatefulWidget {
  @override
  _PageBState createState() => _PageBState();
}
class _PageBState extends State<PageB> {
  @override
  Widget build(BuildContext context) {
    var counterProvider= Provider.of<Counter>(context);    //获取其上下文
    return Scaffold(
      appBar: AppBar(
        title: Text("pageA"),
      ),
      body: Center(
        child: FlatButton(
            child:Text("${counterProvider.count}")
        ),
      ),
    );
  }
}

 

相关文章:

  • 关于给CSDNBLOG添加计数器
  • 制作自定义CSDNBLOG皮肤
  • 仿知乎ui实现bottomNavigationBar
  • 高效CSDNBLOG技巧终结篇
  • 给BLOG加一个控制菜单展开和收缩的按扭
  • 在自己Blog的导航菜单加动态摄影作品展
  • 给自己的BLOG加一个不用注册申请的计数计。
  • flutter轮播图swiper
  • 给自己的BLOG来点音乐如何?
  • flutter 设置状态栏的颜色,背景appBar
  • 跟我来玩转CSDN BLOG界面
  • flutter的PreferredSize
  • Dev-Cpp/Mingw32 环境介绍(1)
  • 新浪体育图片新闻动态效果代码
  • golang切片的容量长度
  • CSS相对定位
  • ES6简单总结(搭配简单的讲解和小案例)
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Java 网络编程(2):UDP 的使用
  • JS题目及答案整理
  • laravel 用artisan创建自己的模板
  • Nacos系列:Nacos的Java SDK使用
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • PHP 小技巧
  • Python学习之路16-使用API
  • Vue.js源码(2):初探List Rendering
  • Vue--数据传输
  • WebSocket使用
  • yii2中session跨域名的问题
  • 阿里云前端周刊 - 第 26 期
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 记一次和乔布斯合作最难忘的经历
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 批量截取pdf文件
  • 我们雇佣了一只大猴子...
  • ​比特币大跌的 2 个原因
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #HarmonyOS:Web组件的使用
  • #include<初见C语言之指针(5)>
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (Java数据结构)ArrayList
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)nsfocus-绿盟科技笔试题目
  • (转载)Linux 多线程条件变量同步
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET正则基础之——正则委托
  • .pop ----remove 删除