首先引入provider库
打开项目下pubspec.yaml

dependencies:
    provider: ^6.0.4

安装

flutter pub get

关键点:

1、Provider内部的DelegateWidget是一个StatefulWidget所以可以更新且具有生命周期。

2、状态共享是使用了 InheritedProvider 这个 InheritedWidget 实现的。

3、巧妙利用 MultiProvider 和 Consumer 封装,实现了组合与刷新颗粒度控制。

Provider常用组件:

ChangeNotifierProvider、MultiProvider、Provider、Consumer、Consumer2

以下先介绍两种我正在用的:
ChangeNotifierProvider用法
1.ChangeNotifierProvider({Key key, @required ValueBuilder<T> builder, Widget child })

ChangeNotifierProvider<UserInfo>(
        create: (BuildContext context) {
          return UserInfo();
        },
        builder:(context,child){
        },
        child: ProviderMainApp(),
      ),

2.ChangeNotifierProvider.value({Key key, @required T notifier, Widget child })

ChangeNotifierProvider<UserInfo>.value(
    value: UserInfo(),
    child: const MyApp(),
  )

MultiProvider用法

MultiProvider(
    providers: [
      ChangeNotifierProvider<UserInfo>.value(
        value: UserInfo(),
      ),
    ],
    child: const MyApp(),
  );

访问和修改数据

直接访问数据
Provider.of<UserInfo>(context, listen: false).username
调用修改数据方法
Provider.of<UserInfo>(context, listen: false).setname(str);

ClearBoth
25 声望3 粉丝

Hello World!