Flutter 颤振自定义复选框设置动态列表中的状态
我有一个列表,使用我自己设计的自定义复选框,通过使用setState将变量更改为true或false,单击卡片以指示完成或未完成 如何使“单击一个”复选框只选中该卡 当前,当我单击一个复选框时,也会选中所有复选框 这是我的省道板: 我的代码:Flutter 颤振自定义复选框设置动态列表中的状态,flutter,dart,Flutter,Dart,我有一个列表,使用我自己设计的自定义复选框,通过使用setState将变量更改为true或false,单击卡片以指示完成或未完成 如何使“单击一个”复选框只选中该卡 当前,当我单击一个复选框时,也会选中所有复选框 这是我的省道板: 我的代码: import 'package:flutter/material.dart'; final Color darkBlue = Color.fromARGB(255, 18, 32, 47); void main() { runApp(MyApp()
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: TestPageTwo(),
),
),
);
}
}
class TestPageTwo extends StatefulWidget {
@override
_TestPageTwoState createState() => _TestPageTwoState();
}
class _TestPageTwoState extends State<TestPageTwo> {
bool isComplete = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Task List'),
),
body: ListView.builder(
padding: EdgeInsets.all(15.0),
shrinkWrap: true,
itemCount: taskList.length,
itemBuilder: (context, index) =>
_buildTaskCard(index, taskList[index]),
));
}
Widget _buildTaskCard(int itemIndex, TaskModel task) {
return Card(
margin: EdgeInsets.symmetric(vertical: 5.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0))),
elevation: 5.0,
child: InkWell(
splashColor: Colors.blue.withAlpha(30),
onTap: () {},
child: Container(
width: double.infinity,
height: 70,
child: Column(
children: [
ListTile(
leading: GestureDetector(
onTap: () {
setState(() {
isComplete = !isComplete;
});
print(isComplete);
},
child: isComplete
? Icon(
Icons.check_circle_outline_outlined,
color: Colors.blue,
size: 40,
)
: Icon(
Icons.radio_button_unchecked,
color: Colors.grey,
size: 40,
),
),
title: Text(
task.taskTitle,
style: TextStyle(fontSize: 13.0),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
task.taskCategory,
style: TextStyle(fontSize: 10.0),
),
dense: true,
),
],
),
),
),
);
}
}
class TaskModel {
final String taskId,
taskStatus,
taskTitle,
taskCategory;
TaskModel(
{this.taskId,
this.taskStatus,
this.taskTitle,
this.taskCategory});
}
List<TaskModel> taskList = [
TaskModel(
taskId: 'task00001',
taskStatus: 'Incomplete',
taskTitle: 'Task 00001',
taskCategory: 'A0001'),
TaskModel(
taskId: 'task00002',
taskStatus: 'Completed',
taskTitle: 'Task 00002',
taskCategory: 'A0002'),
TaskModel(
taskId: 'task00003',
taskStatus: 'Incomplete',
taskTitle: 'Task 00003',
taskCategory: 'A0003',),
TaskModel(
taskId: 'task00004',
taskStatus: 'Incomplete',
taskTitle: 'Task 00004',
taskCategory: 'A0004',),
];
导入“包装:颤振/材料.省道”;
最终颜色深蓝色=颜色。来自argb(255,18,32,47);
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
正文:中(
子项:TestPageTwo(),
),
),
);
}
}
类TestPageTwo扩展了StatefulWidget{
@凌驾
_TestPageTwoState createState();
}
类_TestPageTwoState扩展状态{
bool isComplete=false;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“任务列表”),
),
正文:ListView.builder(
填充:所有边缘设置(15.0),
收缩膜:对,
itemCount:taskList.length,
itemBuilder:(上下文,索引)=>
_buildTaskCard(索引,任务列表[索引]),
));
}
Widget\u buildTaskCard(int itemIndex,TaskModel任务){
回程卡(
边缘:边缘组。对称(垂直:5.0),
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径.圆形(10.0)),
标高:5.0,
孩子:InkWell(
飞溅颜色:颜色。蓝色。带有alpha(30),
onTap:(){},
子:容器(
宽度:double.infinity,
身高:70,
子:列(
儿童:[
列表砖(
引导:手势检测器(
onTap:(){
设置状态(){
isComplete=!isComplete;
});
打印(已完成);
},
孩子:我完成了
?图标(
图标。检查\u圆圈\u轮廓\u轮廓,
颜色:颜色,蓝色,
尺码:40,
)
:图标(
图标。单选按钮未选中,
颜色:颜色。灰色,
尺码:40,
),
),
标题:正文(
task.taskTitle,
样式:TextStyle(字体大小:13.0),
maxLines:1,
溢出:TextOverflow.省略号,
),
字幕:文本(
task.taskCategory,
样式:TextStyle(fontSize:10.0),
),
是的,
),
],
),
),
),
);
}
}
类任务模型{
最后一个字符串taskId,
任务状态,
任务名称,
任务类别;
任务模型(
{this.taskId,
这是一种状态,
这个题目,
这是一个任务类别});
}
列表任务列表=[
任务模型(
taskId:'task00001',
taskStatus:“未完成”,
任务标题:“任务00001”,
任务类别:“A0001”),
任务模型(
taskId:'task00002',
任务状态:“已完成”,
任务标题:“任务00002”,
任务类别:“A0002”),
任务模型(
taskId:'task00003',
taskStatus:“未完成”,
任务标题:“任务00003”,
任务类别:“A0003”,),
任务模型(
taskId:'task00004',
taskStatus:“未完成”,
任务标题:“任务00004”,
任务类别:“A0004”,),
];
试试这个
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: TestPageTwo(),
),
),
);
}
}
class TestPageTwo extends StatefulWidget {
@override
_TestPageTwoState createState() => _TestPageTwoState();
}
class _TestPageTwoState extends State<TestPageTwo> {
bool isComplete = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Task List'),
),
body: ListView.builder(
padding: EdgeInsets.all(15.0),
shrinkWrap: true,
itemCount: taskList.length,
itemBuilder: (context, index) =>
_buildTaskCard(index, taskList[index]),
));
}
Widget _buildTaskCard(int itemIndex, TaskModel task) {
return Card(
margin: EdgeInsets.symmetric(vertical: 5.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0))),
elevation: 5.0,
child: InkWell(
splashColor: Colors.blue.withAlpha(30),
onTap: () {},
child: Container(
width: double.infinity,
height: 70,
child: Column(
children: [
ListTile(
leading: GestureDetector(
onTap: () {
setState(() {
task.taskStatus = !task.taskStatus;
});
print(isComplete);
},
child: task.taskStatus
? Icon(
Icons.check_circle_outline_outlined,
color: Colors.blue,
size: 40,
)
: Icon(
Icons.radio_button_unchecked,
color: Colors.grey,
size: 40,
),
),
title: Text(
task.taskTitle,
style: TextStyle(fontSize: 13.0),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
subtitle: Text(
task.taskCategory,
style: TextStyle(fontSize: 10.0),
),
dense: true,
),
],
),
),
),
);
}
}
class TaskModel {
final String taskId,
taskTitle,
taskCategory;
bool taskStatus = false;
TaskModel(
{this.taskId,
this.taskStatus,
this.taskTitle,
this.taskCategory});
}
List<TaskModel> taskList = [
TaskModel(
taskId: 'task00001',
taskStatus: false,
taskTitle: 'Task 00001',
taskCategory: 'A0001'),
TaskModel(
taskId: 'task00002',
taskStatus: true,
taskTitle: 'Task 00002',
taskCategory: 'A0002'),
TaskModel(
taskId: 'task00003',
taskStatus: false,
taskTitle: 'Task 00003',
taskCategory: 'A0003',),
TaskModel(
taskId: 'task00004',
taskStatus: false,
taskTitle: 'Task 00004',
taskCategory: 'A0004',),
];
导入“包装:颤振/材料.省道”;
最终颜色深蓝色=颜色。来自argb(255,18,32,47);
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
主题:ThemeData.dark().copyWith(脚手架背景颜色:深蓝色),
debugShowCheckedModeBanner:false,
家:脚手架(
正文:中(
子项:TestPageTwo(),
),
),
);
}
}
类TestPageTwo扩展了StatefulWidget{
@凌驾
_TestPageTwoState createState();
}
类_TestPageTwoState扩展状态{
bool isComplete=false;
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“任务列表”),
),
正文:ListView.builder(
填充:所有边缘设置(15.0),
收缩膜:对,
itemCount:taskList.length,
itemBuilder:(上下文,索引)=>
_buildTaskCard(索引,任务列表[索引]),
));
}
Widget\u buildTaskCard(int itemIndex,TaskModel任务){
回程卡(
边缘:边缘组。对称(垂直:5.0),
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径.圆形(10.0)),
标高:5.0,
孩子:InkWell(
飞溅颜色:颜色。蓝色。带有alpha(30),
onTap:(){},
子:容器(
宽度:double.infinity,
身高:70,
子:列(
儿童:[
列表砖(
引导:手势检测器(
onTap:(){
设置状态(){
task.taskStatus=!task.taskStatus;
});
打印(已完成);
},
子项:task.taskStatus
?图标(
图标。检查\u圆圈\u轮廓\u轮廓,
颜色:颜色,蓝色,
尺码:40,
)
:图标(