ListView 不会刷新,而附加列表会刷新(Flutter)

2024-01-01

我正在尝试熟悉颤振,但遇到了一些奇怪的情况。我想建立一个动态的ListView其中一个+按钮允许添加元素。我写了以下状态代码:

class MyWidgetListState extends State<MyWidgetList> {
  List<Widget> _objectList = <Widget>[
    new Text('test'),
    new Text('test')
  ];

  void _addOne() {
    setState(() {
      _objectList.add(new Text('test'));
    });
  }

  void _removeOne() {
    setState(() {
      _objectList.removeLast();
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[
        new ListView(
          shrinkWrap: true,
          children: _objectList
        ),
        new Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new IconButton(
              icon: new Icon(Icons.remove_circle),
              iconSize: 36.0,
              tooltip: 'Remove',
              onPressed: _objectList.length > 2 ? _removeOne : null,
            ),
            new IconButton(
              icon: new Icon(Icons.add_circle),
              iconSize: 36.0,
              tooltip: 'Add',
              onPressed: _addOne,
            )
          ],
        ),
        new Text(_objectList.length.toString())
      ],
    );
  }
}

我的问题是 ListView 在视觉上与我初始化它的 2 个元素粘在一起。

在内部_objectList管理良好。为了测试目的,我添加了一个简单的Text底部的小部件显示列表的大小。当我单击“添加/删除”按钮时,这个效果很好,并且它会正确刷新。我错过了什么吗?


Flutter 基于不可变数据。这意味着如果对对象的引用没有改变,那么内容也没有改变。

问题是,就你而言,你总是发送到ListView相同的数组,而是改变其内容。但这导致ListView假设列表没有改变,因此可以防止无用的渲染。

你可以改变你的setState请记住这一点:

setState(() {
  _objectList = List.from(_objectList)
    ..add(Text("foo"));
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ListView 不会刷新,而附加列表会刷新(Flutter) 的相关文章

随机推荐

  • 如何在 MySQL 中进行正则表达式替换?

    我有一个大约 500k 行的表 varchar 255 UTF8 列filename包含文件名 我试图从文件名中删除各种奇怪的字符 我想我会使用字符类 a zA Z0 9 Now MySQL中有没有一个函数可以让你通过正则表达式进行替换 我
  • 如何解决 SQL Server 中的“无效对象名称”?

    这是返回的错误消息 消息 208 第 16 级 状态 1 第 1 行 对象名称 ENG PREP 无效 在我尝试以下查询后会发生这种情况 insert into ENG PREP VALUES 572012 01 1 572012 01 2
  • ServerSocket 监听而不使用accept()

    我目前在学校参与一个项目 我们正在构建一个在 Android 手机上使用的通信系统 为此 我们将使用一个向所有客户端打开套接字的服务器 使它们进行通信 我以前做过几个聊天应用程序 没有任何套接字或线程处理问题 但这次 由于某种原因 它让我感
  • 如何在php中使用名称变量? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 你好 我正
  • ASP.NET 图表控件 - 如何创建此条形图?

    我想从数据表中制作一个图表控件 该表如下所示 替代文本 http www freeimagehosting net uploads 5d02ce1558 png http www freeimagehosting net uploads 5
  • “Any-∃”练习的有效类型签名是什么?

    Exercise Any Show that Any P xs is isomorphic to x xs P x 撇开以下事实不谈 x xs P x甚至不是有效语法 https stackoverflow com questions 56
  • 在 2020 年 Python 2 生命周期结束后,我还可以通过 Pip 安装依赖包吗?

    我正在使用 Python 2 7 和 python pip 从下载所有依赖包requirements txt用于运行我的项目的文件 据我们所知 Python 2 将于 2020 年结束生命 我担心无法从 pip 安装我的依赖包 因为pip
  • 将上下文传递给接口方法

    有点受到启发本文 https medium com benbjohnson structuring applications in go 3b04be4ff091上周 我正在尝试重构一个应用程序 我必须更明确地将上下文 数据库池 会话存储等
  • 如何在 C# 中使用 6.0 或更高版本获取 Android 设备的 Mac 地址?

    我发现了一些使用 Java 的示例 但是我在构建 C 方法时遇到了麻烦 任何人都可以发布一个简单的 C 示例来获取我的设备的 Mac 地址 FOR Marshmallow 6 0 我知道还有其他方法可以获取唯一 ID 但我现在对导入组件并不
  • 打印不带省略号的 numpy 数组

    我想打印一个不被截断的 numpy 数组 我见过其他解决方案 但这些似乎不起作用 这是代码片段 total list np array total list np set printoptions threshold np inf prin
  • 与 MS Access 建立连接

    Microsoft ACE OLEDB 12 0 提供程序未在本地计算机上注册 and Microsoft JET OLEDB 4 0 提供程序未在本地计算机上注册 对我来说都是错误 我在尝试创建 Access 连接时一直在尝试这两种方法
  • 如何在 CoordinatorLayout 中禁用 AppBarLayout 的滚动?

    I have MapFragment内部有视差效果AppBarLayout 我想禁用滚动AppBarLayout 因为不可能在地图上移动 因为地图上的触摸事件始终被处理为滚动事件 我想处理崩溃AppBarLayout通过滚动Recycler
  • 如何使用 Three.js 在运行时绘制线段

    我是 Three js 的新手 我正在尝试实现 Microsoft Paint 中用于绘制线段的技术 我试图获取 onMouseDown 点的坐标 然后用 onMouseMove 延伸一条线直到 onMouseDown 请帮忙 Three
  • SQL 按年龄范围分组

    SQL 2005 我有一个包含 ages c 列的表 我需要按年龄范围对记录进行分组 这是我在这个网站上找到的查询 它让我达到了 90 但 分组依据 出错 无效的列名 age range select case when age c lt
  • 如何根据 ng-style 指令中的多个条件应用多种样式?

    在角度中 我需要根据不同的条件应用不同的样式属性 但它不能以这种方式工作 我只能使用条件表达式应用 2 个条件 div 如果您知道有什么方法可以将属性 div
  • 访问 Websphere 6.1 变量

    我想从 java 类获取 Websphere 变量 APP INSTALL ROOT 的值 如何才能做到这一点 试试这个网站 http www slightlytallerthanaverageman com 2007 04 02 acce
  • 应用程序未在最新版本的react-native iOS 上运行

    新项目无法在 iOS 上构建 使用react native init创建新项目 项目名称 然后使用react native run ios运行 并在终端上遇到以下问题 构建失败 以下命令产生了分析器问题 分析 Volumes mac dat
  • Angular Material 中的 MatDialog 对话框未关闭

    我正在开发 Angular 6 应用程序 其中使用 Angular 材质对话框 数据成功发送到服务器后 我尝试关闭成功对话框 我用了 this dialogRef close 0 or this dialogRef close 0 or t
  • 如何调试缓慢的 Ember CLI/Broccoli 构建

    我的 Ember CLI 项目当前需要 8 9 秒才能构建 我想了解原因 该项目不是那么大 180个文件app 包括 hbs 和 scss 这是我的兄弟文件 https gist github com samselikoff 874c907
  • ListView 不会刷新,而附加列表会刷新(Flutter)

    我正在尝试熟悉颤振 但遇到了一些奇怪的情况 我想建立一个动态的ListView其中一个 按钮允许添加元素 我写了以下状态代码 class MyWidgetListState extends State