third/testModuleD_1/testmoduleD/lib/ranking.dart
2025-07-29 14:31:14 +08:00

131 lines
3.1 KiB
Dart

import 'package:flutter/material.dart';
import 'package:testmoduled/username.dart';
List<String> dishList = [
"fg",
"mk",
"pf",
"fish",
"gt"
];
Map<String,dynamic> mapData ={
"fg":{
'score':10,
"assets":"Baguette.png"
},
"mk":{
'score':20,
"assets":"macaron.png"
},
'pf':{
'score':30,
'assets':"puff.png"
},
'fish':{
"score":-20,
"assets":"fishbone.png"
},
"gt":{
"score":-10,
"assets":"bone.png"
}
};
class ScoreModal{
late int score;
late int duration;
late String name;
ScoreModal(this.score,this.duration,this.name);
static int compare(ScoreModal a,ScoreModal b){
if(a.score>b.score){
return b.score.compareTo(a.score);
}else if(a.duration>b.duration){
return a.duration.compareTo(b.duration);
}else{
return 0;
}
}
}
List<ScoreModal> rankList = [
ScoreModal(20, 40, "dasd"),
ScoreModal(43, 43, "saas"),
ScoreModal(32, 223, "fd"),
ScoreModal(2112, 323, "dasdasdd"),
];
class Ranking extends StatefulWidget {
const Ranking({super.key});
@override
State<Ranking> createState() => _RankingState();
}
class _RankingState extends State<Ranking> {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: DefaultTextStyle(
style: TextStyle(fontSize: 18,fontWeight: FontWeight.w500,color: Colors.black87),
child: Column(
children: [
Row(
children: ["Rank","name","Time","Score"].map((e) => Text(e)).toList(),
),
myRankingList(),
myButton(50, 220, "Tap To Retry", Colors.black87, () => Navigator.of(context).push(MaterialPageRoute(builder: (c)=>userName())))
],
),
)
);
}
myRankingList(){
rankList.sort(ScoreModal.compare);
int rank = 1;
return Column(
children: List.generate(rankList.length, (index){
if(index>0){
if(rankList[index].duration==rankList[index-1].duration && rankList[index].score==rankList[index-1].score){
}else{
rank++;
}
}
return Row(
children: [
Text("$rank"),
Text(rankList[index].name),
Text("Time: ${((rankList[index]).duration~/60).toString().padLeft(2,"0")}:${((rankList[index]).duration%60).toString().padLeft(2,"0")}",style: TextStyle(fontSize: 16,fontWeight: FontWeight.w500,color: Colors.black87),)
,Text(rankList[index].score.toString()),
],
);
})
);
}
}
myButton(double height,double width,String text,Color backColor,Function()? onTap){
return GestureDetector(
onTap: onTap,
child: Container(
alignment: Alignment.center,
height: height,
width: width,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 1,color: Colors.black54),
color: backColor
),
child: Text(text,style: TextStyle(fontSize: 14,fontWeight: FontWeight.w500,color: Colors.white))
),
);
}