Flutter状态管理Provider示例解析

 更新时间:2022年12月06日 09:37:11   作者:顾安  
这篇文章主要为大家介绍了Flutter状态管理Provider示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

什么是状态管理

状态管理是一个十分广泛的概念,因为状态无处不在。从广义角度讲状态管理就是页面跟代码、跟服务器进行数据同步。例如:你在某购物应用内,添加了一件商品,你需要在购物车页面进行展示。这就是一种状态。相反的,你在商品页面点击了添加到购物车,却在购物车页面没有发现或者过段时间它才展示了,这就是状态管理没有做好。这就是我所理解的状态管理。

官方给出的解释:状态管理就是当某个状态发生改变的时候,告知使用该状态的状态监听者,让状态所监听的属性随之改变,从而达到联动效果。

常见的状态管理框架有哪些

Provider

Provider是官方文档的例子用的方法,Google 比较推荐的用法,也是今天的主角。Provider的实现在内部还是利用了InheritedWidget,它就是用于提供数据,可以很方便的管理状态。

Redux

Redux是一种单向数据流架构,可以轻松开发,维护和测试应用程序,也是google推荐的状态管理方式。所有的状态都存储在Store里,View拿到Store的状态数据会映射成视图渲染。Redux不直接让view操作数据,通过dispatch一个action通知Reducer,状态变更(类似于vue中的vuex)。

GetX

GetX包含很多功能,各种弹出widget、路由管理、国际化、Utils、状态管理等所以我觉得它不单单是一个状态管理器,更像是一个框架(类似于vue cli)。关于GetX的争论也很多,今天我们不讨论。我的建议是,对于像我一样的小白,还是从Provider开始,打好基础再说。

Provider 使用

添加依赖

  • 使用命令行方式
flutter pub add provider
  • pubspec.yaml 添加这样一行(并运行隐式flutter pub get):
dependencies:
provider: ^6.0.4

导入应用

import 'package:provider/provider.dart';

定义需要共享的数据

class ProviderData with ChangeNotifier {
  int count = 0;
  void increment() {
    count++;
    notifyListeners();
  }
}

在应用程序入口初始化

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import './provider/index.dart';
import './page/HomePage.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (_) => CountNotifier(),
      child: MaterialApp(
        debugShowCheckedModeBanner: false,
         home: const Scaffold(
            body: HomePage(),
          ),
      ),
    );
  }
}

使用共享数据

import 'package:flutter/material.dart';
import 'package:flutter_provider_example/provider_count_example/count_notifier.dart';
import './provider/provider.dart';
class ProviderExample extends StatefulWidget {
  const ProviderExample({Key? key}) : super(key: key);
  @override
  State<ProviderExample> createState() => _ProviderExampleState();
}
class _ProviderExampleState extends State<ProviderExample> {
  final counter = Provider.of<ProviderData>(context);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("InheritedWidget"),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){
          counter.increment();
        },
        child: const Icon(Icons.add),
      ),
      body: Center(
        child: Text(counter.count.toString(),
          style: const TextStyle(
              color: Colors.red,
              fontSize: 50
          ),
        ),
      ),
    );
  }
}

状态管理的好处

  • 能有效分离 UI 层和数据处理层
  • 帮助前端应用结构化数据
  • 有效控制状态的变化
  • 处理同步与异步
  • 实现一些日志打印,热加,同构应用等功能
  • ...

结束语

关于flutter状态管理的学习到这里就结束了,更多关于Flutter状态管理Provider的资料请关注脚本之家其它相关文章!

相关文章

  • Android中设置组件半透明和透明的效果示例

    Android中设置组件半透明和透明的效果示例

    这篇文章主要给大家介绍了Android中设置组件半透明和透明效果的相关资料,文中给出了详细的介绍和示例代码,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • Android仿新浪微博/QQ空间滑动自动播放视频功能

    Android仿新浪微博/QQ空间滑动自动播放视频功能

    相信用过新浪微博或者QQ空间的朋友都看到过滑动自动播放视频的效果,那么这篇文章跟大家分享下如何利用Android实现这一个功能,有需要的朋友们可以参考借鉴。
    2016-09-09
  • Android pull解析xml的实现方法

    Android pull解析xml的实现方法

    这篇文章主要介绍了Android pull解析xml的实现方法的相关资料,希望通过本文能帮助到大家,谢谢大家对本站的支持!需要的朋友可以参考下
    2017-10-10
  • android 大图片拖拽并缩放实现原理

    android 大图片拖拽并缩放实现原理

    android 大图片拖拽缩放有利于用户体验,在开发过程中经常使用到,这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助
    2013-01-01
  • android不同activity之间共享数据解决方法

    android不同activity之间共享数据解决方法

    最近做局域网socket连接问题,要在多个activity之间公用一个socket连接,就在网上搜了下资料,感觉还是application方法好用,帖出来需要的朋友可以参考下
    2012-11-11
  • ListView通用泛型适配器

    ListView通用泛型适配器

    今天小编就为大家分享一篇关于ListView通用泛型适配器,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • android 获取屏幕尺寸

    android 获取屏幕尺寸

    这篇文章主要介绍了android 获取屏幕尺寸的方法,需要的朋友可以参考下
    2015-03-03
  • Android RecyclerView添加搜索过滤器的示例代码

    Android RecyclerView添加搜索过滤器的示例代码

    本篇文章主要介绍了Android RecyclerView添加搜索过滤器的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Android注册广播的两种方法分析

    Android注册广播的两种方法分析

    这篇文章主要介绍了Android注册广播的两种方法,结合实例形式分析了Android注册广播的方法、步骤与相关注意事项,需要的朋友可以参考下
    2016-02-02
  • android应用实现开机自动启动方法

    android应用实现开机自动启动方法

    这篇文章主要介绍了android应用实现开机自动启动方法,本文讲解了原理和编码实例,需要的朋友可以参考下
    2015-05-05

最新评论