85 lines
2.3 KiB
Dart
85 lines
2.3 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../../../core/data/services/auth_controller.dart';
|
|
import '../../../core/theme/app_colors.dart';
|
|
import '../../../l10n/app_localizations.dart';
|
|
|
|
/// 「我的」页顶部身份区,只保留头像、昵称和账号提示。
|
|
class MineHeader extends StatelessWidget {
|
|
const MineHeader({super.key});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final l10n = AppLocalizations.of(context)!;
|
|
final auth = context.watch<AuthController>();
|
|
final user = auth.user;
|
|
final signedIn = auth.isSignedIn;
|
|
final name = signedIn && (user?.nickname.isNotEmpty ?? false)
|
|
? user!.nickname
|
|
: l10n.localViewer;
|
|
final subtitle = signedIn && (user?.uid.isNotEmpty ?? false)
|
|
? 'ID: ${user!.uid}'
|
|
: l10n.logInHint;
|
|
return Padding(
|
|
key: const Key('mine-user-row'),
|
|
padding: const EdgeInsets.fromLTRB(14, 14, 14, 6),
|
|
child: Row(
|
|
children: [
|
|
_avatar(),
|
|
const SizedBox(width: 10),
|
|
Expanded(child: _labels(name, subtitle)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _avatar() {
|
|
return Container(
|
|
key: const Key('mine-avatar'),
|
|
width: 48,
|
|
height: 48,
|
|
decoration: const BoxDecoration(
|
|
shape: BoxShape.circle,
|
|
gradient: LinearGradient(
|
|
begin: Alignment.topLeft,
|
|
end: Alignment.bottomRight,
|
|
colors: [Color(0xFF6A5CFF), AppColors.blue],
|
|
),
|
|
),
|
|
child: const Icon(
|
|
Icons.person_rounded,
|
|
color: AppColors.onSurface,
|
|
size: 22,
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _labels(String name, String subtitle) {
|
|
return Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
name,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
style: const TextStyle(
|
|
color: AppColors.onSurface,
|
|
fontSize: 15,
|
|
fontWeight: FontWeight.w800,
|
|
),
|
|
),
|
|
const SizedBox(height: 2),
|
|
Text(
|
|
subtitle,
|
|
maxLines: 1,
|
|
overflow: TextOverflow.ellipsis,
|
|
style: const TextStyle(color: Color(0xFFBBBBBB), fontSize: 10),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
}
|