Flutter InheritedWidget 共享状态管理

这篇具有很好参考价值的文章主要介绍了Flutter InheritedWidget 共享状态管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

InheritedWidget和React中的context功能类似,可以实现跨组件数据的传递。
定义一个共享数据的InheritedWidget,需要继承自InheritedWidget

  • 这里定义了一个of方法,该方法通过context开始去查找祖先的HYDataWidget(可以查看源码查找过程)
  • updateShouldNotify方法是对比新旧HYDataWidget,是否需要对更新相关依赖的Widget
// 数据共享
class DataWidget extends InheritedWidget {
// 1、共享的数据
  final int counter;
// 2、定义构造方法
  const DataWidget({super.key, required this.counter, required Widget child})
      : super(child: child);
// 3、获取组件最近的当前InheritedWidget
  static DataWidget? of(BuildContext context) {
  // 沿着Element树,去找最近的CounterElement,从Element中取出Widget对象
    return context.dependOnInheritedWidgetOfExactType();
  }

// 4、 决定要不要回调State中的didChangeDependencies 方法
  
  bool updateShouldNotify(covariant DataWidget oldWidget) {
    // 如果返回true:执行依赖当前的InheritedWidget的state中的  didChangeDependencies
    return counter != oldWidget.counter;
  }
}

使用定义的 DataWidget 共享数据文章来源地址https://www.toymoban.com/news/detail-622037.html

class _MyHomePageState extends State<MyHomePage> {
  HomeRequest homeRequest = HomeRequest();

  int data = 100; // 定义一个共享数据变量
  
  void initState() {
    super.initState();
    Logs("_MyHomePageState", StackTrace.current);
    homeRequest.getMovieTopList(0, 20).then((value) {});
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      // 脚手架
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: DataWidget( // 需要在共享数据组件的父类上继承DataWidget
          counter: data, // 将数据传递给共享数据 counter
          child: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                HYShowData01(),
                HYShowData02(),
              ],
            ),
          )
      ),
      // 定义一个 按钮点击自动增加数据
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.add),
        onPressed: () {
          setState(() {
            data++;
          });
        },
      ),
    );
  }
}

class HYShowData01 extends StatelessWidget {
  
  Widget build(BuildContext context) {
    int? _counter = DataWidget.of(context)?.counter; // 使用共享数据
    return Container(
      color: Colors.red,
      child: Text("共享状态:${_counter}"),
    );
  }
}

class HYShowData02 extends StatefulWidget {
  
  State<HYShowData02> createState() => _HYShowData02State();
}

class _HYShowData02State extends State<HYShowData02> {

  
  void didChangeDependencies() {
    // TODO: implement didChangeDependencies
    super.didChangeDependencies();
  }

  
  Widget build(BuildContext context) {
    int? _counter = DataWidget.of(context)?.counter;
    return Container(
      color: Colors.blue,
      child: Text("共享状态:${_counter}"),
    );
  }
}

到了这里,关于Flutter InheritedWidget 共享状态管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter状态管理 — 探索Flutter中的状态

    前言 随着响应式编程的理念Flutter被大众所了解以来,状态管理一直是一个引人深思的话题。如果想要学习好Flutter这样的响应式的编程框架就一定是离不开状态管理的。我遇到过很多没有了解过响应式编程框架的,或者从事后端开发,自己想用Flutter写个app玩玩的朋友,一上来

    2024年02月09日
    浏览(41)
  • 【Flutter】Flutter 状态管理 Provider 包使用概述

    🎉想要精通 Flutter,掌握更多技巧和最佳实践?好消息来了!👉 Flutter专栏-Flutter Developer 101 入门小册 正在等你!📚 🔍这里有你需要的所有 Flutter 学习资源,包括代码示例和深度解析。🎯 ⏰专栏内容持续更新,价格也会随之上涨。现在加入,享受最优惠的价格!💰 🚀现

    2024年02月09日
    浏览(42)
  • Flutter笔记:Flutter的应用生命周期状态(lifecycleState)管理

    Flutter笔记 Flutter的应用生命周期状态(lifecycleState)管理 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134127670 【介绍】: WidgetsBinding.instance 是Flutter中用于管理应用程序事件和生命周期的重要工具

    2024年02月06日
    浏览(45)
  • flutter的状态管理学习

    1.flutter widget分类 组合 渲染 代理 2. 代理组件又分为 Positioned向父组件传递数据 InheritedWidget向子组件传递数据 3. 状态 state 数据 状态就是用到了向子组件传递数据,并且需要刷新的时候刷新组件 4. 刷新 数据变化 获取并在改变的时候会导致刷新 dependOnInheritedWidgetOfExactType 只获

    2024年01月25日
    浏览(44)
  • Flutter 状态管理 Provider

    Flutter基于声明式构建UI,原生则是命令式,状态管理是用于解决声明式开发带来的问题。 例:命令式的原生,数据更新需要拿到对应控件并更改其显示值;而声明式则需要更改数据值并通过setstate更新状态,重新构建组件 Flutter 中有这么一种说法: UI = f(state): 优势: 无需繁琐

    2024年02月13日
    浏览(37)
  • flutter 常见的状态管理器

    当我们构建复杂的移动应用时,有效的状态管理是至关重要的,因为应用的不同部分可能需要共享数据、相应用户交互并保持一致的状态。Flutter 中有多种状态管理解决方案,下面详细介绍一些常见的状态管理方式:Provider、Bloc 和 Redux、getx 等等一些管理工具。 Provider: Pro

    2024年02月12日
    浏览(43)
  • Flutter的状态管理之Provider

    Flutter Provider是Flutter中一个非常流行的状态管理库,它可以帮助开发者更加方便地管理应用程序中的状态。Provider提供了一种简单的方式来共享和管理应用程序中的数据,并且可以根据数据的变化来自动更新UI界面。 Provider的核心思想是将数据作为一个全局的单例对象,然后通

    2024年02月08日
    浏览(58)
  • Flutter 状态管理之GetX库

      Flutter使用的是声明式UI,是通过状态去更新UI组件的,因此我们首先就要学习状态的使用。同样为了简化原本的状态使用,我们会使用Getx库。   之前说要写Flutter,一拖就是一年多,有些不好意思。现在都24年了,终于等到你,下面还是按照我们最属于的思路来吧。 首

    2024年01月23日
    浏览(45)
  • Flutter状态管理:RxDart,详细介绍

    RxDart是一个基于Dart语言的响应式编程库,它提供了一套用于处理异步事件序列的工具。在Flutter应用中,RxDart可以很好地用于管理应用状态。 响应式编程是一种编程范式,它将应用程序的逻辑分解为响应事件的流。当应用程序中发生事件时,可以通过这些流来响应这些事件。

    2024年02月10日
    浏览(40)
  • Flutter中状态管理选项的比较:利弊探索

    Flutter 应用程序开发的一个关键方面是管理状态,这确保了整个应用程序的数据一致性和更新。然而,Flutter 提供了多种状态管理解决方案,每种解决方案都有自己的优缺点。在这篇博客中,我们将探讨 Flutter 中一些流行的状态管理选项,并讨论它们的优缺点。 这些状态管理

    2024年01月25日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包