為什么以下代碼適用于 if/else 而不適用于三元運算子?
ListView(
children: [
// Commented code not working
// isLogged ? ...loggedRows(context) : loginRow(context),
// Working code
if (isLogged)
...loggedRows(context)
else
loginRow(context),
ListTile(...),
ListTile(...),
])
loggingRows 和 loginRow 方法:
ListTile loginRow(BuildContext context) {
return ListTile(...)
}
List<ListTile> loggedRows(BuildContext context) {
return [ListTile(...), ListTile(...)];
}
我嘗試根據用戶是否登錄來顯示不同的 ListTiles,并且使用 if/else 可以完美運行,但是當我嘗試使用三元運算子執行相同操作時出現錯誤。
我嘗試了幾個括號組合,但沒有一個對我有用。
使用最簡單的模式,如在注釋代碼中,我在 Dart 分析中得到 3 個錯誤:
- 預計會找到“]”。
- 預計會找到“.”。
- 需要一個識別符號。
不應該使用相同的三元運算子和 if/else 嗎?
為什么我會收到這些錯誤?
有誰知道哪個應該是使用三元運算子的正確語法?
謝謝!
uj5u.com熱心網友回復:
您對三元運算子的使用不起作用,因為每個“then”和“else”運算元(以及三元運算子本身的結果)都必須計算為運算式,而擴展運算子 ( ...) 不會產生表達。展開運算子(以及 collection-if和 collection- for)的計算結果為一個或多個集合元素。(我強烈建議閱讀Bob Nystrom 的文章,該文章討論了這些語言功能的設計。)
如果您將擴展運算子移出,則可以使用三元運算子:
...(isLogged ? loggedRows(context) : [loginRow(context)]),
雖然這更尷尬,因為它創建了一個額外的ListifisLogged是假的。使用 collection-if更適合這種用法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/335428.html
下一篇:如何通過參考列來做條件交叉串列
