使用connectivity_plus包检查flutter中的互联网连接时出现问题

问题描述 投票:0回答:2

在将用户重定向到主页之前尝试检查用户是否已连接到互联网。当我连接到互联网并返回 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()));
      }
    });
  }
flutter
2个回答
0
投票

只有在没有互联网连接的情况下才会返回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
  }
}

0
投票

为了确保在没有 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包

© www.soinside.com 2019 - 2024. All rights reserved.