omnAPP/lib/app/utils/kr_network_check.dart
2025-09-23 16:23:15 +08:00

172 lines
5.4 KiB
Dart
Executable File

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<bool> 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<bool> 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<bool> 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<ConnectivityResult> kr_networkStream() {
return Connectivity().onConnectivityChanged;
}
/// 打开应用设置页面
static Future<void> kr_openAppSettings() async {
if (Platform.isIOS) {
// iOS 平台打开网络设置
try {
await openAppSettings();
} catch (e) {
debugPrint('打开设置页面错误: $e');
}
} else {
await openAppSettings();
}
}
/// 显示网络权限对话框
static Future<bool> 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;
}
}