Я действительно расстроен этим.
У меня есть 3 функции, которые вызывают showModalBottomSheet
в каждой функции.
2 Модалов с состоянием и 1 без состояния.
У меня проблема с другим Stateful модалом.
Они оба вызываются с помощью функции InkWell's
onTap
. и оба также не занимают весь экран, поэтому показывает главную страницу.
МОЙ СТАТУСНЫЙ МОДАЛЬ, КОТОРЫЙ НЕ ТРЕБУЕТ БУДУЩЕЕ / НЕ ОБНОВЛЯЕТ СТРАНИЦУ:
void showCommentsModal(int id) {
showModalBottomSheet(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0),
),
backgroundColor: Color(colorBackground),
isScrollControlled: true,
context: context,
builder: (BuildContext context) {
return Container(
padding: EdgeInsets.all(10),
decoration: BoxDecoration(
color: Color(colorBackground),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20), topRight: Radius.circular(20))),
height: MediaQuery.of(context).size.height / 1.5,
width: MediaQuery.of(context).size.width,
child: ViewCommentModal(
postID: id,
userList: userList,
),
);
},
);
}
ДРУГОЕУСТОЙЧИВЫЙ МОДАЛЬ, КОТОРЫЙ СЛЕДУЕТ БУДУЩЕМ / ОБНОВЛЯЕТ СПИСОК:
addCommentModal(int i) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
padding:
EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom),
child: AddCommentModal(
onPost: (String text) {
APIServices.commentPost(context, i.toString(), text);
Navigator.pop(context);
},
),
);
},
);
}
что заставляет addCommentModal
запускать будущее? пожалуйста, помогите.
РЕДАКТИРОВАТЬ : Я поймал подозреваемого! вот мой AddCommentModal
код:
class AddCommentModal extends StatefulWidget {
final ValueChanged<String> onPost;
AddCommentModal({@required this.onPost});
@override
_AddCommentModalState createState() => _AddCommentModalState();
}
class _AddCommentModalState extends State<AddCommentModal> {
final commentController = TextEditingController();
String defaultProfilePhoto = "";
@override
void initState() {
defaultProfilePhoto = Constants.userFirstName[0].toUpperCase();
super.initState();
}
@override
void dispose() {
commentController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(10),
child: Row(
children: <Widget>[
Container(
width: 50,
height: 50,
child: ClipRRect(
borderRadius: new BorderRadius.circular(50),
child: Constants.userProfilePhoto == null
? Container(
color: Color(colorPrimary),
alignment: Alignment.center,
child: Text(
defaultProfilePhoto,
style: TextStyle(
color: Color(colorText), fontSize: 20),
),
)
: Image.network(
APIServices.httpDomain + Constants.userProfilePhoto,
fit: BoxFit.cover,
)),
),
Expanded(
child: Container(
margin: EdgeInsets.only(
left: 10,
),
child: TextFormField(
controller: commentController,
decoration: new InputDecoration(
suffixIcon: IconButton(
onPressed: () => widget.onPost(commentController.text),
icon: Icon(
FontAwesomeIcons.paperPlane,
size: 15,
color: Theme.of(context).primaryColor,
)),
contentPadding: EdgeInsets.all(10),
hintText: "Add a comment ...",
fillColor: Colors.white,
border: new OutlineInputBorder(
borderRadius: new BorderRadius.circular(20.0),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(20)),
borderSide:
BorderSide(width: 1, color: Color(0xFFff8b50)))),
keyboardType: TextInputType.text,
style: new TextStyle(fontFamily: "Poppins", fontSize: 15),
),
))
],
));
}
}
Проблема, котораявызывает обновление страницы из-за SoftKeyboard , который всплывает всякий раз, когда фокусируется TextFormField
.
Когда я показываю модальный режим, он работает плавно. но когда я начинаю нажимать field
, страница обновляется, как будто будущее снова вызывается.