在将用户重定向到主页之前尝试检查用户是否已连接到互联网。当我连接到互联网并返回 true 时,连接结果显示为connectivity.wifi。但是当我断开模拟器上的互联网时,它会显示connectivity.none并返回true,这仍然将用户重定向到主页。我不想将用户引导至主页。
class SplashScreen extends StatefulWidget {
const SplashScreen({super.key});
@override
State<SplashScreen> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
Future<bool> checkInternetConnectivity() async {
try {
final connectivityResult = await Connectivity().checkConnectivity();
print('Connectivity result: $connectivityResult');
return connectivityResult != ConnectivityResult.none;
} catch (e) {
print('Error checking connectivity: $e');
return false; // Assuming no connectivity in case of an error
}
}
void startTimer() {
Timer(Duration(seconds: 5), () async {
bool isConnected = await checkInternetConnectivity();
print('isConnected: $isConnected'); // Debug print
if (isConnected) {
if (await firebaseAuth.currentUser != null) {
firebaseAuth.currentUser != null
? AssistanceMethods.readCurrentUserOnlineInfo()
: null;
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (c) => MainScreen()));
} else {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (c) => LoginScreen()));
}
} else {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (c) => ErrorMsgScreen()));
}
});
}
只有在没有互联网连接的情况下才会返回true,所以这里的控制逻辑似乎是错误的。我想让你试试这个代码
Future<bool> checkInternetConnectivity() async {
try {
final connectivityResult = await Connectivity().checkConnectivity();
print('Connectivity result: $connectivityResult');
return connectivityResult == ConnectivityResult.wifi || connectivityResult == ConnectivityResult.mobile;
} catch (e) {
print('Error checking connectivity: $e');
return false; // Assuming no connectivity in case of an error
}
}
为了确保在没有 Internet 连接的情况下将用户重定向到错误屏幕,请修改 checkInternetConnectivity 方法以正确处理连接状态:
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:flutter/material.dart';
import 'dart:async';
class SplashScreen extends StatefulWidget {
const SplashScreen({super.key});
@override
State<SplashScreen> createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
Future<bool> checkInternetConnectivity() async {
try {
final connectivityResult = await Connectivity().checkConnectivity();
return connectivityResult != ConnectivityResult.none;
} catch (e) {
return false; // Assuming no connectivity in case of an error
}
}
void startTimer() {
Timer(Duration(seconds: 5), () async {
bool isConnected = await checkInternetConnectivity();
if (isConnected) {
Navigator.pushReplacement(context, MaterialPageRoute(builder: (c) => HomePage()));
} else {
Navigator.pushReplacement(context, MaterialPageRoute(builder: (c) => ErrorScreen()));
}
});
}
@override
void initState() {
super.initState();
startTimer();
}
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: CircularProgressIndicator()));
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Home Page')));
}
}
class ErrorScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(body: Center(child: Text('Error: No Internet Connection')));
}
}
确保您已在 pubspec.yaml 中添加了connectivity_plus包