Flutter Provider使用指南

本文详细介绍了Flutter中广泛使用的Provider库,包括如何安装、暴露和读取值、使用MultiProvider、ProxyProvider以及各种类型的Provider。通过项目实战,演示了如何在实际应用中有效地进行状态管理,解决组件重建频繁和异步更新等问题。同时,文章还探讨了自定义Provider的可能性。
摘要由CSDN通过智能技术生成

前言

  使用一种语言编写各种应用的时候,横亘在开发者面前的第一个问题就是如何进行状态管理。在前端领域,我们习惯使用框架或者各种辅助库来进行状态管理。例如,开发者经常使用react自带的context,或者mobx/redux等工具来管理组件间状态。在大热的跨端框架flutter中,笔者将对社区中使用广泛的provider框架进行介绍。

准备工作

安装与引入

provider pub链接
官方文档宣称(本文基于4.0版本),provider是一个依赖注入和状态管理的混合工具,通过组件来构建组件。
provider有以下三个特点:

  1. 可维护性,provider强制使用单向数据流
  2. 易测性/可组合性,provider可以很方便地模拟或者复写数据
  3. 鲁棒性,provider会在合适的时候更新组件或者模型的状态,降低错误率

在pubspec.yaml文件中加入如下内容:

dependencies:
  provider: ^4.0.0

然后执行命令flutter pub get,安装到本地。
使用时只需在文件头部加上如下内容:

import 'package:provider/provider.dart';

暴露一个值

如果我们想让某个变量能够被一个widget及其子widget所引用,我们需要将其暴露出来,典型写法如下:

Provider(
  create: (_) => new MyModel(),
  child: ...
)

读取一个值

如果要使用先前暴露的对象,可以这样操作

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    MyModel yourValue = Provider.of<MyModel>(context)
    return ...
  }
}

暴露和使用多个值(MultiProvider)

Provider的构造方法可以嵌套使用

Provider<Something>(
  create: (_) => Something(),
  child: Provider<SomethingElse>(
    create: (_) => SomethingElse(),
    child: Provider<AnotherThing>(
      create: (_) => AnotherThing(),
      child: someWidget,
    ),
  ),
),

上述代码看起来过于繁琐,走入了嵌套地狱,好在provider给了更加优雅的实现

MultiProvider(
  providers: [
    Provider<Something>(create: (_) => Something()),
    Provider<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值