@override
void initState() {
super.initState();
loadData();
}
loadData() async {
await Future.delayed(Duration(seconds: 2));
final catalogJson =
await rootBundle.loadString("assets/files/catalog.json");
final decodedData = jsonDecode(catalogJson);
var productsData = decodedData["products"];
CatalogModel.items = List.from(productsData)
.map<Item>((item) => Item.fromMap(item))
.toList();
setState(() {});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Catalog App"),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: (CatalogModel.items != null && CatalogModel.items.isNotEmpty)
? ListView.builder(
itemCount: CatalogModel.items.length,
itemBuilder: (context, index) => ItemWidget(
item: CatalogModel.items[index],
),
)
: Center(
child: CircularProgressIndicator(),
),
),
drawer: MyDrawer(),
);
}
7
我試圖在加載資料之前在我的顫振應用程式中顯示 CircularProgressIndicator,但它沒有呈現......我也嘗試設定背景顏色和顏色..但它不起作用..
uj5u.com熱心網友回復:
如果我的理解是正確的,你可以這樣解決問題:
return FutureBuilder(
future: _loadData(),
//future: Future.delayed(Duration(seconds: 2)),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.waiting)
return Center(
child: CircularProgressIndicator(),
);
else
return Main(); /
}
);
_loadData應該回傳一個Future<List>.
例子
Future<List> _loadData() {
return Future.wait([
//load Data Implement
]);
uj5u.com熱心網友回復:
請參考 Flutter 提供的便捷工具:The Future Builder。
這處理加載異步資料,一旦加載就顯示它,甚至在它還沒有(還)的時候顯示一個加載小部件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/451648.html
下一篇:iOS:將備用圖示設定回原始圖示
