flutter_registration/lib/src/registration_screen.dart

86 lines
2.7 KiB
Dart
Raw Normal View History

import 'dart:collection';
2022-09-20 15:51:22 +02:00
import 'package:flutter/material.dart';
import 'package:flutter_registration/flutter_registration.dart';
import 'package:flutter_registration/src/auth_screen.dart';
2024-02-19 13:31:12 +01:00
/// A screen for user registration.
class RegistrationScreen extends StatefulWidget {
2024-02-19 13:31:12 +01:00
/// Constructs a [RegistrationScreen] object.
///
/// [registrationOptions] specifies the registration options.
2022-09-20 15:51:22 +02:00
const RegistrationScreen({
required this.registrationOptions,
Key? key,
}) : super(key: key);
2022-09-20 15:51:22 +02:00
2024-02-19 13:31:12 +01:00
/// The registration options.
final RegistrationOptions registrationOptions;
2022-09-20 15:51:22 +02:00
@override
RegistrationScreenState createState() => RegistrationScreenState();
}
2024-02-19 13:31:12 +01:00
/// The state for [RegistrationScreen].
class RegistrationScreenState extends State<RegistrationScreen> {
bool _isLoading = false;
2024-02-19 13:31:12 +01:00
/// Registers the user.
Future<void> _register({
required HashMap<String, dynamic> values,
2023-10-03 14:38:52 +02:00
required void Function(int? pageToReturn) onError,
}) async {
try {
setState(() {
_isLoading = true;
});
2024-04-19 10:14:08 +02:00
var registered = await widget.registrationOptions.registrationRepository!
.register(values);
if (registered == null) {
widget.registrationOptions.afterRegistration();
2023-09-19 11:16:43 +02:00
} else {
var pageToReturn = widget.registrationOptions.onError?.call(registered);
2023-10-03 14:38:52 +02:00
onError(pageToReturn);
}
} catch (e) {
2023-10-03 14:38:52 +02:00
onError(0);
} finally {
setState(() {
_isLoading = false;
});
}
}
2022-09-20 15:51:22 +02:00
@override
Widget build(BuildContext context) {
var translations = widget.registrationOptions.registrationTranslations;
2022-09-20 15:51:22 +02:00
return AuthScreen(
2024-04-19 10:14:08 +02:00
steps: widget.registrationOptions.steps,
customAppBar: widget.registrationOptions.customAppbarBuilder?.call(
2022-09-28 09:23:41 +02:00
translations.title,
),
onFinish: _register,
appBarTitle: translations.title,
submitBtnTitle: translations.registerBtn,
nextBtnTitle: translations.nextStepBtn,
previousBtnTitle: translations.previousStepBtn,
nextButtonBuilder: widget.registrationOptions.nextButtonBuilder,
previousButtonBuilder: widget.registrationOptions.previousButtonBuilder,
buttonMainAxisAlignment:
widget.registrationOptions.buttonMainAxisAlignment,
customBackgroundColor: widget.registrationOptions.backgroundColor,
titleWidget: widget.registrationOptions.titleWidget,
loginButton: widget.registrationOptions.loginButton,
isLoading: _isLoading,
titleFlex: widget.registrationOptions.titleFlex,
formFlex: widget.registrationOptions.formFlex,
beforeTitleFlex: widget.registrationOptions.beforeTitleFlex,
afterTitleFlex: widget.registrationOptions.afterTitleFlex,
2022-09-20 15:51:22 +02:00
);
}
}