我正在尝试创建一个简单的待办事项应用程序,其底部带有一个“浮动操作”按钮,单击该按钮时将显示一个“警报对话框”,以将项目添加到列表中。 每次我单击按钮时,键盘都会向上推动操作按钮,从而导致溢出错误。 打开键盘时,有什么方法可以避免将操作按钮向上推? 这是我拍摄的快照: Snapshot 在源代码下面:
import 'package:flutter/material.dart';
import '../model/todo_item.dart';
class ToDoScreen extends StatefulWidget {
@override
_ToDoScreenState createState() => _ToDoScreenState();
}
class _ToDoScreenState extends State<ToDoScreen> {
TextEditingController _textEditingController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.blueAccent,
body: Column(
children: <Widget>[ToDoItem("Going for a Walk", "12 January, 2019")],
),
floatingActionButton: FloatingActionButton(
tooltip: 'Add Item',
child: Icon(Icons.add),
backgroundColor: Colors.red,
onPressed: _showFormDialog,
),
);
}
void _showFormDialog() {
var alert = AlertDialog(
content: Row(
children: <Widget>[
Expanded(
child: TextField(
controller: _textEditingController,
autofocus: true,
decoration: InputDecoration(
labelText: "Item",
hintText: "eg. Buy Vegetables",
icon: Icon(Icons.note_add)),
),
)
],
),
actions: <Widget>[
FlatButton(
onPressed: () {
// _handleSubmit(_textEditingController.text);
_textEditingController.clear();
},
child: Text("Save ToDo"),
),
FlatButton(
onPressed: () {
Navigator.pop(context);
},
child: Text("Cancel"),
)
],
);
showDialog(context: context, builder: (BuildContext context) => alert);
}
}
答案 0 :(得分:6)
您可以检查是否显示键盘,并根据该键盘创建浮动按钮。
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: keyboardIsOpened ?
null ://or an empty contatiner
FloatingActionButton(
tooltip: 'Add Item',
child: Icon(Icons.add),
backgroundColor: Colors.red,
onPressed: _showFormDialog,
),
);
}
在build方法中,您可以通过使用MediaQuery.of(context).viewInsets.bottom
知道键盘是否出现并将其值保存在bool变量keyboardIsOpened
上,如下例所示。
@override
Widget build(BuildContext context) {
bool keyboardIsOpened = MediaQuery.of(context).viewInsets.bottom != 0.0;
答案 1 :(得分:2)
使用了MediaQuery
和Visibility
小部件
Visibility(
visible: MediaQuery.of(context).viewInsets.bottom != 0.0,
child: FloatingActionButton(
onPressed: () {
},
child: Icon(Icons.chat),
),
),
答案 2 :(得分:1)
我遇到了同样的问题,我的“浮动操作按钮”将被向上推。
我使用以下属性解决了此问题:
resizeToAvoidBottomPadding: false,
在父级Scafold
上。
我用您的代码对其进行了测试,它也解决了该问题。
答案 3 :(得分:0)
在此包装完整的代码
new Container(
child: Column(
children: <Widget>[
Expanded(
child: SingleChildScrollView(
child: Stack(
children: <Widget>[
// Your body code
] // Widget
), // Stack
), // SingleChildScrollView
), // Expanded
Container(
alignment: Alignment.bottomCenter,
padding: EdgeInsets.all(10.0),
child :
// button code here
// to make button full width use minWidth: double.infinity,
,
), //Container
], // Widget
), // Column
), // Container