import 'package:flutter/material.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:permission_handler/permission_handler.dart'; import '../widgets/dialogs/kr_dialog.dart'; import '../localization/app_translations.dart'; import 'dart:io' show Platform; import 'dart:io' show InternetAddress; /// 网络检查工具类 class KRNetworkCheck { /// 初始化网络检查 static Future kr_initialize(BuildContext context, {VoidCallback? onPermissionGranted}) async { try { if (Platform.isIOS) { // iOS 平台特殊处理 final hasPermission = await kr_checkNetworkPermission(); if (!hasPermission) { // 显示网络设置提示对话框 final bool? result = await kr_showNetworkDialog(); if (result == true) { // 打开系统设置 await kr_openAppSettings(); // 等待用户返回并检查权限 bool hasPermissionAfterSettings = false; for (int i = 0; i < 10; i++) { await Future.delayed(const Duration(seconds: 1)); hasPermissionAfterSettings = await kr_checkNetworkPermission(); if (hasPermissionAfterSettings) { onPermissionGranted?.call(); return true; } } if (!hasPermissionAfterSettings) { await kr_showNetworkDialog(); return false; } } return false; } } else { // Android 平台处理 final hasPermission = await kr_checkNetworkPermission(); if (!hasPermission) { final bool? result = await kr_showNetworkDialog(); if (result == true) { await kr_openAppSettings(); bool hasPermissionAfterSettings = false; for (int i = 0; i < 10; i++) { await Future.delayed(const Duration(seconds: 1)); hasPermissionAfterSettings = await kr_checkNetworkPermission(); if (hasPermissionAfterSettings) { onPermissionGranted?.call(); return true; } } if (!hasPermissionAfterSettings) { await kr_showNetworkDialog(); return false; } } return false; } } onPermissionGranted?.call(); return true; } catch (e) { debugPrint('网络检查初始化错误: $e'); return false; } } /// 检查网络权限 static Future kr_checkNetworkPermission() async { try { if (Platform.isIOS) { // iOS 平台使用更可靠的方式检查网络状态 final connectivityResult = await Connectivity().checkConnectivity(); if (connectivityResult == ConnectivityResult.none) { return false; } // 尝试进行实际的网络请求测试 try { final result = await InternetAddress.lookup('www.apple.com'); return result.isNotEmpty && result[0].rawAddress.isNotEmpty; } catch (e) { return false; } } else { // Android 平台保持原有逻辑 final connectivityResult = await Connectivity().checkConnectivity(); return connectivityResult != ConnectivityResult.none; } } catch (e) { debugPrint('网络权限检查错误: $e'); return false; } } /// 检查网络连接状态 static Future kr_checkNetworkConnection() async { try { if (Platform.isIOS) { // iOS 平台使用更可靠的方式检查网络状态 final connectivityResult = await Connectivity().checkConnectivity(); if (connectivityResult == ConnectivityResult.none) { return false; } try { final result = await InternetAddress.lookup('www.apple.com'); return result.isNotEmpty && result[0].rawAddress.isNotEmpty; } catch (e) { return false; } } else { final connectivityResult = await Connectivity().checkConnectivity(); return connectivityResult != ConnectivityResult.none; } } catch (e) { debugPrint('网络连接检查错误: $e'); return false; } } /// 监听网络状态变化 static Stream kr_networkStream() { return Connectivity().onConnectivityChanged; } /// 打开应用设置页面 static Future kr_openAppSettings() async { if (Platform.isIOS) { // iOS 平台打开网络设置 try { await openAppSettings(); } catch (e) { debugPrint('打开设置页面错误: $e'); } } else { await openAppSettings(); } } /// 显示网络权限对话框 static Future kr_showNetworkDialog() async { bool? result; await KRDialog.show( title: Platform.isIOS ? AppTranslations.kr_networkPermission.title : AppTranslations.kr_networkPermission.title, message: Platform.isIOS ? AppTranslations.kr_networkPermission.description : AppTranslations.kr_networkPermission.description, confirmText: AppTranslations.kr_networkPermission.goToSettings, cancelText: AppTranslations.kr_networkPermission.cancel, onConfirm: () async { result = await openAppSettings(); }, onCancel: () { result = false; }, ); return result ?? false; } }