Я добавляю пользователя в базу данных firestore, используя шаблон блока. При нажатии кнопки я вызвал мой блок вставки логина пользователя c, а после обратного вызова в streamBuilder я хочу переместить пользователя на втором экране.
Проблемы, с которыми я сталкиваюсь с этим кодом
- Мой метод навигации вызывает вызывающий дважды построитель
- setState () или markNeedsBuild (), вызываемый во время сборки.
- Проблема переполнения RenderFlex внизу
Проверка записи кода нажатия кнопки и вызов метода blo c, т.е. _loginBlo c .addUser (_users);
Widget _commonWidget() {
return Container(
width: MediaQuery.of(context).size.width / 1.5,
margin: EdgeInsets.only(bottom: 70),
child: RaisedButton(
padding: EdgeInsets.all(10),
child: Text(
'Next',
style: TextStyle(color: Colors.white, fontSize: 18),
),
onPressed: () {
// check is first name is valid
bool isValidFirstName = validateName(_firstNameController);
debugPrint(" isValidFirstName $isValidFirstName");
if (isValidFirstName) {
setState(() {
_isValidFirstNameError = false;
});
//check if last name is valid
bool isValidLastName = validateName(_lastNameController);
debugPrint(" isValidLastName $isValidLastName");
if (isValidLastName) {
setState(() {
_isValidLastNameError = false;
});
FocusScope.of(context).requestFocus(new FocusNode());
_users.firstName = _firstNameController.value.text;
_users.lastName = _lastNameController.value.text;
_users.fullName = _firstNameController.value.text +
" " +
_lastNameController.value.text;
_loginBloc.addUser(_users);
} else {
//last name is not valid display error message
setState(() {
_isValidLastNameError = true;
});
}
} else {
//first name is not valid display error message
setState(() {
_isValidFirstNameError = true;
});
}
},
color: Colors.teal[300],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
),
),
);
}
Проверка кода StreamBuilder, если данные успешно вставлен, а затем перейдите на secondScreen
StreamBuilder<Response>(
stream: _loginBloc.response,
builder: (context, snapshot) {
if (snapshot.hasData) {
debugPrint(
"snapshot.connectionState = ${snapshot.connectionState}");
if (snapshot.data.isSuccess &&
snapshot.data.documentID != null) {
_users.documentID = snapshot.data.documentID;
print("pregnancyDetails Navigation");
SchedulerBinding.instance
.addPostFrameCallback((_) {
Navigator.pushReplacementNamed(
context, '/secondScreen',
arguments: _users);
});
} else {
final snackBar = SnackBar(
content: Text(
"Something has gone wrong, please try later: "));
Scaffold.of(context).showSnackBar(snackBar);
}
// return _commonWidget();
return _commonWidget();
} else {
return _commonWidget();
}
})