我正在使用 TMDB 開發電影應用程式。
創建預訂系統總共需要3條資料。
1.MovieList 的索引
2.日期索引
3.seat Satus
我一直在嘗試將其作為地圖進行處理。
//Seat Status total 200 Seat
List<bool> _seat = [];
for(int nIndex=0; nIndex<200; nIndex ){
_seat.add(false);
}
//Date index(total 7 days) Seat status
Map _date = Map();
for(int nIndex=0; nIndex<7; nIndex ){
_date[nIndex] = _seat.toList();
}
//TMDB MovieList index
Map _movie = Map();
for(int nIndex=0; nIndex<MoviesList.length; nIndex ){
_movie[nIndex] = _date;
}
該值按我的需要正常輸入。
但是,當更改一個座位資料時,地圖中的所有座位資料都會更改。
我注意到這是因為輸入了地圖和串列參考。
您知道如何通過按值呼叫而不是按參考呼叫來獲取值嗎?
seat = List.filled(200, false, growable: true);
date = List.generate(7, (_) => List.from(seat));
movie = List.generate(length, (_) => List.from(date));
我的代碼就像上面一樣。
例如
movie[0][0][0] = false; // Change value
print(movie[0][0][0]); // result false
print(movie[1][0][0]); // result false
這樣,值一起變化。
uj5u.com熱心網友回復:
為了使用與前一個相同的值創建一個新的串列參考,您可以呼叫List.from.
所以像這樣:
_date[nIndex] = List.from(_seat);
您可以對地圖使用類似的語法
_movie[nIndex] = Map.from(_date);
編輯
看起來這個解決方案實際上不起作用,dart可以.from用來復制串列,甚至可以復制串列串列,但是復制串列串列?這人太多了!它無法處理,它只會復制一層。值得慶幸的是,一旦你知道它為什么會發生,解決這個問題就很簡單了:
var seat = List.filled(3, false, growable: true);
var date = List.generate(4, (_) => List.from(seat));
var movie = List.generate(5, (_) => List.from(date.map((v) =>
List.from(v))));
movie[0][0][0] = true; // Change value
print(movie[0][0][0]); // true
print(movie[1][0][0]); // false (default value)
對于最后一個,我不是從座位創建一個新串列,而是首先使用 map 將每個串列復制到一個新串列中,然后我將這些新串列復制到一個新串列中。
我相信這可以解決我們遇到的問題
聚苯乙烯
這是一個建議,如果您不在乎,現在可以停止閱讀:
如果要生成包含 200 個假值的串列,可以改用以下語法:
List<bool> _seat = List.filled(200, false, growable: true);
這使得做同樣的事情的方式更短、更易讀。
宣告映射時,首選此語法:
Map<int, List<bool>> _date = {};
Map<int, Map<int, List<bool>>> _movie = {};
我知道它看起來有點惡心,但它可以確保您不會在地圖中添加錯誤的型別
最后,你首先為什么要使用地圖?您的地圖的行為與串列完全相同,因為鍵是一個索引,您可以使用 generate 建構式而不是 for 回圈來生成所述串列,如下所示:
//Date index(total 7 days) Seat status
List<List<bool>> _date = List.generate(7, (_) => List.from(_seat));
//TMDB MovieList index
List<List<List<bool>>> _movie = List.generate(
MoviesList.length, (_) => List.from(_date));
同樣,語法看起來很糟糕,這是因為所有嵌套串列,最好制作一個可以以更整潔和型別安全的方式存盤值的類,但我缺乏向您展示如何撰寫這樣的資訊的資訊一類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/363172.html
