返回上一屏幕时出错.. 我也收到了
在小部件树中检测到重复的 GlobalKey。
屏幕 A -> 屏幕 B -> 屏幕 c 工作正常
但是当从屏幕 C ->屏幕 A 返回时,我遇到了这样的问题
我已将全局密钥初始化为:
GlobalKey loginformKey = new GlobalKey(debugLabel: '_loginformKey');
也尝试过制作最终版,但没有成功。我使用 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);
}
}
}
}
答案 0 :(得分:0)
我也遇到了这个问题,并设法通过将 formKey 从控制器移动到小部件本身来解决这个问题。 此外,我将 Widget 从无状态转换为有状态。
现在可以使用了。
希望这也适用于您。