【发布时间】:2017-10-20 02:41:00
【问题描述】:
我正在尝试创建一个SimpleDialog,允许用户输入他们的姓名。但是当它显示时,屏幕键盘将对话框隐藏了一半:
如何让Dialog 完全可见?
编辑:我觉得奇怪的是主页小部件 (FocusVisibilityDemo) 识别出降低的高度,因此调整了“Push Me”按钮的位置以保持在中心。不幸的是,对话框的行为方式不同。
这是我的代码:
import 'package:flutter/material.dart';
class FocusVisibilityDemo extends StatefulWidget {
@override
_FocusVisibilityDemoState createState() => new _FocusVisibilityDemoState();
}
class _FocusVisibilityDemoState extends State<FocusVisibilityDemo> {
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(title: new Text('Text Dialog Demo')),
body: new Center(
child: new RaisedButton(
onPressed: _showDialog,
child: new Text("Push Me"),
),
),
);
}
_showDialog() async {
await showDialog<String>(
context: context,
child: new AlertDialog(
contentPadding: const EdgeInsets.all(16.0),
content: new Row(
children: <Widget>[
new Expanded(
child: new TextField(
autofocus: true,
decoration: new InputDecoration(
labelText: 'Full Name', hintText: 'eg. John Smith'),
),
)
],
),
actions: <Widget>[
new FlatButton(
child: const Text('CANCEL'),
onPressed: () {
Navigator.pop(context);
}),
new FlatButton(
child: const Text('OPEN'),
onPressed: () {
Navigator.pop(context);
})
],
),
);
}
}
void main() {
runApp(new MaterialApp(home: new FocusVisibilityDemo()));
}
【问题讨论】:
-
在这种情况下,您可能需要使用全屏输入。
-
@Mark 如何获取文本字段中输入的值?
-
@ArgaPK 您应该实例化一个 TextEditingController 实例,并将其传递给您的 TextField 的“控制器”参数。然后,设置 TextField 的“onSubmitted”方法,这是一个在您点击“OK”时将被调用的方法,它有一个 String 参数 - 这是您在 TextField 中输入的数据。您还可以设置“onChanged”方法,因此每次在 TextField 中输入内容时,都会调用“onChanged”。