bounty还有5天到期。此问题的答案有资格获得+50声望奖励。more正在寻找一个答案从一个有信誉的来源。
当我在ios模拟器或android模拟器上运行应用程序时,键盘没有问题,一切正常。但是当我通过testflight在物理设备上运行时,键盘显示在SendInputField上。无法看到输入字段和发送按钮。
这里是代码
@override
Widget build(BuildContext context) {
return WillPopScope(
child: Scaffold(
resizeToAvoidBottomInset: true,
appBar: AppBarWidget(
),
body: _mainBody(context),
),
);
}
_mainBody(BuildContext context) {
return Obx(
() => Column(
children: [
Expanded(
flex: 5,
child: SingleChildScrollView(
reverse: true,
child: Stack(
children: <Widget>[
_buildList(),
],
),
),
),
Expanded(
flex: 0,
child: Obx(() => Visibility(
visible: controller.isLoading.value,
child: const CustomLoadingAPI())),
),
Expanded(flex: 0, child: _submitButton(context)),
SizedBox(height: Dimensions.heightSize)
],
),
);
}
_submitButton(BuildContext context) {
return Align(
....
SendInputField(
hintText: Strings.typeYour.tr,
onTap: () {
if (!LocalStorage.isFreeUser()) {
if (controller.chatController.text.isNotEmpty) {
controller.proccessChat(args[0]);
Future.delayed(const Duration(milliseconds: 50))
.then((_) => controller.scrollDown());
} else {
ToastMessage.error(Strings.writeSomethingg.tr);
}
} else {
...
}
},
,
],
),
);
}
_buildList() {
return Obx(() => ListView.builder(
controller: controller.scrollController,
itemCount: controller.itemCount.value,
shrinkWrap: true,
itemBuilder: (context, index) {
return ChatMessageWidget(
....
text: controller.messages.value[index].text,
...
index: index);
},
));
}
}
有什么建议吗?我应该如何解决这个问题?
2条答案
按热度按时间lmyy7pcs1#
1.使用
MediaQuery.of(context).viewInsets.bottom
属性获取键盘的高度。然后,使用此高度填充SendInputField的底部。这将确保SendInputField始终可见,即使在键盘打开时也是如此。double keyboardHeight = MediaQuery.of(context).viewInsets.bottom;
1.您也可以尝试
ScrollView.keyboardDismissBehavior
属性将键盘解除行为设置为ScrollViewKeyboardDismissBehavior.onDrag.
这将允许用户通过将键盘拖离屏幕来解除键盘。使用第三方键盘库,如
flutter_keyboard_visibility
或keyboard_dismissible
。sqxo8psd2#
您可以像这样使用底部insets: