This commit is contained in:
2026-06-03 14:07:10 +08:00
parent 3bdece45c3
commit 9eb8d1cc37
118 changed files with 5689 additions and 2 deletions

View File

@@ -0,0 +1,42 @@
import 'package:dio/dio.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_template/app/config/app_config.dart';
import 'package:flutter_template/core/network/api_client.dart';
import 'package:flutter_template/core/network/header_interceptor.dart';
import 'package:flutter_template/core/network/offline_queue/offline_queue_interceptor.dart';
import 'package:flutter_template/core/network/providers/network_providers.dart';
import 'package:flutter_template/core/network/providers/offline_queue_providers.dart';
final dioProvider = Provider<Dio>((ref) {
final dio = Dio(
BaseOptions(
baseUrl: AppConfig.current.baseUrl,
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
sendTimeout: const Duration(seconds: 30),
responseType: ResponseType.json,
),
);
dio.interceptors.add(HeaderInterceptor());
final monitor = ref.watch(networkMonitorProvider);
final queueManager = ref.watch(offlineQueueManagerProvider);
dio.interceptors.add(
OfflineQueueInterceptor(
monitor: monitor,
manager: queueManager,
enabled: false,
),
);
if (AppConfig.current.enableNetworkLog) {
dio.interceptors.add(LogInterceptor(requestBody: true, responseBody: true));
}
return dio;
});
final apiClientProvider = Provider<ApiClient>((ref) {
return ApiClient(ref.watch(dioProvider));
});

View File

@@ -0,0 +1,14 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_template/core/network/network_monitor.dart';
import 'package:flutter_template/core/network/network_state.dart';
final networkMonitorProvider = Provider<NetworkMonitor>((ref) {
final monitor = NetworkMonitor()..start();
ref.onDispose(monitor.dispose);
return monitor;
});
final networkStateProvider = StreamProvider<NetworkState>((ref) {
final monitor = ref.watch(networkMonitorProvider);
return monitor.stream;
});

View File

@@ -0,0 +1,29 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_template/core/network/offline_queue/offline_queue_manager.dart';
import 'package:flutter_template/core/network/offline_queue/offline_queue_state.dart';
import 'package:flutter_template/core/network/offline_queue/offline_queue_storage.dart';
import 'package:flutter_template/core/network/providers/network_providers.dart';
import 'package:dio/dio.dart';
final offlineQueueStorageProvider = Provider<OfflineQueueStorage>((ref) {
return OfflineQueueStorage();
});
final offlineQueueDioProvider = Provider<Dio>((ref) {
return Dio();
});
final offlineQueueManagerProvider = Provider<OfflineQueueManager>((ref) {
final manager = OfflineQueueManager(
dio: ref.watch(offlineQueueDioProvider),
monitor: ref.watch(networkMonitorProvider),
storage: ref.watch(offlineQueueStorageProvider),
);
manager.init();
ref.onDispose(manager.dispose);
return manager;
});
final offlineQueueStateProvider = StreamProvider<OfflineQueueState>((ref) {
return ref.watch(offlineQueueManagerProvider).stateStream;
});