切换按钮,失败的断言行 188 pos 12:'isSelected != null is not true
Toggle Buttons, failed assertion line 188 pos 12: 'isSelected != null is not true
我目前正在学习 Flutter,我尝试制作一个文本 ToogleButtons,但是我遇到了这个错误:
'package:flutter/src/material/toogle_buttons.dart': Failed assertion: line 188 pos 12: 'isSelected != null': is not true.
我已经将列表 isSelected
的 bool 更改为 [true, false, false];
但它没有用,
我的代码如下:
List<bool> isSelected = [false, false, false];
FocusNode focusNodeButton1 = FocusNode();
FocusNode focusNodeButton2 = FocusNode();
FocusNode focusNodeButton3 = FocusNode();
List<FocusNode> focusToggle;
@override
void initState() {
// ignore: todo
// TODO: implement initState
super.initState();
focusToggle = [focusNodeButton1, focusNodeButton2, focusNodeButton3];
}
@override
void dispose() {
// Clean up the focus node when the Form is disposed.
focusNodeButton1.dispose();
focusNodeButton2.dispose();
focusNodeButton3.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: kDefaultPadding / 2),
child: ToggleButtons(
borderColor: Colors.black,
fillColor: Colors.white,
borderWidth: 2,
borderRadius: BorderRadius.circular(2),
selectedBorderColor: kMaincolor,
selectedColor: kMaincolor,
focusNodes: focusToggle,
children: <Widget>[
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Lingkar Teman",
style: TextStyle(fontSize: 15),
),
),
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Orang Lain",
style: TextStyle(fontSize: 15),
),
),
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Semua",
style: TextStyle(fontSize: 15),
),
),
],
isSelected: isSelected,
onPressed: (int index) {
setState(() {
isSelected[index] = !isSelected[index];
});
},
),
),
],
),
代码对我来说很好。可能的问题可能是您在 运行 应用程序之后写了 isSelected
列表,现在您正在尝试热重新加载应用程序,因此它将其视为 null
并且这个问题正在发生。请尝试重新启动应用程序或初始化 isSelected
in build.此外,您不能像那样恢复数组的状态,因为您需要检查索引。您可以将setState()
内容替换为如下
setState(() {
for (int i = 0; i < isSelected.length; i++) {
isSelected[i] = i == index
}
});
我目前正在学习 Flutter,我尝试制作一个文本 ToogleButtons,但是我遇到了这个错误:
'package:flutter/src/material/toogle_buttons.dart': Failed assertion: line 188 pos 12: 'isSelected != null': is not true.
我已经将列表 isSelected
的 bool 更改为 [true, false, false];
但它没有用,
我的代码如下:
List<bool> isSelected = [false, false, false];
FocusNode focusNodeButton1 = FocusNode();
FocusNode focusNodeButton2 = FocusNode();
FocusNode focusNodeButton3 = FocusNode();
List<FocusNode> focusToggle;
@override
void initState() {
// ignore: todo
// TODO: implement initState
super.initState();
focusToggle = [focusNodeButton1, focusNodeButton2, focusNodeButton3];
}
@override
void dispose() {
// Clean up the focus node when the Form is disposed.
focusNodeButton1.dispose();
focusNodeButton2.dispose();
focusNodeButton3.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left: kDefaultPadding / 2),
child: ToggleButtons(
borderColor: Colors.black,
fillColor: Colors.white,
borderWidth: 2,
borderRadius: BorderRadius.circular(2),
selectedBorderColor: kMaincolor,
selectedColor: kMaincolor,
focusNodes: focusToggle,
children: <Widget>[
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Lingkar Teman",
style: TextStyle(fontSize: 15),
),
),
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Orang Lain",
style: TextStyle(fontSize: 15),
),
),
Padding(
padding: EdgeInsets.all(5),
child: Text(
"Semua",
style: TextStyle(fontSize: 15),
),
),
],
isSelected: isSelected,
onPressed: (int index) {
setState(() {
isSelected[index] = !isSelected[index];
});
},
),
),
],
),
代码对我来说很好。可能的问题可能是您在 运行 应用程序之后写了 isSelected
列表,现在您正在尝试热重新加载应用程序,因此它将其视为 null
并且这个问题正在发生。请尝试重新启动应用程序或初始化 isSelected
in build.此外,您不能像那样恢复数组的状态,因为您需要检查索引。您可以将setState()
内容替换为如下
setState(() {
for (int i = 0; i < isSelected.length; i++) {
isSelected[i] = i == index
}
});