init
This commit is contained in:
42
lib/core/network/providers/dio_providers.dart
Normal file
42
lib/core/network/providers/dio_providers.dart
Normal 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));
|
||||
});
|
||||
14
lib/core/network/providers/network_providers.dart
Normal file
14
lib/core/network/providers/network_providers.dart
Normal 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;
|
||||
});
|
||||
29
lib/core/network/providers/offline_queue_providers.dart
Normal file
29
lib/core/network/providers/offline_queue_providers.dart
Normal 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;
|
||||
});
|
||||
Reference in New Issue
Block a user