flutter - 使用提供程序包,如何管理在同一页面中调用 tow 方法的单个 bool
问题描述
我有登录屏幕,其中有 2 个按钮。
- 登录
- 脸书登入
我正在使用 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);
}
});
}
},
);
}
这里的问题是,当我单击任何按钮时,都会显示两个按钮加载器。如何管理状态,以便加载程序仅显示可点击按钮?
解决方案
我们无法通过使用 single 来实现它bool
。您可以使用可以设置“FB”/“simple_login”String
的每个按钮的位置来管理它,请看下面
这是一个带有字符串的示例_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);
}
});
}
},
);
}
推荐阅读
- cypress - 如何截断一个值以便与另一个值进行比较?
- python - python method argument assertions
- sql - this Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >=
- sql - 调用函数 plpgsql
- flutter - Why does the .env file get added to build/web/assets?
- java - 我以编程方式创建的按钮的动画在我的应用程序中表现得很奇怪
- elasticsearch - Kibana Visualization from multiple Elastic Search Indexes
- html - Collecting HTML data form to Excel spreadsheet
- r - 用已知的 a 和 b 参数绘制一条线 y = aX^b
- python - 从 python 列表到 numpy 数组时保持 NaN 值?