Mobile 将项目动态附加到ListView

Mobile 将项目动态附加到ListView,mobile,dart,flutter,mobile-development,Mobile,Dart,Flutter,Mobile Development,我不熟悉Dart和Flatter,并尝试将一个新项目附加到我的ListView中。我创建了一个按钮,它增加了这个.value,但什么也没发生。我是否错过了UI上的更新调用,这是正确的方法? 由于我将ListView.builder的值直接返回给build的调用者,因此我不确定如何获取列表以添加更多项。非常感谢 class MyList extends State<MyList> { ... int value = 2; @override Widget build(BuildC

我不熟悉Dart和Flatter,并尝试将一个新项目附加到我的ListView中。我创建了一个按钮,它增加了这个.value,但什么也没发生。我是否错过了UI上的更新调用,这是正确的方法? 由于我将
ListView.builder
的值直接返回给
build
的调用者,因此我不确定如何获取列表以添加更多项。非常感谢

class MyList extends State<MyList> {

... 
int value = 2;

@override
Widget build(BuildContext context) {
return ListView.builder(
    itemCount: this.value,
    itemBuilder: (context, index) => this._buildRow(index)
);
类MyList扩展了状态{
... 
int值=2;
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
itemCount:this.value,
itemBuilder:(上下文,索引)=>this.\u buildRow(索引)
);

TL;DR:调用
setState
是触发UI更新的正确方法吗?

调用
setState
是触发UI更新的正确方法

从:

调用setState会通知框架 此对象的更改方式可能会影响用户界面 在该子树中,这将导致框架为 这个州反对

如果直接更改状态而不调用setState,则 框架可能不会为此计划生成和用户界面 子树可能不会更新以反映新状态

下面是一个小示例,它是一个带有附加项的
按钮的
列表视图

import 'package:flutter/material.dart';

void main() => runApp(new MaterialApp(home: MyList()));

class MyList extends StatefulWidget {
  @override
  _MyListState createState() => _MyListState();
}

class _MyListState extends State<MyList> {
  int value = 2;

  _addItem() {
    setState(() {
      value = value + 1;
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text("MyApp"),
      ),
      body: ListView.builder(
          itemCount: this.value,
          itemBuilder: (context, index) => this._buildRow(index)),
      floatingActionButton: FloatingActionButton(
        onPressed: _addItem,
        child: Icon(Icons.add),
      ),
    );
  }

  _buildRow(int index) {
    return Text("Item " + index.toString());
  }
}
导入“包装:颤振/材料.省道”;
void main()=>runApp(新材料应用(主页:MyList());
类MyList扩展了StatefulWidget{
@凌驾
_MyListState createState();
}
类_MyListState扩展状态{
int值=2;
_附加项(){
设置状态(){
值=值+1;
});
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
appBar:appBar(
标题:文本(“MyApp”),
),
正文:ListView.builder(
itemCount:this.value,
itemBuilder:(上下文,索引)=>this.\u buildRow(索引)),
浮动操作按钮:浮动操作按钮(
onPressed:\u addItem,
子:图标(Icons.add),
),
);
}
_buildRow(int索引){
返回文本(“项”+index.toString());
}
}

太棒了!非常感谢您的示例!非常有魅力