当前位置: 首页 > news >正文

Flutter中 Provider 的基础用法超详细讲解(一)

目录

前言

一、什么是 Provider

二、引入 Provider 库

三、Provider 的基本结构

四、Provider的基础用法

1.ChangeNotifierProvider

1.ChangeNotifierProvider是什么

2.使用场景

3.示例代码

1.创建模型类

2.在入口处提供模型

3.在页面中使用模型

4.注意事项

2.FutureProvider

1.什么是FutureProvider

2.示例用法

1.创建异步函数

2.使用FutureProvider提供异步结果

3.注意事项


前言

        在 Flutter 的状态管理方案中,Provider 是一个非常常用且推荐的库。它轻量、功能强大、集成简洁,是 Google 官方推荐的状态管理工具之一。本文将通过一个完整示例,带你一步步掌握 Provider 的基础用法。

一、什么是 Provider

        简单来说,Provider 是基于 InheritedWidget 封装的一套状态管理工具。它的核心目标是 “提供数据并让子组件监听这些数据的变化”。

        相比直接使用 setState() 来更新页面,Provider 提供了更清晰、模块化的管理方式。

二、引入 Provider 库

        在 pubspec.yaml 中添加依赖:

dependencies:flutter:sdk: fluttercupertino_icons: ^1.0.8provider: ^6.1.5

安装依赖:

flutter pub get

三、Provider 的基本结构

        我们先看一张概念图:

MaterialApp└── ChangeNotifierProvider(提供模型)└── Consumer 或 context.watch<T>()(监听数据)

        你可以把 ChangeNotifierProvider 理解为数据的“提供者”,而 Consumer 是数据的“消费者”。

四、Provider的基础用法

1.ChangeNotifierProvider

1.ChangeNotifierProvider是什么

        ChangeNotifierProvider 是 provider 包中的一个类,它结合了 ChangeNotifier 和 InheritedWidget 的能力,用于构建响应式的 UI。

        它的作用是监听一个ChangeNotifier对象,并在数据变更时自动更新界面。

        常用于ViewModel(或State)的管理。

2.使用场景

        当你有一个对象内部状态需要变化,并且你希望在状态变化时通知 UI 更新,那么你就可以使用 ChangeNotifierProvider。

3.示例代码

        我们以下面的UI效果为例,看一下ChangeNotifierProvider的用法。

       在下面的demo中,我们点击按钮之后,会随机生成一个城市的名称,并且在UI上显示出来。

        图1.ChangeNotifierProvider用法

1.创建模型类

 

http://www.lryc.cn/news/595163.html

相关文章:

  • 数据库和数据仓库的区别
  • [Python]函数调用链中局部变量的内存影响:通过memory_profiler分析
  • 全新开发范式:uni-app X助力全平台原生应用
  • Type-C接口台式显示器:LDR6021引领新潮流
  • JAVA+AI教程-第三天
  • 将 RustFS 用作 GitLab 对象存储后端
  • 从 Hi3861 平台到 WS63 星闪平台的程序移植全解析
  • 部署zabbox企业级分布式监控
  • 后训练(Post-training)语言模型
  • 2025最新版IntelliJ IDEA Ultimate for Mac专业版安装使用指南
  • How does Misinformation Affect Large Language ModelBehaviors and Preferences?
  • Flink框架:keyBy实现按键逻辑分区
  • makefile-- 其他函数
  • 低代码平台买saas好还是私有化好
  • 【HTTP缓存机制深度解析:从ETag到实践策略】
  • Zabbix 企业级分布式监控部署
  • C++学习<2>--引用、函数、内存分区
  • 【2025】Vscode Python venv虚拟环境显示“激活终端”成功但是在终端中“并没有激活成功”,pip安装还是会安装到全局环境中的解决方法;
  • 第十八节:第七部分:java高级:注解的应用场景:模拟junit框架
  • nextjs+react接口会请求两次?
  • 元宇宙与DAO自治:去中心化治理的数字文明实践
  • 【设计模式C#】简单工厂模式(用于简化获取对象实例化的复杂性)
  • 实时数据可视化的“心跳”设计:毫秒级延迟下的动态图表抗闪烁优化方案
  • 时空数据可视化新范式:基于Three.js的生产全流程时间轴回溯技术解析
  • 基于爬虫技术的电影数据可视化系统 Python+Django+Vue.js
  • 基于VSCode的nRF52840开发环境搭建
  • 机器学习中核心评估指标(准确率、精确率、召回率、F1分数)
  • 动态数据源切换
  • Android Jetpack系列组件之:LiveData(保姆级教程)
  • 动静态库原理与实战详解