import 'dart:async'; import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../core/config/app_config.dart'; final connectivityProvider = StateNotifierProvider((ref) { return ConnectivityNotifier(); }); class ConnectivityNotifier extends StateNotifier { ConnectivityNotifier() : super(true) { _check(); // immediate first check _timer = Timer.periodic(const Duration(seconds: 30), (_) => _check()); } Timer? _timer; // Dedicated lightweight Dio — short timeouts, no interceptors final _dio = Dio(BaseOptions( connectTimeout: const Duration(seconds: 3), receiveTimeout: const Duration(seconds: 3), )); /// 立即触发一次检测(供外部调用,如 API 请求失败时) Future forceCheck() => _check(); Future _check() async { try { await _dio.get(AppConfig.healthUrl); if (!state) state = true; } catch (_) { if (state) state = false; } } @override void dispose() { _timer?.cancel(); _dio.close(force: true); super.dispose(); } }