【发布时间】:2021-07-24 08:43:57
【问题描述】:
返回上一个屏幕时出错.. 我也得到了
在小部件树中检测到重复的 GlobalKey。
屏幕 A -> 屏幕 B ->屏幕 c 工作正常
但是当从屏幕 C 回来时 ->屏幕 A 我遇到了这样的问题
我已将全局键初始化为:
GlobalKey loginformKey = new GlobalKey(debugLabel: '_loginformKey');
也尝试过制作 final 但没有成功。我正在使用 Getx 进行状态管理。这是我的登录控制器。
class LoginController extends BaseController {
final LoginRespostory repository;
final LoginInterface loginInterface;
GlobalKey<FormState> loginformKey;
LoginController({@required this.repository, this.loginInterface})
: assert(repository != null);
TextEditingController emailController,
passwordcontroller,
phonenumberController;
@override
void onReady() {
// TODO: implement onReady
super.onReady();
emailController = TextEditingController();
passwordcontroller = TextEditingController();
phonenumberController = TextEditingController();
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
loginformKey = null;
emailController.dispose();
passwordcontroller.dispose();
phonenumberController.dispose();
}
@override
void onConnected() {
// TODO: implement onConnected
super.onConnected();
}
@override
void onDisconnect() {
// TODO: implement onDisconnect
super.onDisconnect();
}
@override
void onInit() {
// TODO: implement onInit
super.onInit();
loginformKey = new GlobalKey<FormState>(debugLabel: '_loginformKey');
}
validateAndProceed() {
if (formKey.currentState.validate()) {
userlogin();
} else {
Utils.showErrorSnackBar(title: "Success", message: "validation error");
}
}
Future<void> userlogin() async {
Utils.showloading();
return await loginInterface
.getlogin(emailController.text, passwordcontroller.text)
.then((value) => onSuccess(value))
.catchError((error) => onError(error));
}
onSuccess(SocialLoginResponse loginresponse) {
if (loginresponse.ok) {
AppPrefernces.putString(
AppPrefernces.LOGINRESPONSE, loginresponse.toString());
AppPrefernces.putString(AppPrefernces.TOKEN, loginresponse.accessToken);
if (!loginresponse.user.phoneVerified) {
} else {
Utils.dismissloading();
Get.toNamed(Routes.DASHBOARD);
}
} else {
Utils.dismissloading();
Utils.showErrorSnackBar(
title: loginresponse.ok.toString(), message: loginresponse.message);
}
}
onError(error) {
Utils.dismissloading();
Utils.showErrorSnackBar(title: AppString.ERROR, message: AppString.ERROR);
}
onDetailSuccess(SocialLoginResponse response) {
if (response.ok) {
Utils.showSuccessSnackBar(
title: response.ok.toString(), message: AppString.SUCCESS);
AppPrefernces.putString(AppPrefernces.LOGINRESPONSE, response.toString());
AppPrefernces.putString(AppPrefernces.TOKEN, response.accessToken);
emailController.clear();
passwordcontroller.clear();
Future.delayed(
Duration(seconds: 1), () => Get.offNamed(Routes.DASHBOARD));
} else {
Utils.showErrorSnackBar(
title: response.ok.toString(), message: response.accessToken);
}
}
}
}
【问题讨论】:
-
你能包含一些代码吗,我遇到了类似的问题,通过热重启解决了
-
热重启只能工作一段时间,但同样的问题再次出现
标签: flutter dart flutter-getx