flutter - 没有互联网连接时返回页面而不是吐司
问题描述
我正在构建颤振应用程序并创建了一个检查互联网连接的功能,如果没有互联网连接,它应该向我显示一个页面(在此处创建 Internet()页面),并显示消息“无法连接重试..”,我在这里尝试在下面的 if 语句中路由到互联网页面,但它没有用。但是,它与吐司完美搭配,有什么帮助吗?
ps:it throws “用于从 Navigator 推送或弹出路由的上下文必须是作为 Navigator 小部件后代的小部件的上下文。”
import 'package:flutter/material.dart';
import 'dart:io'; //InternetAddress utility
import 'dart:async';
import 'package:connectivity/connectivity.dart';
import 'package:fluttertoast/fluttertoast.dart';
runApp(
child: Notification(),
);
class Notification extends StatefulWidget {
@override
_NotificationState createState() => _NotificationState();
}
class _NotificationState extends State<Notification> {
var subscription;
var connectionStatus;
@override
void initState() {
subscription = Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
setState(() => connectionStatus = result);
checkInternetConnectivity();
});
super.initState();
}
checkInternetConnectivity() {
if (connectionStatus == ConnectivityResult.none) {
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (_, __, ___) => MaterialApp(home: Builder(builder: (_) => Internet())),
transitionDuration: Duration.zero,
),
);
}}
// checkInternetConnectivity() {
// if (connectionStatus == ConnectivityResult.none) {
// return
// Fluttertoast.showToast(
// msg: "Check your internet connection",
// toastLength: Toast.LENGTH_LONG,
// gravity: ToastGravity.TOP,
// timeInSecForIosWeb: 10,
// backgroundColor: Colors.red,
// textColor: Colors.white,
// fontSize: 16.0
// );
// }
// }
@override
dispose() {
super.dispose();
subscription.cancel();
}
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
localizationsDelegates:
translator.delegates,
locale: translator.locale, // Active locale
supportedLocales: translator.locals(),
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
iconTheme: new IconThemeData(color: Colors.black),
backgroundColor: Colors.white,
),
}}
解决方案
你不是在导航。改用这个:
if (connectionStatus == ConnectivityResult.none) {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => MaterialApp(home: Builder(builder: (_) => Internet())),
),
);
}
如果您不想显示任何类型的路线动画,请使用:
if (connectionStatus == ConnectivityResult.none) {
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (_, __, ___) => MaterialApp(home: Builder(builder: (_) => Internet())),
transitionDuration: Duration.zero,
),
);
}
推荐阅读
- c# - 如何摆脱 asp.net mvc 中的重复项?
- symfony - 一个非常简单的 OneToOne 加入请求的教义错误
- javascript - 隐藏值低于特定值的类别 Highcharts
- openlayers - 如何将鼠标滚轮缩放级别限制为 View.resolutions 中指定的级别?
- hdfs - Apache Beam 中 HDFS 集群的附加配置
- java - 通过 RestAssured 在 JSON 中的多个匹配断言
- javascript - 验证消息隐藏在角度js中
- c# - 如何在忽略大小写 c# 的情况下检查枚举值中的“包含”?
- r - R:在数据直方图上叠加泊松分布
- xml - 在 C 程序中使用 libxml/xpath 在 XML 文件中查找和替换和属性