Flutter 如何更改列表生成器中单个图标的颜色
如何更改列表生成器中单个图标的颜色 如果特定任务完成,我想更改颜色 检查图片 下面是我的生成代码列表 e、 g如果我完成了预测试,那么预测试应该变成绿色Flutter 如何更改列表生成器中单个图标的颜色,flutter,dart,Flutter,Dart,如何更改列表生成器中单个图标的颜色 如果特定任务完成,我想更改颜色 检查图片 下面是我的生成代码列表 e、 g如果我完成了预测试,那么预测试应该变成绿色 Padding( padding: const EdgeInsets.all(24.0), child: GridView.count( physics: NeverScrollableScrollPhysics(), s
Padding(
padding: const EdgeInsets.all(24.0),
child: GridView.count(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
crossAxisCount: 1,
mainAxisSpacing: 16,
childAspectRatio: 4,
children: List.generate(tagListDisease.length, (index) {
return _diseaseCard(tagListDisease[index]),
);
}),
),
下面是_diseaseCardWidgets
Widget _diseaseCard(tags) {
return Card(
margin: EdgeInsets.zero,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0),
),
elevation: 0.0,
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Container(
width: MediaQuery.of(context).size.height * 0.07,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(width: 3, color: Colors.red ),
color: Colors.transparent),
child: Center(
child: Text(
"0%",
style: TextStyle(
color: Colors.grey,
fontSize: 14.0,
fontWeight: FontWeight.normal,
),
textAlign: TextAlign.center,
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8,
),
child: Text(
"$tags",
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
letterSpacing: 1,
fontWeight: FontWeight.w600,
),
),
),
],
),
),
),
);
[]
不要像这里使用的那样使用硬编码颜色:
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(width: 3, color: Colors.red ),
color: Colors.transparent),
创建Color\u Color=Colors.red
并使用\u Color
代替Colors.red
然后,当按下或点击任务完成按钮时
触发此功能:
=>(){SetState(){
_color=Colors.green},),}
要更改列表中特定项目的颜色,您必须传递id或索引,但根据您提供的代码示例,这应该可以完成此工作。而不是使用您在此处使用的硬编码颜色:
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(width: 3, color: Colors.red ),
color: Colors.transparent),
创建Color\u Color=Colors.red
并使用\u Color
代替Colors.red
然后,当按下或点击任务完成按钮时
触发此功能:
=>(){SetState(){
_color=Colors.green},),}
要更改列表中特定项目的颜色,您必须传递id或索引,但根据您提供的代码示例,这应该可以完成此工作。您可以复制粘贴运行下面的完整代码
您可以看到下面的工作演示
步骤1:使用类
标记
和列表
工作演示
完整代码
import 'package:flutter/material.dart';
class Tag {
String title;
bool complete;
Tag({this.title, this.complete});
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Tag> tagListDisease = [
Tag(title: "a", complete: false),
Tag(title: "b", complete: false),
Tag(title: "c", complete: false)
];
Widget _diseaseCard(List<Tag> tagListDisease, int index) {
return Card(
margin: EdgeInsets.zero,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0),
),
elevation: 0.0,
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
onTap: () {
tagListDisease[index].complete =
!tagListDisease[index].complete;
setState(() {});
},
child: Container(
width: MediaQuery.of(context).size.height * 0.07,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
width: 3,
color: tagListDisease[index].complete
? Colors.green
: Colors.red),
color: Colors.transparent),
child: Center(
child: tagListDisease[index].complete
? Icon(
Icons.favorite,
color: Colors.pink,
size: 24.0,
semanticLabel:
'Text to announce in accessibility modes',
)
: Text(
"0%",
style: TextStyle(
color: Colors.grey,
fontSize: 14.0,
fontWeight: FontWeight.normal,
),
textAlign: TextAlign.center,
),
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8,
),
child: Text(
"${tagListDisease[index].title}",
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
letterSpacing: 1,
fontWeight: FontWeight.w600,
),
),
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Padding(
padding: const EdgeInsets.all(24.0),
child: GridView.count(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
crossAxisCount: 1,
mainAxisSpacing: 16,
childAspectRatio: 4,
children: List.generate(tagListDisease.length, (index) {
return _diseaseCard(tagListDisease, index);
}),
),
));
}
}
导入“包装:颤振/材料.省道”;
类标签{
字符串标题;
布尔完成;
标记({this.title,this.complete});
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
视觉密度:视觉密度。自适应平台密度,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
列表tagListDisease=[
标签(标题:“a”,完整:假),
标签(标题:“b”,完整:假),
标签(标题:“c”,完整:false)
];
Widget_diseaseCard(列表tagListDisease,int索引){
回程卡(
边距:EdgeInsets.zero,
clipBehavior:Clip.antiAlias,
形状:圆形矩形边框(
边界半径:边界半径。圆形(16.0),
),
标高:0.0,
子:容器(
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
墨水池(
onTap:(){
tagListDisease[索引]。已完成=
!tagListDisease[index]。已完成;
setState((){});
},
子:容器(
宽度:MediaQuery.of(上下文).size.height*0.07,
装饰:盒子装饰(
形状:BoxShape.circle,
边界:边界(
宽度:3,
颜色:tagListDisease[索引]。已完成
?颜色:绿色
:颜色。红色),
颜色:颜色。透明),
儿童:中心(
子项:tagListDisease[索引]。已完成
?图标(
我的最爱,
颜色:颜色。粉红色,
尺寸:24.0,
语义分类:
“在可访问性模式下发布的文本”,
)
:文本(
"0%",
样式:TextStyle(
颜色:颜色。灰色,
字体大小:14.0,
fontWeight:fontWeight.normal,
),
textAlign:textAlign.center,
),
),
),
),
填充物(
填充:const EdgeInsets.symmetric(
横向:8,
),
子:文本(
“${tagListDisease[index].title}”,
样式:TextStyle(
颜色:颜色,黑色,
字体大小:14.0,
字母间距:1,
fontWeight:fontWeight.w600,
),
),
),
],
),
),
);
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
主体:填充物(
填充:常数边集全部(24.0),
子项:GridView.count(
物理学:NeverscrollableScroll物理学(),
收缩膜:对,
滚动方向:轴垂直,
交叉轴计数:1,
平均间距:16,
儿童方面:4,
子项:List.generate(tagListDisease.length,(索引){
返回疾病卡(标签疾病,索引);
}),
),
));
}
}
您可以复制粘贴运行下面的完整代码您可以看到下面的工作演示
步骤1:使用类
标记
和列表
工作演示
完整代码
import 'package:flutter/material.dart';
class Tag {
String title;
bool complete;
Tag({this.title, this.complete});
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<Tag> tagListDisease = [
Tag(title: "a", complete: false),
Tag(title: "b", complete: false),
Tag(title: "c", complete: false)
];
Widget _diseaseCard(List<Tag> tagListDisease, int index) {
return Card(
margin: EdgeInsets.zero,
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16.0),
),
elevation: 0.0,
child: Container(
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
InkWell(
onTap: () {
tagListDisease[index].complete =
!tagListDisease[index].complete;
setState(() {});
},
child: Container(
width: MediaQuery.of(context).size.height * 0.07,
decoration: BoxDecoration(
shape: BoxShape.circle,
border: Border.all(
width: 3,
color: tagListDisease[index].complete
? Colors.green
: Colors.red),
color: Colors.transparent),
child: Center(
child: tagListDisease[index].complete
? Icon(
Icons.favorite,
color: Colors.pink,
size: 24.0,
semanticLabel:
'Text to announce in accessibility modes',
)
: Text(
"0%",
style: TextStyle(
color: Colors.grey,
fontSize: 14.0,
fontWeight: FontWeight.normal,
),
textAlign: TextAlign.center,
),
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 8,
),
child: Text(
"${tagListDisease[index].title}",
style: TextStyle(
color: Colors.black,
fontSize: 14.0,
letterSpacing: 1,
fontWeight: FontWeight.w600,
),
),
),
],
),
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Padding(
padding: const EdgeInsets.all(24.0),
child: GridView.count(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
scrollDirection: Axis.vertical,
crossAxisCount: 1,
mainAxisSpacing: 16,
childAspectRatio: 4,
children: List.generate(tagListDisease.length, (index) {
return _diseaseCard(tagListDisease, index);
}),
),
));
}
}
导入“包装:颤振/材料.省道”;
类标签{
字符串标题;
布尔完成;
标记({this.title,this.complete});
}
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(