我是 Flutter 的新手,目前正在構建一個應用程式,其中包含一系列不同專案型別的串列。
由于專案的數量未知,并且由于其種類繁多,ListView.builder建構式在當時對我來說似乎是最好的選擇,因為我可以Widget為每個專案創建一個并itemBuilder以非常干凈的方式正確回傳它們。但是,我沒有找到實作與分隔一個很好的方式ListView.builder,并最終改變到ListView.separated。更改毫不費力,只需要傳遞一個新separatorBuilder引數。
問題是,Flutter 檔案指出ListView.separated“適用于具有固定數量孩子的串列視圖”。
我的問題是:
- 為什么
ListView.separated不適合大量物品ListView.builder而是? ListView.separated大量物品是否有任何性能問題?- 是否有更好的方法來實作依賴于專案型別的分隔符,
ListView.builder而不需要我將我的包裹Widgets在 aPadding或類似的東西中?
uj5u.com熱心網友回復:
回答您的問題:
1.為什么ListView.separated不適合大量的item,而ListView.builder適合?
該檔案還稱:
此建構式適用于具有大量項和分隔符子項的串列視圖,因為僅針對實際可見的子項呼叫構建器。
因此,根據您閱讀的頁面和我在此處參考的頁面,在兩者中,對于串列中的每個專案僅呼叫一次構建器。無論串列的大小。它只提到,串列應該是固定大小的,而不是小尺寸。這是由于可能發生的范圍例外。
2. ListView.separated 對于大量專案是否存在性能問題?
如前所述,性能沒有太大不同,因為呼叫構建器的時間相同。
3. 是否有更好的方法來使用 ListView.builder 實作依賴于專案型別的分隔符,而不需要我將小部件包裝在 Padding 或類似的東西中?
沒有必要,因為ListView.separated它非常適合您的情況。
uj5u.com熱心網友回復:
要查看每個之間的差異,請訪問ListView Class。
當然,您可以使用 來創建表單ListView.builder(),但是我在嘗試時發現了一些問題。
- 我不能把它變成任何
ListView(),要么Column(),把他們是否有任何的不僅僅是更多的專案Form()。 - 我什
ListView.builder()至無法在達到最后一個索引時使用條件添加一個 Button來放置它。因此,您必須使用textInputAction: TextInputAction.done在onFieldSubmitted: - 獲取我發現的 Fields 資料的最佳方法是在呼叫方法
array時將它們全部添加到 an 中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]
uj5u.com熱心網友回復:
ListView.separated與 相同ListView.builder,重點是它使用 builder 函式來構建與 相同的小部件ListView.builder。
檔案鏈接檔案
但是,如果它是ListView.separated,ListView.builder或者使用 的任何其他小部件builder應該具有特定數量的子項,以防使用串列,因為如果它不知道有多少專案,您將超出范圍例外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/393794.html
標籤:扑
上一篇:嘗試在Android設備上運行Flutter應用程式時出現例外
下一篇:在容器顫動時制作漸變效果,
