import 'package:equatable/equatable.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../model/sex_model.dart'; import '../../repository/scan_repository.dart'; import '../../provider/dio_provider.dart'; import '../../repository/base_repository.dart'; // 3. state provider final sexProvider = StateNotifierProvider( (ref) => SexNotifier(ref: ref)); // 2. notifier class SexNotifier extends StateNotifier { final Ref ref; SexNotifier({required this.ref}) : super(SexStateInit()); void sex({ required String host, }) async { try { state = SexStateLoading(); final resp = await ScanRepository( dio: ref.read(dioProvider), ).sexRepo( host: host ); // print(resp); state = SexStateDone(model: resp); } catch (e) { if (e is BaseRepositoryException) { state = SexStateError(message: e.message); } else { state = SexStateError(message: e.toString()); } } } } // 1. state abstract class SexState extends Equatable { final DateTime date; const SexState(this.date); @override List get props => [date]; } class SexStateInit extends SexState { SexStateInit() : super(DateTime.now()); } class SexStateLoading extends SexState { SexStateLoading() : super(DateTime.now()); } class SexStateError extends SexState { final String message; SexStateError({ required this.message, }) : super(DateTime.now()); } class SexStateDone extends SexState { final List model; SexStateDone({ required this.model, }) : super(DateTime.now()); }