Flutter:使用 GetX 刷新 ListView.Builder

2023-11-22

我正在创建List of Cards根据 toDoId 的数量。

toDoController.toDo() 就像

toDo = [q1, r4, g4, d4].obs;

而且,这是我的 ListView.builder()

  Obx(() {
         List _todo = toDoController.toDo();

         return ListView.builder(
         shrinkWrap: true,
         scrollDirection: Axis.horizontal,
         itemCount: _todo.length,
         itemBuilder: (BuildContext context, int i) {
                           
         var _loading = true;
         var _title = 'loading';
                          
         getTodoInfo() async {
         _title = await toDoController
                .getTodoInfo(
                     _todo[i]
                 );
         _loading = false;
         print(_title); // 'Clean!' <--- returns correct title
         }

         getTodoInfo();

         return Container(
           height: 150,
           width: 150,
           child: _loading
           ? Text(
             _title,
             )
             : Text(
             _title,
             ),
     );
    },
   );
  })

我试图让每个容器调用http requests从我的数据库中获取标题。获取标题,然后更新到Text()下面的小部件。但是,从服务器返回值后,它不会更新。

我可以让他们等待请求来获取标题FutureBuilder。我也尝试过使用FutureBuilder。然而,FutureBuilder 并没有对variable变化。所以,我在这里尝试这样做。我有点明白这个问题了。之后,widget被返回,它是不是不能改变?有什么办法可以用 GetX 做到这一点吗?


下面是将 GetX 与 Listview.builder 一起使用的示例。

此示例使用 GetBuilder 而不是 Obx,因为我不确定使用流是否会带来任何好处。如果由于某种原因需要可观察/流,numbers可以更新为.obsupdate()应删除呼叫并GetBuilder取而代之GetX or Obx。如果有人问,我会添加它作为替代示例。

GetBuilder 包装了 ListView.builder,并且只有 ListView 将被重建,而不是整个小部件树/页面。

import 'package:flutter/material.dart';
import 'package:get/get.dart';

class ListDataX extends GetxController {
  List<int> numbers = List<int>.from([0,1,2,3]);

  void httpCall() async {
    await Future.delayed(Duration(seconds: 1), 
            () => numbers.add(numbers.last + 1)
    );
    update();
  }

  void reset() {
    numbers = numbers.sublist(0, 3);
    update();
  }
}

class GetXListviewPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    ListDataX dx = Get.put(ListDataX());
    print('Page ** rebuilt');
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: [
            Expanded(
              flex: 8,
              child: GetBuilder<ListDataX>(
                builder: (_dx) => ListView.builder(
                    itemCount: _dx.numbers.length,
                    itemBuilder: (context, index) {
                      return ListTile(
                        title: Text('Number: ${_dx.numbers[index]}'),
                      );
                    }),
              ),
            ),
            Expanded(
              flex: 1,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: [
                    RaisedButton(
                      child: Text('Http Request'),
                      onPressed: dx.httpCall,
                    ),
                    RaisedButton(
                      child: Text('Reset'),
                      onPressed: dx.reset,
                    )
                  ],
                )
            )
          ],
        ),
      ),
    );
  }
}

Obx/ 流版本

这是上面的解决方案使用Rx溪流&Obx widget.

class ListDataX2 extends GetxController {
  RxList<int> numbers = List<int>.from([0,1,2,3]).obs;

  void httpCall() async {
    await Future.delayed(Duration(seconds: 1),
            () => numbers.add(numbers.last + 1)
    );
    //update();
  }

  void reset() {
    numbers = numbers.sublist(0, 3);
    //update();
  }
}


class GetXListviewPage2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    ListDataX2 dx = Get.put(ListDataX2());
    print('Page ** rebuilt');
    return Scaffold(
      body: SafeArea(
        child: Column(
          children: [
            Expanded(
              flex: 8,
              child: Obx(
                () => ListView.builder(
                    itemCount: dx.numbers.length,
                    itemBuilder: (context, index) {
                      return ListTile(
                        title: Text('Number: ${dx.numbers[index]}'),
                      );
                    }),
              ),
            ),
            Expanded(
                flex: 1,
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: [
                    RaisedButton(
                      child: Text('Http Request'),
                      onPressed: dx.httpCall,
                    ),
                    RaisedButton(
                      child: Text('Reset'),
                      onPressed: dx.reset,
                    )
                  ],
                )
            )
          ],
        ),
      ),
    );
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:使用 GetX 刷新 ListView.Builder 的相关文章

