import 'package:dio/dio.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../core/network/dio_client.dart'; import '../data/models/home/top_trader.dart'; /// 顶级交易员列表状态 class TopTraderState { final List traders; final bool isLoading; const TopTraderState({ this.traders = const [], this.isLoading = false, }); TopTraderState copyWith({ List? traders, bool? isLoading, }) => TopTraderState( traders: traders ?? this.traders, isLoading: isLoading ?? this.isLoading, ); } class TopTraderNotifier extends Notifier { @override TopTraderState build() { Future.microtask(_fetch); return const TopTraderState(isLoading: true); } Future refresh() => _fetch(); Future _fetch() async { try { final dio = ref.read(dioClientProvider); final resp = await dio.get>( 'follow/customer/top-trader-list', queryParameters: {'isTop': 1}, ); final data = resp.data?['data']; if (data == null) { state = state.copyWith(isLoading: false); return; } final records = (data['records'] as List?) ?? []; final traders = records .map((e) => TopTrader.fromJson(e as Map)) .toList(); state = TopTraderState(traders: traders, isLoading: false); } on DioException { state = state.copyWith(isLoading: false); } } } final topTraderProvider = NotifierProvider(TopTraderNotifier.new);