flutter provider 状态管理(1)

1.分类及作用

项目中常用的ChangeNotifierProvider,本章浅谈一下ChangeNotifierProvider如何做数据更新,和状态保存;

2.全局主题切换(暗黑模式)

  • 依赖provider: ^4.1.3

  • 建立主题model

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

class ThemeViewModel extends ChangeNotifier{
  ThemeType currentType;
  ThemeData themeData;


  ///构造函数,初始化操作
  ThemeViewModel(ThemeType type){
    currentType = type;
    if(currentType == ThemeType.dark){
      themeData = ThemeData.dark();
    }else{
      themeData = ThemeData.light();
    }
  }

  ///取相反的状态
  void reserve(){
    if(currentType == ThemeType.dark){
      _updateTheme(ThemeType.light);
    }else{
      _updateTheme(ThemeType.dark);
    }
  }



  ///更新主题
  void _updateTheme(ThemeType type){
    currentType = type;
    if(type == ThemeType.dark){
      themeData = ThemeData.dark();
    }else{
      themeData = ThemeData.light();
    }
    notifyListeners();
  }


}

enum ThemeType{
  light,
  dark,
}
  • 在mian.dart中设置默认值
runApp(ChangeNotifierProvider<ThemeViewModel>(
//设置默认值
    create: (_)=>ThemeViewModel(ThemeType.light),
    child: MyApp(),
  ),);
  •  在MyApp的theme属性中用provider.of()来获取值
theme: Provider.of<ThemeViewModel>(context , listen: true).themeData,
  •  1.建立model(设置属性,和修改主题的方法)-->2.注册(设置默认值)-->3.获取(默认/修改)的值-->修改值

修改主题值(通过consumer的builder方法去构建组件,ontap修改主题色)

 InkWell(
            child: Consumer<ThemeViewModel>(
              builder: (_, viewModel , child){
                return Icon(Icons.lightbulb_outline);
              },
            ),
            onTap:()=> Provider.of<ThemeViewModel>(context , listen: false).reserve()
          ),

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值