import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../core/design/tokens.dart'; import '../../../core/di.dart'; import '../../../core/l10n/l10n.dart'; import '../../../core/ui/tripz_button.dart'; import '../../../core/ui/tripz_scaffold.dart'; import '../../../core/ui/tripz_text_field.dart'; import '../cubit/profile_cubit.dart'; import '../../../core/session/session_cubit.dart'; import 'widgets/auth_failure_text.dart'; import 'widgets/auth_header.dart'; class ProfilePage extends StatefulWidget { const ProfilePage({super.key}); @override State createState() => _ProfilePageState(); } class _ProfilePageState extends State { final _name = TextEditingController(); String? _error; @override void dispose() { _name.dispose(); super.dispose(); } @override Widget build(BuildContext context) { final l10n = context.l10n; return BlocProvider( create: (_) => ProfileCubit(sl()), child: BlocBuilder( builder: (context, state) { return TripzScaffold( showAppBar: false, bottomAction: TripzButton.primary( label: l10n.actionSave, loading: state.saving, onPressed: () => _submit(context), ), child: ListView( children: [ const SizedBox(height: Space.xl), AuthHeader( icon: Icons.person_outline_rounded, title: l10n.profileTitle, lead: l10n.profileLead, ), const SizedBox(height: Space.lg), TripzTextField( controller: _name, label: l10n.profileNameLabel, autofocus: true, enabled: !state.saving, errorText: _error, textInputAction: TextInputAction.done, autofillHints: const [AutofillHints.name], onChanged: (_) => setState(() => _error = null), onSubmitted: (_) => _submit(context), ), if (state.failure != null) AuthFailureText(failure: state.failure!), ], ), ); }, ), ); } Future _submit(BuildContext context) async { if (_name.text.trim().isEmpty) { setState(() => _error = context.l10n.profileNameErrEmpty); return; } final session = context.read(); final user = await context.read().save(_name.text); if (user != null) session.onProfileCompleted(user); } }