下面是我的代码
class FakturPage extends StatefulWidget {
const FakturPage({Key? key}) : super(key: key);
static String id = 'fakturpage';
@override
State<FakturPage> createState() => _FakturPageState();
}
class _FakturPageState extends State<FakturPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
DropdownTextfield(),
],
),
);
}
}
这是DropdownTextfield小部件代码,我尝试在其中创建一个UI,该UI显示一个Textfield和一个DropdownButton,该按钮具有从其上方的Textfield输入的选项。
class DropdownTextfield extends StatefulWidget {
@override
_DropdownTextfieldState createState() => _DropdownTextfieldState();
}
class _DropdownTextfieldState extends State<DropdownTextfield> {
var selectedOption;
TextEditingController textfieldValue = TextEditingController();
final List<String> options = [];
@override
void initState() {
super.initState();
selectedOption = (options.isNotEmpty ? options[0] : null)!;
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
TextField(
onChanged: (value) {
setState(() {
value = textfieldValue.text;
});
},
),
DropdownButton<String>(
value: selectedOption,
onChanged: (value) {
setState(() {
selectedOption = value!;
});
},
items: options.map((option) {
return DropdownMenuItem<String>(
value: option,
child: Text(option),
);
}).toList(),
),
TextButton(
onPressed: () {
setState(() {
options.add(textfieldValue.text);
});
},
child: Text("Add Option"),
),
],
);
}
}
我不知道哪里出了问题。我试着找出我的自定义下拉窗口小部件是否有问题,但我找不到任何问题。我已经尝试修复这个问题近一个小时没有找到解决方案,因为我是移动开发世界的新手。你能帮助我吗?
2条答案
按热度按时间j9per5c41#
问题是您使用的是空Assert(
!
),尽管您正在执行空检查。替换
与
6yt4nkrj2#
您使用零安全 dart 功能的方式存在问题。
我已经测试了你的代码和下拉文本字段。问题是在
options
列表中是空的。这个问题的关键是你如何在下拉文本字段中使用感叹号:这段代码的工作原理如下:
options
列表不为空-取其第一个值并分配给selectedOption
selectedOption
为空但是在末尾加上感叹号,你就意味着Dart编译器不会有任何空值,所以,这就是你的错误产生的地方。
如何解决此问题?
selectedOption
定义任何缺省值options
列表中此外,还可以查看Dart documentation explaining null-safety的官方功能: