spot_ws_provider.dart 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import 'dart:developer' as developer;
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter_riverpod/flutter_riverpod.dart';
  4. import '../core/config/app_config.dart';
  5. import '../core/network/spot_ws_client.dart';
  6. import 'profile_provider.dart';
  7. export '../core/network/spot_ws_client.dart' show SpotWsState;
  8. /// 现货 WS 单例;uid 用于用户推送。
  9. final spotWsClientProvider = Provider<SpotWsClient>((ref) {
  10. final uid = ref.watch(
  11. profileProvider.select((s) => s.user.uid),
  12. );
  13. if (!kReleaseMode) {
  14. debugPrint('[SpotWsProvider] url=${AppConfig.effectiveWsSpotUrl}');
  15. developer.log(
  16. 'SpotWsClient init url=${AppConfig.effectiveWsSpotUrl}',
  17. name: 'SpotWsProvider',
  18. );
  19. }
  20. final client = SpotWsClient(
  21. wsSpotUrl: AppConfig.effectiveWsSpotUrl,
  22. uid: uid.isNotEmpty ? uid : null,
  23. );
  24. ref.onDispose(client.dispose);
  25. return client;
  26. });
  27. final spotWsConnectionStateProvider = StreamProvider<SpotWsState>((ref) {
  28. return ref.watch(spotWsClientProvider).connectionStream;
  29. });