随机推荐

  • 如何在 jQuery 中截断字符串?

    我的标题很长 想截断它们 但要以一种不打断单词的方式 我的意思是剪切发生在单词之间 而不是剪切一个单词 我怎样才能使用 jquery 做到这一点 From jQuery 文本截断 阅读更多样式 尝试这个 var title This is
  • 如何使用 lapply() 将 NA 更改为 0?

    我有一个数据集列表 dfList lt list df1 df2 df3 每个数据集看起来都是这样的 apples oranges 1 2 NA 4 我想以编程方式更改每个数据帧的NAs to 0s 我该怎么做呢 到目前为止我的代码 lap
  • 如何在 SQL Server 中保存波斯日期时间?

    在过去的项目中 我尝试将时间格式保存为公历日期 并在应用程序的逻辑层将公历日期转换为波斯日期 但我厌倦了这样做 我需要在 SQL Server 中以波斯语格式保存和恢复日期时间 无需任何转换 sql server中的datetime2类型可
  • Html.DropDownList 选择的值无法使用 ViewBag 工作

    好吧 经过几个小时阅读这里的内容 尝试所有解决方案均未成功 还发现本文我以为这会救我的命 什么也没有 长话短说 这是我的视图 所有组合 Html DropDownList yearDropDown IEnumerable
  • 有没有办法备份 Visual Studio Team Services 项目?

    我提倡使用 Visual Studio Team Services 作为我们的源代码控制解决方案 并且实际上已经开始这样做了 然而 我的经理对云托管存储和服务有些担心 他想知道在团队服务因任何原因无法访问时我们的应急计划是什么 我已经指出
  • 如何删除圆内的一组网格点?

    我正在尝试创建一个网格网格 而没有一些落在具有指定坐标和半径的圆内的点 我无法减去落在圆圈内的网格点 这是我的代码 import math import numpy import matplotlib pyplot as plt N 50
  • 卷曲:(7)无法连接到本地主机端口8090:连接被拒绝

    需要帮忙 一直在尝试解决这个问题 但找不到答案 或者更确切地说 我还没有遇到任何答案 我有一个带有 NGINX 的 docker 容器 充当反向代理 适用于 Windows 的 Docker 版本 1 12 5 9503 upstream
  • Cygwin 命令未找到在 .bashrc 357\273\277 中发现错误字符

    我是 Cygwin 的新手 我刚刚安装了它并尝试设置一些简单的环境变量 但是 当我打开命令 shell 时 出现错误 357 273 277 command not found 我发现一篇文章讨论了问题是什么以及如何 发现 隐藏的坏性格 h
  • 如何在InnoSetup中只允许安装特定组件?

    所以问题是这样的 我在这里问了一个问题 如何只允许安装到特定文件夹 我怎样才能稍微修改它 例如 我有 3 个文件要安装 其中 2 个是可选的 并且只有在某个文件 文件夹存在时才可以安装 如果不满足条件 我想将在列表中选择它们的选项灰显 先感
  • 双卡双待安卓sdk

    sdk 默认 有什么方法可以处理双卡吗 市场上有许多双卡双待的 Android 手机 我想要的是以编程方式更改默认的SIM卡 是否可以 从 Android 5 1 开始多卡支持已正式添加到Android SDK中 您可以通过以下方式访问有关
  • 使用 JQuery 从 Div 中删除 CSS

    在我的应用程序中 我有以下内容 displayPanel div live click function this css background color pink font weight bolder 当我点击一个 Div 时 该 Di
  • 删除美国州边界,在 ggplot2/geom_polygon 中创建轮廓区域

    我正在绘制下表 显示美国的多重耐药性趋势 按地区划分的 MDR 使用以下代码 states map m lt ggplot ncftrendsort aes map id region geom map aes fill ncftrends
  • Rails、Devise 和 Omniauth - 设置问题

    我正在尝试 再次 使用 Rails 4 devise 和omniauth 设置身份验证 我尝试按照这篇文章中的示例进行操作 Rails 4 Devise Omniauth 有多个提供商 我安装了这些宝石 gem devise gem omn
  • 相等比较在 TensorFlow 2.0 tf.function() 中不起作用

    继讨论之后TensorFlow 2 0 AutoGraphs 我一直在玩弄并注意到不平等比较 例如 gt and lt 直接指定 而相等比较则使用tf equal 这里有一个例子来演示 该函数使用 gt 运算符和效果很好当被调用时 tf f
  • 为什么在 jinja2 Python 中使用“|安全”[重复]

    这个问题在这里已经有答案了 我正在关注 Flask 教程 他在 jinja2 模板中使用 safe 为什么我们需要这个管道符号和安全 不使用 safe 它会打印所有 html 标签 通过使用 safe 它显示正确的格式 为什么会这样呢 下面
  • beforefieldinit 标志有什么作用?

    beforefieldinit 标志有什么作用 当我查看班级的 IL 时 我看到这个标志 但我不知道这个标志实际上在做什么 See 我的文章在这个问题上 基本上 beforefieldinit意味着 可以在引用任何静态字段之前的任何时候初始
  • ASP.NET Core 6 Web API 的集成测试抛出 System.InvalidOperationException

    我试图了解如何在 ASP NET Core 6 Web API 控制器上进行集成测试 我尝试过遵循所有guides 所以我可以找到帖子和建议 但由于某种原因 我不断遇到指南中未提及的错误 事件控制器测试 cs namespace UnitT
  • 如何在 Pandas 中将数据框堆叠在一起

    我有一个包含 96 列的数据框 df to csv result csv 输出 Excel Run 1 Run 2 Run 3 Run 4 Run 5 Run 6 Run 7 Run 8 Run 9 Run 10 Run 11 Run 12
  • 表单中输入占位符字段中的仅 Html 颜色 (*) 符号

    我有以下代码
  • Flutter:使用 GetX 刷新 ListView.Builder

    我正在创建List of Cards根据 toDoId 的数量 toDoController toDo 就像 toDo q1 r4 g4 d4 obs 而且 这是我的 ListView builder Obx List todo toDoC