import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; /// 用户头像,支持网络图片 + 首字母 fallback。 class AvatarWidget extends StatelessWidget { const AvatarWidget({ super.key, this.url, this.name, this.size = 40, }); final String? url; final String? name; final double size; @override Widget build(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; final radius = size / 2; if (url != null && url!.isNotEmpty) { return CachedNetworkImage( imageUrl: url!, imageBuilder: (_, img) => CircleAvatar( radius: radius, backgroundImage: img, ), placeholder: (_, __) => _placeholder(context), errorWidget: (_, __, ___) => _placeholder(context), ); } return _placeholder(context); } Widget _placeholder(BuildContext context) { final colorScheme = Theme.of(context).colorScheme; final initial = (name?.isNotEmpty == true) ? name![0].toUpperCase() : '?'; return CircleAvatar( radius: size / 2, backgroundColor: colorScheme.primaryContainer, child: Text( initial, style: TextStyle( fontSize: size * 0.4, color: colorScheme.onPrimaryContainer, fontWeight: FontWeight.w600, ), ), ); } }