RankingListPage.dart 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/I18N.dart';
  3. import 'package:flutter_habit/common/components/PopMenus.dart';
  4. import 'package:flutter_habit/common/components/UserListTile.dart';
  5. import 'package:flutter_habit/provider/UserProvider.dart';
  6. import 'package:flutter_habit/network/Repository.dart';
  7. import 'package:provider/provider.dart';
  8. class RankingListPage extends StatefulWidget {
  9. @override
  10. _RankingListPageState createState() => _RankingListPageState();
  11. }
  12. class _RankingListPageState extends State<RankingListPage> {
  13. late bool isRequesting;
  14. List? data;
  15. @override
  16. void initState() {
  17. super.initState();
  18. isRequesting = true;
  19. data = [];
  20. getData();
  21. }
  22. Future<void> getData() async {
  23. data = await Repository.getInstance()!.getCoinTop(context, 20);
  24. UserProvider userProvider = Provider.of<UserProvider>(context, listen: false);
  25. if (userProvider.uid != null && !data!.contains(userProvider.uid)) {
  26. data!.add(userProvider.uid);
  27. }
  28. int rank = 0;
  29. data = data!.map((i) {
  30. rank++;
  31. if (rank == 21) {
  32. return {
  33. "uid": i,
  34. "rank": I18N.of("未入榜"),
  35. };
  36. }
  37. return {
  38. "uid": i,
  39. "rank": rank,
  40. };
  41. }).toList();
  42. isRequesting = false;
  43. setState(() {});
  44. }
  45. @override
  46. Widget build(BuildContext context) {
  47. return Scaffold(
  48. appBar: AppBar(
  49. title: Text(I18N.of("排行榜")),
  50. ),
  51. body: Padding(
  52. padding: EdgeInsets.all(16),
  53. child: ListView(
  54. children: <Widget>[
  55. isRequesting ? LinearProgressIndicator() : Container(),
  56. Column(
  57. children: data!.map((i) {
  58. return UserListTile(
  59. uid: i["uid"],
  60. trailing: Text("${I18N.of("排名")}: ${i["rank"].toString()}"),
  61. onPress: () async {
  62. await PopMenus.userInfo(context: context, uid: i["uid"]);
  63. },
  64. );
  65. }).toList(),
  66. ),
  67. ],
  68. ),
  69. ),
  70. );
  71. }
  72. }