import 'package:flutter/material.dart'; import 'package:flutter_habit/common/I18N.dart'; import 'package:flutter_habit/provider/UserProvider.dart'; import 'package:flutter_habit/network/Repository.dart'; import 'package:provider/provider.dart'; class UserListTile extends StatefulWidget { final int? uid; final Widget? trailing; final Function? onPress; UserListTile({required this.uid, this.onPress, this.trailing}); @override _UserListTileState createState() => _UserListTileState(); } class _UserListTileState extends State { List? photo; Map? userInfo; int? coins; @override void initState() { super.initState(); photo = null; userInfo = {}; coins = -1; getData(); } Future getData() async { UserProvider userProvider = Provider.of(context, listen: false); if (widget.uid == userProvider.uid) { userInfo!["userName"] = userProvider.userName; photo = userProvider.photo; coins = userProvider.coins; } else { userInfo = await Repository.getInstance()!.getUserInfo(widget.uid); setState(() {}); coins = await Repository.getInstance()!.getCoin(widget.uid); setState(() {}); photo = await Repository.getInstance()!.getPhoto(widget.uid); } setState(() {}); } @override Widget build(BuildContext context) { double previewSize = 50; return ListTile( leading: photo == null || photo!.isEmpty ? Icon( Icons.account_circle, size: previewSize, color: Theme.of(context).unselectedWidgetColor, ) : ClipOval( child: Image.memory( photo as Uint8List, width: previewSize, height: previewSize, ), ), title: userInfo == null ? Text(I18N.of("用户名")) : Text( userInfo!["userName"].toString(), style: widget.uid != Provider.of(context, listen: false).uid ? null : TextStyle( decoration: TextDecoration.underline, color: Theme.of(context).colorScheme.secondary, ), ), subtitle: Text("${I18N.of("金币")} : ${coins.toString()}"), trailing: widget.trailing ?? Icon(Icons.info_outline), onTap: Provider.of(context, listen: false).token == null ? null: widget.onPress as void Function()?, ); } }