Мне нравится создавать простой логин в Flutter. При запуске кода он застревает в бесконечности l oop. Я уже обнаружил, что вызывать REST API в методе сборки - это «плохая практика», но я не знаю, как этого избежать.
Как я могу решить эту проблему? Каков наилучший способ обработки вызовов REST нажатием / нажатием кнопки без настройки функциональности в методе «build»?
Мой вид входа в систему выглядит следующим образом (детали опущены):
@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: Container(
height: MediaQuery.of(context).size.height,
child: Stack(
children: <Widget>[
Container(
padding: EdgeInsets.symmetric(horizontal: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_emailPasswordWidget(),
PrimaryButton("Login", true, performLogin),
],
),
),
],
),
)
)
);
Где основная кнопка занимает лямбду.
void performLogin(BuildContext context) {
final String userName = _userName.text.trim();
final String password = _password.text.trim();
if(password.isEmpty || userName.isEmpty) {
return;
}
UserService service = UserService();
service.loginUser(userName, password).then((val) {
Navigator.push(
context, MaterialPageRoute(builder: (context) => MainLayout()));
}).catchError((e) {
showDialog(context: context,
builder: (context) {
return AlertDialog(
content: Text("ERROR")
);
});
});
}
Это вызывается "PrimaryButton" следующим образом:
onTap: widget.onTab(context)
Моя проблема сейчас заключается в том, что всякий раз, когда я нажимаю кнопку "Логин", он вызывает функцию (для тестирования , это ошибка) и застревает в бесконечной ОШИБКЕ l oop. Когда я нажимаю где-нибудь, чтобы закрыть диалог, он снова запускается. Похоже, что он запускается несколько раз одним щелчком мыши.