使用提供程序包,如何管理单个布尔以在同一页面中调用拖曳方法
Using provider package, how to manage single bool for calling tow method in same page
我有登录屏幕,其中有 2 个按钮。
- Login
- FB Login
我正在使用 Provider 包来管理应用程序状态。下面是登录区。
class LoginBloc with ChangeNotifier {
bool _isAPICalling = false;
bool get isAPICalling => _isAPICalling;
apiCallingStatus(bool isCall) {
_isAPICalling = isCall;
notifyListeners();
}
Future<LoginResponseModel> callLoginApi(LoginReqModel _loginReqModel) =>
locator<LoginService>().login(_loginReqModel);
Future<LoginResponseModel> callFBLoginApi(SocialUser _loginReqModel) =>
locator<LoginService>().fbLogin(_loginReqModel);
}
我正在使用 isAPICalling 来管理登录屏幕中的加载程序。
下面是简单登录和fb登录两个按钮的代码。
Widget _loginBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling,
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}
Widget _facebookBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling,
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callFBLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}
这里的问题是,当我点击任何一个按钮时,两个按钮的加载程序都会显示。我如何管理状态,以便加载器只显示可点击的按钮?
我们无法通过使用单个bool
来实现它。您可以使用 String
来管理它,您可以为每个按钮设置 "FB"/"simple_login",请看下面
这是一个字符串示例 _bloc.isAPICalling == 'FB'
Widget _facebookBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling == 'FB',
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callFBLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}
我有登录屏幕,其中有 2 个按钮。
- Login
- FB Login
我正在使用 Provider 包来管理应用程序状态。下面是登录区。
class LoginBloc with ChangeNotifier {
bool _isAPICalling = false;
bool get isAPICalling => _isAPICalling;
apiCallingStatus(bool isCall) {
_isAPICalling = isCall;
notifyListeners();
}
Future<LoginResponseModel> callLoginApi(LoginReqModel _loginReqModel) =>
locator<LoginService>().login(_loginReqModel);
Future<LoginResponseModel> callFBLoginApi(SocialUser _loginReqModel) =>
locator<LoginService>().fbLogin(_loginReqModel);
}
我正在使用 isAPICalling 来管理登录屏幕中的加载程序。
下面是简单登录和fb登录两个按钮的代码。
Widget _loginBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling,
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}
Widget _facebookBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling,
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callFBLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}
这里的问题是,当我点击任何一个按钮时,两个按钮的加载程序都会显示。我如何管理状态,以便加载器只显示可点击的按钮?
我们无法通过使用单个bool
来实现它。您可以使用 String
来管理它,您可以为每个按钮设置 "FB"/"simple_login",请看下面
这是一个字符串示例 _bloc.isAPICalling == 'FB'
Widget _facebookBtn(LoginBloc _bloc) {
return RoundButtonWidget(
label: Translations.of(context).text('login'),
isAPICalling: _bloc.isAPICalling == 'FB',
buttonTap: () {
Utils.hideKeyboard(context);
_globalFormKey.currentState.save();
if (_checkValidation()) {
_bloc.apiCallingStatus(true);
_bloc.callFBLoginApi(_loginReqModel).then((result) async {
_bloc.apiCallingStatus(false);
if (result.success == 1) {
Navigator.pushReplacement(
context, MaterialPageRoute(builder: (context) => HomePage()));
} else {
Utils.openAlertDialog(result.message, context);
}
});
}
},
);
}