我必须管理到Flutter 翼应用程序的两个身份验证.
主要是使用Firebase身份验证进行维护.
对于另一个,我用我的OtherUser
对象创建了一个AsyncNotifier
.
这里的 idea 是通过所有应用程序保持目前的OtherUser
.
以下是我的想象:
import 'package:hooks_riverpod/hooks_riverpod.dart';
class PatientController extends AsyncNotifier<Patient?> {
PatientController();
bool firstBuild = true;
static PatientController patientController = PatientController();
@override
Future<Patient?> build() async {
return null;
}
void logInPatient({
required String firstName,
required String lastName,
required DateTime birthday,
}) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
final patient = await ref.read(repositoryProvider).getPatient(
firstName: firstName,
lastName: lastName,
birthday: birthday,
);
return patient;
});
}
void createPatient(
{required String firstName,
required String lastName,
required DateTime birthday,
}) async {
state = const AsyncLoading();
state = await AsyncValue.guard(() async {
final patient = await ref.read(repositoryProvider).createPatient(
firstName: firstName,
lastName: lastName,
birthday: birthday,
);
ref.read(routerProvider).go('/doctor/patient/home');
return patient;
});
}
void updatePatient(
{required String firstName,
required String lastName,
required DateTime birthday,}) {
update((data) async {
state = const AsyncLoading();
final patient = data!.copyWith(
firstName: firstName,
lastName: lastName,
birthday: birthday,
);
await ref.read(repositoryProvider).updatePatient(patient: patient);
return patient;
});
}
void logPatientOut() {
update((data) {
// do stuff
return null;
});
}
}
final patientControllerProvider =
AsyncNotifierProvider<PatientController, Patient?>(
() => PatientController.patientController);
最后,它是一种独生子女.
它在起作用,但我显然不确定这是不是最佳实践. 否则,它将始终调用rebuild,我应该将一个字符串作为id传递,以通过应用程序获取id.
你知道我该怎么做吗?