【发布时间】:2019-02-16 03:34:02
【问题描述】:
我的名字是 Pablo,我目前正在构建一个 Flutter 应用程序。因此,我的应用程序从 Firebase 存储中获取了一些图像和音频,显然,在没有互联网连接的情况下,应用程序不会显示图像并且不会播放音频。 我希望应用程序在没有 WIFI 或数据时向用户弹出警报;我该怎么做?
谢谢:)
【问题讨论】:
标签: android firebase flutter firebase-storage
我的名字是 Pablo,我目前正在构建一个 Flutter 应用程序。因此,我的应用程序从 Firebase 存储中获取了一些图像和音频,显然,在没有互联网连接的情况下,应用程序不会显示图像并且不会播放音频。 我希望应用程序在没有 WIFI 或数据时向用户弹出警报;我该怎么做?
谢谢:)
【问题讨论】:
标签: android firebase flutter firebase-storage
为了显示警报部分,您可以使用 RFlutter Alert 库。它是 Flutter 易于定制且易于使用的警报/弹出对话框库。
示例代码:
Alert(context: context, title: "RFLUTTER", desc: "Flutter is awesome.").show();
*我是 RFlutter Alert 的开发者之一。
【讨论】:
您可以简单地使用一个函数来检查您是否有网络连接,通过 ping Google 服务器:
/system/bin/ping -c 1 8.8.8.8
在 Android 中,此函数如下所示:
public boolean isNetworkAvailable() {
Runtime runtime = Runtime.getRuntime();
try {
Process process = runtime.exec("/system/bin/ping -c 1 8.8.8.8");
int exitValue = process.waitFor();
return (exitValue == 0);
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
return false;
}
在 Firestore 中,默认情况下会启用离线持久性。因此,您可以检查用户是从缓存中读取数据还是从 Firebase 服务器读取数据。更优雅的方法是使用 isFromCache() 函数。这是Android的代码:
yourDocRef.addSnapshotListener(new DocumentListenOptions().includeMetadataChanges(), new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(DocumentSnapshot documentSnapshot, FirebaseFirestoreException e) {
Log.d("listener.isFromCache: " + documentSnapshot.getMetadata().isFromCache());
}
});
【讨论】:
isNetworkAvailable() 复制并粘贴了你的第一个方法,但我总是得到一个错误的结果,尽管我有互联网连接。知道为什么会这样吗?