Flutter 按需rebuild-ValueListenableBuilder

简介: Flutter 按需rebuild-ValueListenableBuilder在使用Flutter的过程中,有时候我们需要在特定的条件下触发widget的重建。但是如果直接使用setState()触发整个widget tree的重建,会带来性能上的问题。这时候,我们可以使用ValueListenableBuilder来实现按需重建。

Flutter 按需rebuild-ValueListenableBuilder

在使用Flutter的过程中,有时候我们需要在特定的条件下触发widget的重建。但是如果直接使用setState()触发整个widget tree的重建,会带来性能上的问题。这时候,我们可以使用ValueListenableBuilder来实现按需重建。


ValueListenableBuilder是Flutter中的一个widget,它可以监听一个ValueListenable对象的变化,并在变化发生时重新构建widget。因此,我们可以通过将需要监听的数据封装在ValueListenable中,并在需要更新数据时改变ValueListenable对象的值,从而实现按需重建。


下面是一个简单的示例,演示如何使用ValueListenableBuilder实现按需重建。

首先,定义一个ValueNotifier对象:

ValueNotifier<int> _counter = ValueNotifier<int>(0);

然后,在widget tree中使用ValueListenableBuilder监听该ValueNotifier对象的变化:

ValueListenableBuilder(
  valueListenable: _counter,
  builder: (BuildContext context, int value, Widget child) {
    return Text('Count: $value');
  },
)

当_counter的值发生变化时,Text widget会被重建。这样,我们就可以实现按需重建了。

当然,在实际开发中,我们可能需要监听多个数据,并根据不同的条件进行重建。这时候,我们可以使用多个ValueNotifier对象,并在builder方法中进行判断。

ValueListenableBuilder(
  valueListenable: _counter1,
  builder: (BuildContext context, int value1, Widget child) {
    return ValueListenableBuilder(
      valueListenable: _counter2,
      builder: (BuildContext context, int value2, Widget child) {
        if (value1 > value2) {
          return Text('Count1: $value1');
        } else {
          return Text('Count2: $value2');
        }
      },
    );
  },
)

在上面的示例中,当_counter1的值大于_counter2的值时,Text widget会显示Count1,否则会显示Count2。


这就是使用ValueListenableBuilder实现按需重建的方法。通过监听ValueListenable对象的变化,我们可以避免重建整个widget tree,从而提高应用的性能。

相关文章
Flutter Getx 路由 until 方法帮助你跳转指定路由
不少同学都会问我,这样一个场景,当我点击商品列表,进入商品页,点击购买,支付成功后,想返回商品页,或者我的中心的订单列表。怎么做,这中间跨度了 n 个路由。 我不只一次的推荐 GetX 的 until 方法,和 offNamedUntil 方法。 我写了个 demo 今天我们就一起来看下这两个方法如何使用。
2245 0
Flutter Getx 路由 until 方法帮助你跳转指定路由
|
开发工具 开发者
Flutter&鸿蒙next 状态管理高级使用:深入探讨 Provider
本文深入探讨了 Flutter 中 Provider 的高级用法,涵盖多 Provider 组合、Selector 优化性能、ChangeNotifierProxyProvider 管理依赖关系以及自定义 Provider。通过这些技巧,开发者可以构建高效、可维护的响应式应用。
459 2
|
前端开发 API Android开发
Flutter最强大的图表库fl_chart的使用
Flutter最强大的图表库fl_chart的使用
1628 1
|
存储 缓存 JavaScript
Flutter笔记:关于WebView插件的用法(上)
Flutter笔记:关于WebView插件的用法(上)
4278 5
|
缓存 NoSQL 关系型数据库
Redis系列-6.Redis缓存双写一致性问题(上)
Redis系列-6.Redis缓存双写一致性问题
335 0
|
SQL
SQL语句多个表查询,inner join的用法
SQL语句多个表查询,inner join的用法
661 0
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
1127 0
mo-quarter-picker:基于 Vue2 和 ElementUI 的季度范围选择器
|
Dart 开发工具 Android开发
如何在Flutter中使用BoxDecoration和GradientAppBar创建渐变效果
如何在Flutter中使用BoxDecoration和GradientAppBar创建渐变效果
435 0
Flutter利用ScrollController获取、控制滚动组件的滚动位置
Flutter利用ScrollController获取、控制滚动组件的滚动位置
|
存储 移动开发 缓存
多个WKWebView页面的cookie不共享问题及解决方案
多个WKWebView页面的cookie不共享问题及解决方案
402 0