如果等待时间太长,有没有办法跳过?(扑)

Kuc*_*aya 5 asynchronous async-await dart firebase-realtime-database flutter

我在 main 中使用 async wait,因此用户必须在进入应用程序之前在启动屏幕中等待。

void main() async {

  await Firebase.initializeApp();

  String? x;
  await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
     Map data = snapshot.snapshot.value as Map;
     x = jsonEncode(data);
  });

  return ChangeNotifierProvider<DataModel>.value(
     value: DataModel(data: x),
     child: MaterialApp()
  );
}
Run Code Online (Sandbox Code Playgroud)

如果用户在没有互联网连接的情况下进入应用程序,他们将永远卡在启动屏幕上。如果还有互联网连接速度慢的用户,他们会在启动屏幕上停留更长时间。

所以无论互联网连接问题是什么,我想设置最多 5 秒只处于等待状态,如果超过,则跳过该部分并直接进入应用程序。

Raf*_*ahi 4

将 Firebase api 调用传递给函数,使该方法返回 future,

Future<String?> getData() async {
await FirebaseDatabase.instance.ref().child("data").once().then((snapshot) {
     Map data = snapshot.snapshot.value as Map;
     return jsonEncode(data);
  });
}
Run Code Online (Sandbox Code Playgroud)

然后在 main 方法上,使用您创建的方法附加超时

void main() async {

  await Firebase.initializeApp();

  String? x = await getData().timeout(Duration(seconds: 5), onTimeout: () { 
  return null };

  return ChangeNotifierProvider<DataModel>.value(
     value: DataModel(data: x),
     child: MaterialApp()
  );
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您的 api 花费的时间超过 5 秒,那么它会退出并返回 null