我在 Flutter 中有一个带有 textformfield 和 dropdownbuttonformfield 的表单。运行我的应用程序提示对我不起作用。 提示未显示在下拉按钮表单字段中。它显示 kkk 作为初始值,而不显示 选择城市。
我在这里使用 StatefulWidget。
帮我解决这个问题。 预先感谢。
class _AddTripState extends State<AddTrip> {
var formKey = GlobalKey<FormState>();
TextEditingController nameController = TextEditingController();
TextEditingController numberController = TextEditingController();
TextEditingController datecontroller = TextEditingController();
final format = DateFormat("yyyy-MM-dd");
DateTime _dateTime;
List<String> name = ['kkk', 'rrr'];
String _dropdownvalue = 'kkk';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Add Trip"),
),
body: Form(
key: formKey,
child: ListView(
children: <Widget>[
Text(
'Name',
textAlign: TextAlign.left,
),
TextFormField(
decoration: _inputDecoration(),
keyboardType: TextInputType.text,
controller: nameController,
validator: textValidator,
),
Text(
'Number',
textAlign: TextAlign.left,
),
TextFormField(
decoration: _inputDecoration(),
controller: numberController,
keyboardType: TextInputType.number,
validator: numberValidator,
),
Text(
'Date',
textAlign: TextAlign.left,
),
TextFormField(
readOnly: true,
controller: datecontroller,
validator: dateValidator,
decoration: InputDecoration(
border: OutlineInputBorder(),
errorBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.amber)),
errorStyle: TextStyle(color: Colors.amber),
suffixIcon: GestureDetector(
child: Icon(
Icons.date_range,
),
onTap: () {
showDatePicker(
context: context,
initialDate: DateTime.now(),
firstDate: DateTime(2018),
lastDate: DateTime(2020))
.then((value) {
setState(() {
datecontroller.text =
DateFormat("yyyy-MM-dd").format(value);
});
});
},
),
),
),
DropdownButtonFormField<String>(
hint: Text('Select City'),
validator: _cityValidator,
decoration: InputDecoration(border: OutlineInputBorder()),
items: name.map((value) {
return DropdownMenuItem<String>(
child: Text(value), value: value);
}).toList(),
value: _dropdownvalue,
onChanged: (newValue) {
setState(() {
_dropdownvalue = newValue;
});
},
),
RaisedButton(
onPressed: submit,
child: Text('Add Trip'),
)
],
)),
);
}
我哪里错了?
如果
value
为空,则会显示提示。
所以在你的代码中 - 将 -
String _dropdownvalue = 'kkk';
更改为 - String _dropdownvalue;
您需要使用 InputDecoration 来实现此目的:
decoration: InputDecoration(labelText:'Select City'),
使 dropdownValue 可为空并设置提示文本以显示默认初始值。
DropdownButton<String>(
value: dropdownValue,
style: const TextStyle(color: Colors.black),
underline: Container(
height: 2,
color: Colors.black,
),
items: list.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
hint: const Text(
"Select Item",
style: TextStyle(
color: Colors.black,
fontSize: 16,
fontWeight: FontWeight.w600),
),
onChanged: (String? value) {
// This is called when the user selects an item.
setState(() {
dropdownValue = value!;
});
},
)
列表在哪里
const List<String> list = <String>['One', 'Two', 'Three', 'Four'];
并在build()上面定义dropdownValue可为空
String? dropdownValue; // This is IMP