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

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

被折叠的 条评论
为什么被折叠?



