我想制作一個異步加載對話框,從資料庫中檢索資料(這是異步任務),一旦完成,我想顯示一個對話框,顯示檢索到的資料。意思是,我想在從資料庫中檢索資料時顯示一個加載對話框小部件,并且一旦檢索到資料,就使用對話框將其顯示在螢屏上
uj5u.com熱心網友回復:
在這個我們需要處理樹的場景,
- 資料呼叫前,不顯示任何內容
- 在以后的通話中,顯示進度條
- 獲取后,使用資料
使用兩個可為空的變數來處理這種情況
只需根據您的需要更換小部件。
class _WelcomeScreenState extends State<WelcomeScreen> {
Future<int> fecthData() async {
return Future.delayed(
Duration(seconds: 3),
).then(
(value) => 4,
);
}
bool? _isLoading;
int? data;
@override
Widget build(BuildContext context) {
return Scaffold(
body: LayoutBuilder(
builder: (context, constraints) => Column(
children: [
ElevatedButton(
onPressed: () async {
setState(() {
_isLoading = true; //set true while fetching
});
data = await fecthData();
setState(() {
_isLoading = false; //set false while fetching
});
},
child: Text("Fetch")),
if (_isLoading == true) CircularProgressIndicator(),
if (data != null) Text("${data!}") // if you have data show it
],
),
),
);
}
}
uj5u.com熱心網友回復:
當您需要在 Flutter 中從 Internet 獲取資料時顯示加載欄或圓形進度指示器時,就會出現這一點。您可以通過多種方式顯示加載欄,直到未獲取資料。一些是:
- 使用 setstate((){}) 方法。
- 使用狀態管理,如 GetX、Bloc、Provider。
- 使用 FutureBuilder()
- 使用 StreamBuilder() 您可以使用它們中的任何一個,因為所有背后的邏輯都是相同的。邏輯很簡單:假設有一個 bool 變數最初設定為 false 。直到資料未完全獲取,您將需要顯示加載欄,為此,該 bool 變數將設定為 true 。獲取所有資料后,我們將再次將該 bool 變數設定為 false。并且根據該 bool 變數的值,您將需要顯示小部件。點擊這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/368496.html
