ListView和ListView.builder有什么区别,我们可以使用Listview.builder来创建,验证和提交表单吗?

时间:2019-05-23 09:38:27

标签: flutter

Listview.builder和Listview有什么区别? 我们可以使用ListView.builder提交表单吗?

我现在正在使用Listview.builder创建表单。

4 个答案:

答案 0 :(得分:1)

ListView.builder()根据需要构建小部件(当它们可见时)。此过程也称为“延迟渲染小部件”。

答案 1 :(得分:1)

ListView和ListView.builder

的主要区别

ListView构造函数要求我们一次创建所有项。当列表项较少并且可以在屏幕上看到所有列表项时,这很好,但如果列表项较长,则不是一个好习惯。

ListView.Builder构造函数将按需滚动滚动到屏幕上来创建项目。这是开发“列表”窗口小部件的最佳实践,其中,仅当在屏幕上看到项目时,项目才会呈现。

答案 2 :(得分:0)

摘自官方文档:

https://api.flutter.dev/flutter/widgets/ListView/ListView.builder.html

  

ListView:通过创建一个可滚动的线性小部件数组   显式列表。   此构造函数适用于少量的列表视图   孩子,因为构建列表需要为每个人做工作   可能显示在列表视图中而不是   那些实际上是可见的孩子。


https://api.flutter.dev/flutter/widgets/ListView/ListView.html

  

ListView.builder创建可滚动的线性小部件数组,   是按需创建的。此构造函数适用于列表视图   拥有大量(或无限)子代,因为生成器是   仅针对那些实际可见的孩子。

基本上,buider构造函数创建一个惰性列表。当用户向下滚动列表时,Flutter会“按需”构建窗口小部件。

默认的ListView构造函数一次构建整个列表。

在您的情况下,默认构造工作良好,因为您现在已经在Column()上放置了多少个小部件。

答案 3 :(得分:0)

要了解每个人之间的区别,请访问ListView Class

当然,您可以使用ListView.builder()创建表单,但是我发现尝试使用它时会遇到一些问题。

  1. 如果除了ListView()之外还有更多项目,我不能将其放入Column()中的任何一个Form()中。
  2. 即使在到达最后一个索引时使用条件将其放置在ListView.builder()的位置,我什至都无法添加Button。因此,您必须使用textInputAction: TextInputAction.doneonFieldSubmitted:上执行某种操作
  3. 获取我发现的Fields数据的最好方法是在调用array方法时将它们全部添加到onSaved:中,我认为这不是一个好方法(也许是)。

话虽如此,这就是我用来使其工作的方式:

body: Form(
    key: _key,
    child: Container(
      child: ListView.builder(
        itemCount: 5,
        itemBuilder: (context, index) {
          return TextFormField(
            textInputAction: TextInputAction.done,
            validator: (text) {
              if (text.isEmpty) {
                return "The text is empty";
              }
            },
            onFieldSubmitted: (text) {
              _onSaved();
            },
            onSaved: (text) {
              form.add(text);
            },
          );             
        },
      ),
    ),
  ),

void _onSaved() {
  if (_key.currentState.validate()) {
    _key.currentState.save();
    print(form);
  }
}

结果:

I/flutter ( 7106): [fjjxjx, hxjxjcj, jxjxjfj, jfjfj, jxjxj]