UserListTile.dart 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_habit/common/I18N.dart';
  3. import 'package:flutter_habit/provider/UserProvider.dart';
  4. import 'package:flutter_habit/network/Repository.dart';
  5. import 'package:provider/provider.dart';
  6. class UserListTile extends StatefulWidget {
  7. final int? uid;
  8. final Widget? trailing;
  9. final Function? onPress;
  10. UserListTile({required this.uid, this.onPress, this.trailing});
  11. @override
  12. _UserListTileState createState() => _UserListTileState();
  13. }
  14. class _UserListTileState extends State<UserListTile> {
  15. List<int>? photo;
  16. Map? userInfo;
  17. int? coins;
  18. @override
  19. void initState() {
  20. super.initState();
  21. photo = null;
  22. userInfo = {};
  23. coins = -1;
  24. getData();
  25. }
  26. Future<void> getData() async {
  27. UserProvider userProvider =
  28. Provider.of<UserProvider>(context, listen: false);
  29. if (widget.uid == userProvider.uid) {
  30. userInfo!["userName"] = userProvider.userName;
  31. photo = userProvider.photo;
  32. coins = userProvider.coins;
  33. } else {
  34. userInfo = await Repository.getInstance()!.getUserInfo(widget.uid);
  35. setState(() {});
  36. coins = await Repository.getInstance()!.getCoin(widget.uid);
  37. setState(() {});
  38. photo = await Repository.getInstance()!.getPhoto(widget.uid);
  39. }
  40. setState(() {});
  41. }
  42. @override
  43. Widget build(BuildContext context) {
  44. double previewSize = 50;
  45. return ListTile(
  46. leading: photo == null || photo!.isEmpty
  47. ? Icon(
  48. Icons.account_circle,
  49. size: previewSize,
  50. color: Theme.of(context).unselectedWidgetColor,
  51. )
  52. : ClipOval(
  53. child: Image.memory(
  54. photo as Uint8List,
  55. width: previewSize,
  56. height: previewSize,
  57. ),
  58. ),
  59. title: userInfo == null
  60. ? Text(I18N.of("用户名"))
  61. : Text(
  62. userInfo!["userName"].toString(),
  63. style: widget.uid !=
  64. Provider.of<UserProvider>(context, listen: false).uid ? null : TextStyle(
  65. decoration: TextDecoration.underline,
  66. color: Theme.of(context).colorScheme.secondary,
  67. ),
  68. ),
  69. subtitle: Text("${I18N.of("金币")} : ${coins.toString()}"),
  70. trailing: widget.trailing ?? Icon(Icons.info_outline),
  71. onTap: Provider.of<UserProvider>(context, listen: false).token == null ? null: widget.onPress as void Function()?,
  72. );
  73. }
  74. }