我有一個應用程式,我試圖為不同的文本值設定不同的圖示。
import 'package:flutter/material.dart';
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:get/get.dart';
import 'package:google_fonts/google_fonts.dart';
import '../utils/colors.dart';
class WidgetCard extends StatefulWidget {
const WidgetCard({Key? key, required this.week, required this.status})
: super(key: key);
final String week;
final String status;
@override
State<WidgetCard> createState() => _WidgetCardState();
}
class _WidgetCardState extends State<WidgetCard> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () {
Get.toNamed('/weekform', arguments: widget.week);
},
child: Container(
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 5.0),
child: Card(
color: AppColors.yellow_accent,
elevation: 5.0,
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(20.0)),
child: Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height * (1 / 6),
padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 10.0),
decoration: BoxDecoration(
color: AppColors.yellow_accent,
borderRadius: BorderRadius.circular(20)),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: AlignmentDirectional.centerStart,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Align(
alignment: AlignmentDirectional.center,
child: Container(
height: 55.0,
child: Image.asset("assets/icons/checked.png")),
),
SizedBox(
width: 17,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(
width: 100,
child: Text(
widget.week,
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 18.0,
fontWeight: FontWeight.bold),
maxLines: 4,
overflow: TextOverflow.ellipsis,
),
),
Row(
children: [
Align(
alignment: AlignmentDirectional.bottomEnd,
child: Text("Status : ",
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 15.0,
fontWeight: FontWeight.normal)),
),
Align(
alignment: AlignmentDirectional.bottomEnd,
child: Text(widget.status,
style: GoogleFonts.poppins(
color: Colors.green,
fontSize: 15.0,
fontWeight: FontWeight.normal)),
),
],
),
],
),
SizedBox(
width: 10,
),
],
),
)
],
),
),
),
),
);
}
}
該值存盤在字串狀態中。我如何在有條件的情況下使用它來更改圖示。狀態有三個值。它可以是“已批準”、“待定”或“已拒絕”
我試著給出一個條件if(status) == "Approved"?但它給出了錯誤
The element type 'bool' can't be assigned to the list type 'Widget'.
uj5u.com熱心網友回復:
這樣做:
Row(
children:[
status=="approved"?Icon(Icons.approve)
:status=="pending"?Icon(Icons.pending):Icon(Icons.rejected)
]
)
uj5u.com熱心網友回復:
先選擇資產目錄怎么樣?宣告你的之后final String status,添加
String assetKind;
if (status=="Approved") {
assetKind = "assets/icons/checked.png";
} else if (status == "Pending") {
assetKind = "~~";
} else if (status == "Rejected") {
assetKind = "~~";
}
和你自己的目錄。
然后,像這樣更改您的對齊小部件:
Align(
alignment: AlignmentDirectional.center,
child: Container(
height: 55.0,
child: Image.asset(assetKind),
),
uj5u.com熱心網友回復:
您可以使用三元運算子來執行此操作。
Container(
child: status == 'Approved'
? const ImageIcon(AssetImage('assets/icons/checked.png'))
: status == 'Pending'
? const ImageIcon(AssetImage('assets/icons/pending.png'))
: const ImageIcon(AssetImage('assets/icons/rejected.png')),
);
或者如果您使用列舉作為您的狀態
import 'package:flutter/material.dart';
enum Status { approved, pending, rejected }
class DemoWidget extends StatelessWidget {
const DemoWidget({super.key, required this.status});
final Status status;
@override
Widget build(BuildContext context) {
return Container(
child: status == Status.approved
? const ImageIcon(AssetImage('assets/icons/checked.png'))
: status == Status.pending
? const ImageIcon(AssetImage('assets/icons/pending.png'))
: const ImageIcon(AssetImage('assets/icons/rejected.png')),
);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/522158.html
