builder和Listview有什么区别?我们可以使用ListView.builder提交表单吗?我现在使用Listview.builder来创建表单。
c86crjj01#
官方文档:https://api.flutter.dev/flutter/widgets/ListView/ListView.htmlListView:从显式List创建一个可滚动的线性小部件数组。此构造函数适用于子项数量较少的列表视图,因为构造List需要为可能在列表视图中显示的每个子项而不是仅为实际可见的子项执行操作。https://api.flutter.dev/flutter/widgets/ListView/ListView.builder.htmlbuilder创建一个可滚动的线性小部件数组,这些小部件是按需创建的。此构造函数适用于具有大量(或无限)子级的列表视图,因为仅为实际可见的子级调用构建器。基本上,builder构造函数创建了一个惰性列表。当用户向下滚动列表时,Flutter“按需”构建widget。默认的ListView构造函数一次构建整个列表。在您的例子中,默认构造工作得很好,因为您已经知道应该在Column()上放置多少小部件。
builder
t1qtbnec2#
ListView构造函数要求我们一次创建所有项目。当列表项目较少并且所有项目都将在屏幕上显示时,这是很好的,但如果不是,那么对于长列表项目,这不是好的做法。而ListView.Builder构造函数将在项目滚动到屏幕上时创建项目,就像按需一样。这是开发List小部件的最佳实践,其中项目仅在项目在屏幕上可见时才会呈现。
ListView
ListView.Builder
nzk0hqpo3#
builder()根据需要构建小部件(当它们可以被看到时)。这个过程也被称为“延迟呈现小部件”。
dfty9e194#
要查看每一个之间的差异,请访问ListView Class。当然,您可以用ListView.builder()创建Forms,但我发现尝试它时存在一些问题。1.我不能把它放到任何ListView()中,也不能放到Column()中,如果有比Form()更多的项目,我就不能把它们放在ListView()中。1.我甚至不能在ListView.builder()的位置添加一个Button,即使在到达最后一个索引时使用条件来放置它。1.我找到的获取Fields数据的最好方法是在调用onSaved:方法时将它们全部添加到array中,我认为这不是一个好方法(也许是)。话虽如此,这就是我用来使它工作的:
ListView.builder()
ListView()
Column()
Form()
onSaved:
array
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]
sauutmhj5#
这个答案对于那些来自原生android背景的人来说。ListView就像android中的ListView。builder是android中的recyclerView如果你不知道recyclerView只呈现那些在屏幕上可见的视图,并一次又一次地重用它们以保存资源。
rqdpfwrv6#
如果我们使用Listview Builder而不是Listview,我们将为我们的应用程序获得更好的性能。原因是它只会加载UI中当前显示的列表或回收以前加载的列表。所以当我们的列表有大型数据集时,最好使用Listview Builder。
6条答案
按热度按时间c86crjj01#
官方文档:
https://api.flutter.dev/flutter/widgets/ListView/ListView.html
ListView:从显式List创建一个可滚动的线性小部件数组。此构造函数适用于子项数量较少的列表视图,因为构造List需要为可能在列表视图中显示的每个子项而不是仅为实际可见的子项执行操作。
https://api.flutter.dev/flutter/widgets/ListView/ListView.builder.html
builder创建一个可滚动的线性小部件数组,这些小部件是按需创建的。此构造函数适用于具有大量(或无限)子级的列表视图,因为仅为实际可见的子级调用构建器。
基本上,
builder
构造函数创建了一个惰性列表。当用户向下滚动列表时,Flutter“按需”构建widget。默认的ListView构造函数一次构建整个列表。
在您的例子中,默认构造工作得很好,因为您已经知道应该在Column()上放置多少小部件。
t1qtbnec2#
ListView
构造函数要求我们一次创建所有项目。当列表项目较少并且所有项目都将在屏幕上显示时,这是很好的,但如果不是,那么对于长列表项目,这不是好的做法。而
ListView.Builder
构造函数将在项目滚动到屏幕上时创建项目,就像按需一样。这是开发List小部件的最佳实践,其中项目仅在项目在屏幕上可见时才会呈现。nzk0hqpo3#
builder()根据需要构建小部件(当它们可以被看到时)。这个过程也被称为“延迟呈现小部件”。
dfty9e194#
要查看每一个之间的差异,请访问ListView Class。
当然,您可以用
ListView.builder()
创建Forms,但我发现尝试它时存在一些问题。1.我不能把它放到任何
ListView()
中,也不能放到Column()
中,如果有比Form()
更多的项目,我就不能把它们放在ListView()
中。1.我甚至不能在
ListView.builder()
的位置添加一个Button,即使在到达最后一个索引时使用条件来放置它。1.我找到的获取Fields数据的最好方法是在调用
onSaved:
方法时将它们全部添加到array
中,我认为这不是一个好方法(也许是)。话虽如此,这就是我用来使它工作的:
结果是:
sauutmhj5#
这个答案对于那些来自原生android背景的人来说。ListView就像android中的ListView。builder是android中的recyclerView
如果你不知道recyclerView只呈现那些在屏幕上可见的视图,并一次又一次地重用它们以保存资源。
rqdpfwrv6#
如果我们使用Listview Builder而不是Listview,我们将为我们的应用程序获得更好的性能。原因是它只会加载UI中当前显示的列表或回收以前加载的列表。所以当我们的列表有大型数据集时,最好使用Listview Builder。