问题很简单:我在表单字段中单击时需要显示numberpickerdialog。然后我需要将数字选择器值分配给字段。
表单字段
final maxValue = new GestureDetector(
onTap: () {
print("entra");
_showDialog(context);
},
child: TextFormField(
//controller: inputMaxValue,
decoration: InputDecoration(
hintText: DemoLocalizations.of(context).trans('value-meter-max'),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.blue[300], width: 2.5),
),
)),
);
对话框
void _showDialog(context) {
showDialog<double>(
context: context,
builder: (BuildContext context) {
return new NumberPickerDialog.decimal(
minValue: 1,
maxValue: 10,
title: new Text("Pick a new price"),
initialDoubleValue: _currentPrice,
);
}
).then((double value) {
if (value != null) {
setState(() => _currentPrice = value);
}
});
}
问题:当我单击“字段”对话框时未显示:单击此字段后如何启动showDialog?
答案 0 :(得分:2)
我重新创建了您的案子,并发现问题可能是由于使用了TextFormField
。理想情况下,TextFormField
仅应用于编辑文本,因为无论如何我们都单击它会启用带有光标的字段。如果我们用GestureDetector
包装它,我们将尝试再次点击它,这可能与click事件冲突。
我宁愿使用InputDecorator
并用GestureDetector
包装它。这是打开对话框的工作示例:
@override Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: GestureDetector(
child: InputDecorator(
decoration: InputDecoration(
labelText: 'Test'
),
),
onTap: () {
_showDialog();
},
)
)
);
}
void _showDialog() {
// flutter defined function
showDialog(
context: context,
builder: (BuildContext context) {
// return object of type Dialog
return AlertDialog(
title: new Text("Alert Dialog title"),
content: new Text("Alert Dialog body"),
actions: <Widget>[
// usually buttons at the bottom of the dialog
new FlatButton(
child: new Text("Close"),
onPressed: () {
Navigator.of(context).pop();
},
),
],
);
},
); }