我正试着熟悉弗利特,我面临着一些奇怪的情况.我想构建一个动态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"));
});

Dart相关问答推荐

Dart/Flutter ffi(外部函数接口)本机回调,例如:sqlite3_exec

如何从 Polymer Dart 触发自定义事件?

InheritedWidget - 在 navigator.push 之后在 null 上调用 getter

如何用 Flutter 在同屏路由上制作英雄风格的动画?

Flutter ButtonRow 填充

自定义声音推送通知不起作用

在 Flutter 中将图像与左上角对齐

什么是NoSuchMethod错误,如何修复?

Flatter Container()与SizedBox()的虚拟空容器

如何 Select 性地传递可选参数?

错误:无法将参数类型void Function(ImageInfo, bool)分配给参数类型ImageStreamListener

Flutter 在 main 中读取共享首选项,然后决定哪个启动页面?

如何将 Stream 转换为 List

我应该更喜欢迭代 Map.entries 还是 Map.values?

如何重新引发异常并保留堆栈跟踪?

如何在dart中生成随机字符串?

Dart 中的错误与异常

如何在 Dart 中定义接口?

如何在 Dart 中运行重复出现的函数?

如何在 Dart 中将 double 转换为 int?