Files
sendico/frontend/pweb/lib/pages/verification/page.dart
2026-01-29 19:22:30 +03:00

83 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:pshared/provider/email_verification.dart';
import 'package:pshared/widgets/locale.dart';
import 'package:pweb/app/router/pages.dart';
import 'package:pweb/pages/errors/error.dart';
import 'package:pweb/pages/status/success.dart';
import 'package:pweb/pages/with_footer.dart';
import 'package:pweb/generated/i18n/app_localizations.dart';
class AccountVerificationPage extends StatefulWidget {
final String token;
const AccountVerificationPage({super.key, required this.token});
@override
State<AccountVerificationPage> createState() => _AccountVerificationPageState();
}
class _AccountVerificationPageState extends State<AccountVerificationPage> {
@override
void initState() {
super.initState();
context.read<EmailVerificationProvider>().verify(widget.token);
}
@override
Widget build(BuildContext context) {
return const _AccountVerificationContent();
}
}
class _AccountVerificationContent extends StatelessWidget {
const _AccountVerificationContent();
@override
Widget build(BuildContext context) {
final locs = AppLocalizations.of(context)!;
final provider = context.watch<EmailVerificationProvider>();
final action = OutlinedButton.icon(
onPressed: () => navigateAndReplace(context, Pages.login),
icon: const Icon(Icons.login),
label: Text(locs.login),
);
Widget content;
if (provider.isLoading) {
content = const Center(child: CircularProgressIndicator());
} else if (provider.isSuccess) {
content = StatusPageSuccess(
successMessage: locs.accountVerified,
successDescription: locs.accountVerifiedDescription,
action: action,
);
} else {
content = exceptionToErrorPage(
context: context,
title: locs.verificationFailed,
errorMessage: locs.accountVerificationFailed,
exception: provider.error ?? Exception(locs.accountVerificationFailed),
);
}
return PageWithFooter(
appBar: AppBar(
title: Text(locs.verifyAccount),
centerTitle: true,
actions: [
const LocaleChangerDropdown(
availableLocales: AppLocalizations.supportedLocales,
),
],
),
child: content,
);
}
}