Flutter 如何使按钮选中所有颤振复选框?
问题是我无法让按钮选择所有复选框,因为我使用的是自动生成的复选框列表 由于我创建了一个带有列表项WordBlock的类,它是一个带有复选框的容器,每个复选框都有自己的选中值,因此我不能以任何方式选择所有内容。如果我通过构造函数设置checked值,那么它会选择所有内容,但是onChanged()方法不起作用,一个复选框的值也不会改变。但是您需要能够一次选中一个复选框或一次选中所有复选框,使用按钮选择所有复选框 下面是列表中显示的我的WordBlock类的代码Flutter 如何使按钮选中所有颤振复选框?,flutter,flutter-layout,Flutter,Flutter Layout,问题是我无法让按钮选择所有复选框,因为我使用的是自动生成的复选框列表 由于我创建了一个带有列表项WordBlock的类,它是一个带有复选框的容器,每个复选框都有自己的选中值,因此我不能以任何方式选择所有内容。如果我通过构造函数设置checked值,那么它会选择所有内容,但是onChanged()方法不起作用,一个复选框的值也不会改变。但是您需要能够一次选中一个复选框或一次选中所有复选框,使用按钮选择所有复选框 下面是列表中显示的我的WordBlock类的代码 class WordBlock ex
class WordBlock extends StatefulWidget {
final bool checkAll;
WordBlock(this.checkAll);
@override
_WordBlockState createState() => _WordBlockState();
}
class _WordBlockState extends State<WordBlock> {
FlutterTts tts = FlutterTts();
bool checked = false;
Future _speak(String text) async {
await tts.setLanguage('en-US');
await tts.speak(text);
}
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.symmetric(horizontal: 35.w),
child: Card(
color: checked ? MyColors().scaffoldBG : Colors.white,
elevation: 4.0,
shadowColor: MyColors().black.withOpacity(0.1),
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(25.ssp)),
child: CheckboxListTile(
value: checked,
activeColor: MyColors().purple,
onChanged: (value) {
print('changed');
setState(() {
checked = value;
});
},
title: h2(text: 'Car'),
secondary: Padding(
padding: EdgeInsets.only(top: 10.h),
child: InkWell(
onTap: () => _speak('Car'),
child: Icon(
Icons.volume_up_rounded,
color: MyColors().purple,
size: 60.ssp,
),
),
),
subtitle: Text(
'Машина',
style: TextStyle(color: Color(0xFFB8A98BA), fontSize: 27.ssp),
),
),
),
);
}
}
类字块扩展StatefulWidget{
最终布尔检查全部;
字块(this.checkAll);
@凌驾
_WordBlockState createState()=>\u WordBlockState();
}
类_WordBlockState扩展状态{
颤振tts tts=颤振tts();
bool checked=false;
Future\u speak(字符串文本)异步{
等待tts.setLanguage(“en-US”);
等待tts.speak(文本);
}
@凌驾
void initState(){
super.initState();
}
@凌驾
小部件构建(构建上下文){
返回填充(
填充:边缘组。对称(水平:35.w),
孩子:卡片(
颜色:选中?MyColors().scaffoldBG:Colors.white,
标高:4.0,
阴影颜色:MyColors().黑色,不透明度(0.1),
形状:
RoundedRectangleBorder(borderRadius:borderRadius.circular(25.ssp)),
子:CheckboxListTile(
值:选中,
activeColor:MyColors().紫色,
一旦更改:(值){
打印(“更改”);
设置状态(){
选中=值;
});
},
标题:h2(文本:“汽车”),
第二:填充(
填充:仅限边缘设置(顶部:10.h),
孩子:InkWell(
onTap:()=>(你说"车"),,
子:图标(
Icons.volume\u up\u四舍五入,
颜色:MyColors().紫色,
尺寸:60.ssp,
),
),
),
字幕:文本(
'Машина',
样式:TextStyle(颜色:color(0xFFB8A98BA),字体大小:27.ssp),
),
),
),
);
}
}
以下是显示WordBloc列表的“我的页面”的代码:
class WordPage extends StatefulWidget {
@override
_WordPageState createState() => _WordPageState();
}
class _WordPageState extends State<WordPage> {
bool visible = true;
double banerHeight;
bool checked = false;
@override
void initState() {
super.initState();
}
Widget _wrapWithBanner() {
if (!visible) {
setState(() {
banerHeight = 0;
});
}
return visible
? Container(
margin: EdgeInsets.only(
left: 35.w, right: 35.w, top: 30.h, bottom: 30.h),
padding: EdgeInsets.symmetric(vertical: 25.h),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(25.ssp),
color: MyColors().scaffoldBG,
boxShadow: [boxShadow4Y10Blur()]),
child: ListTile(
onTap: () {
print('close');
},
trailing: visible
? InkWell(
onTap: () {
print('tapped');
setState(() {
visible = false;
});
},
child: Icon(Icons.close))
: Container(),
leading: CircleAvatar(),
title: h3bold(text: 'Совет'),
subtitle: Text(
'Чтобы запомнить как можно больше слов, регулярно повторяйте их: каждые два-три часа :)',
style: TextStyle(color: MyColors().black, fontSize: 27.ssp),
),
))
: Container();
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: MyColors().white,
appBar: AppBar(
elevation: 2.0,
title: h2(text: 'Работа'),
iconTheme: IconThemeData(size: 20.ssp, color: MyColors().purple),
backgroundColor: MyColors().white,
),
body: Column(
children: [
_wrapWithBanner(),
Row(
children: [
FlatButton( // my selectAll button
onPressed: () {},
child: Row(
children: [
Checkbox(
value: checked,
onChanged: (val) {
setState(() {
checked = val;
});
}),
Text(
'Выделить все',
style: TextStyle(
color: MyColors().purple, fontSize: 27.ssp),
)
],
))
],
),
Expanded(
child: ListView.builder(
itemCount: 4,
itemBuilder: (context, index) {
return WordBlock(checked);
},
))
],
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
floatingActionButton: Container(
width: 667.w,
height: 91.h,
child: FloatingActionButton(
backgroundColor: MyColors().purple,
onPressed: () {},
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(24.ssp)),
child: h2reg(
text: "Добавить в мой словарь", textColor: MyColors().white),
),
),
));
}
}
类WordPage扩展StatefulWidget{
@凌驾
_WordPageState createState()=>\u WordPageState();
}
类WordPageState扩展了状态{
布尔可见=真;
双盲光;
bool checked=false;
@凌驾
void initState(){
super.initState();
}
Widget_wrapWithBanner(){
如果(!可见){
设置状态(){
白光=0;
});
}
返回可见
?容器(
页边距:仅限边距(
左:35.w,右:35.w,顶部:30.h,底部:30.h),
填充:边缘组。对称(垂直:25.h),
装饰:盒子装饰(
边界半径:边界半径。圆形(25.ssp),
颜色:MyColors().scaffoldBG,
boxShadow:[boxShadow4Y10Blur()]),
孩子:ListTile(
onTap:(){
打印(“关闭”);
},
尾随:可见
?墨水池(
onTap:(){
打印(‘点击’);
设置状态(){
可见=假;
});
},
子:图标(图标。关闭))
:Container(),
前导:CircleAvatar(),
标题:h3bold(文本:“ССччч”),
字幕:文本(
'Чтобы запомнить как можно больше слов, регулярно повторяйте их: каждые два-три часа :)',
样式:TextStyle(颜色:MyColors().black,fontSize:27.ssp),
),
))
:容器();
}
@凌驾
小部件构建(构建上下文){
返回安全区(
孩子:脚手架(
背景颜色:MyColors().白色,
appBar:appBar(
标高:2.0,
标题:h2(文本:“ааааааааааа”)中,
iconTheme:IconThemeData(大小:20.ssp,颜色:MyColors().purple),
背景颜色:MyColors().白色,
),
正文:专栏(
儿童:[
_wrapWithBanner(),
划船(
儿童:[
FlatButton(//我的selectAll按钮
按下:(){},
孩子:排(
儿童:[
复选框(
值:选中,
一旦更改:(val){
设置状态(){
选中=val;
});
}),
正文(
'Выделить все',
样式:TextStyle(
颜色:MyColors().紫色,字体大小:27.ssp),
)
],
))
],
),
扩大(
子项:ListView.builder(
物品计数:4,
itemBuilder:(上下文,索引){
返回字块(选中);
},
))
],
),
浮动ActionButtonLocation:浮动ActionButtonLocation.centerFloat,
浮动操作按钮:容器(
宽度:667.w,
高度:91,
子:浮动操作按钮(
背景颜色:MyColors().紫色,
按下:(){},
形状:圆形矩形边框(
边界半径:边界半径。圆形(24.ssp)),
儿童:h2reg(
文本:“ббббббббббббббббб,
),
),
));
}
}
class WordBlock extends StatefulWidget {
bool checked = false;
WordBlock();
@override
_WordBlockState createState() => _WordBlockState();
}
Checkbox(
value: widget.checked,
onChanged: (val) {
setState(() {
widget.checked = val;
});
}),