Files
scan-ktp/lib/screen/scan/sex_provider.dart
2025-02-18 05:46:59 +07:00

71 lines
1.6 KiB
Dart

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<SexNotifier, SexState>(
(ref) => SexNotifier(ref: ref));
// 2. notifier
class SexNotifier extends StateNotifier<SexState> {
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<Object?> 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<SexModel> model;
SexStateDone({
required this.model,
}) : super(DateTime.now());
}