flutter 跨模块之间数据共享实践

本文介绍了Flutter中的Provider和Consumer组件在数据管理和状态管理中的应用。Provider作为一个inheritedWidget的语法糖,提供了依赖注册功能,用于在Widget树中灵活地传递和处理数据。ChangeNotifierProvider.value则允许读写数据。Consumer则进一步简化了数据获取,并能精确控制UI刷新。在示例代码中,展示了如何使用Provider和Consumer创建多个页面并传递数据。

001 Provider

它是inheritedWidget语法糖。提供了依赖注册的功能,允许Widget树中更加灵活处理和传递数据

依赖注册是一种可以让我们在需要的时提取到所需资源的机制,换句话说是预先将某种资源放到程序中的某个我们都可以访问的

的位置,当需要使用这个资源时,直接去这个位置拿即可,无需关心资源时谁放进去。

封装的数据源不仅需要为子widget提供读的能力,还要提供写的能力,需要使用ChangeNotifierProvider.value。

获取Provider的数据

final _counter = Provider.of<CounterModel>(context);

final textSize = Provider.of<double>(context);

002 Consumer

就是比Provider更加方便,一次性获取到两个参数,就很方便快捷,效率高,除此之外还可以控制UI刷新的粒度,避免与数据无关组件的无用刷新。

003 代码

main.dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'counter_model.dart';
import 'provider_demo.dart';
import 'consumer_demo.dart';

void main() {
  runApp(MyApp1());
}

class MyApp1 extends StatelessWidget {
  const MyApp1({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
   return MultiProvider(
      providers: [
        Provider.value(value: 30.0),
        ChangeNotifierProvider.value(value: CounterModel())
      ],
      child: MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: HomePage()),
    );
  }
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primaryS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值