mirror of
https://github.com/Iconica-Development/flutter_login_widget.git
synced 2025-05-19 05:33:45 +02:00
refactor
This commit is contained in:
parent
dab2b7fb6e
commit
f0be8a8c79
5 changed files with 122 additions and 115 deletions
|
@ -8,8 +8,18 @@ abstract class LoginRepository {
|
|||
String loginError = '';
|
||||
String getLoginError() => loginError;
|
||||
Future<bool> login(String username, String password);
|
||||
Future<LoginUser?> signInWithSocial(SocialLoginBundle bundle);
|
||||
Future sendLoginEmail(String input);
|
||||
|
||||
Future<bool> forgotPassword(String email);
|
||||
Future<bool> isRegistrationRequired(LoginUser user);
|
||||
Future<void> reLogin({required VoidCallback onLoggedIn});
|
||||
}
|
||||
|
||||
abstract class LoginRespositoryWithAnonymous extends LoginRepository {
|
||||
Future<LoginUser?> signInAnonymous();
|
||||
}
|
||||
|
||||
abstract class LoginRespositoryWithPhoneNumber extends LoginRepository {
|
||||
Future<void> trySignInWithPhoneNumber({
|
||||
required String phoneNumber,
|
||||
void Function(
|
||||
|
@ -27,8 +37,8 @@ abstract class LoginRepository {
|
|||
String phoneNumber, {
|
||||
LoginConfirmationResult? resultWeb,
|
||||
});
|
||||
Future<bool> forgotPassword(String email);
|
||||
Future<bool> isRegistrationRequired(LoginUser user);
|
||||
Future<void> reLogin({required VoidCallback onLoggedIn});
|
||||
Future<LoginUser?> signInAnonymous();
|
||||
}
|
||||
|
||||
abstract class LoginRepositoryWithSocial extends LoginRepository {
|
||||
Future<LoginUser?> signInWithSocial(SocialLoginBundle bundle);
|
||||
}
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_login/flutter_login_view.dart';
|
||||
import '../../extensions/widget.dart';
|
||||
|
||||
import 'resend.dart';
|
||||
|
||||
class LoginAwaitEmailScreen extends StatefulWidget {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_login/backend/login_repository.dart';
|
||||
import 'package:flutter_login/flutter_login_view.dart';
|
||||
import 'package:intl_phone_number_input/intl_phone_number_input.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
@ -30,6 +31,10 @@ class LoginPhoneNumberState extends State<LoginPhoneNumber>
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var config = FlutterLogin.of(context).config;
|
||||
var repository =
|
||||
context.loginRepository() as LoginRespositoryWithPhoneNumber;
|
||||
|
||||
return Material(
|
||||
child: Scaffold(
|
||||
backgroundColor: Theme.of(context).backgroundColor,
|
||||
|
@ -99,68 +104,61 @@ class LoginPhoneNumberState extends State<LoginPhoneNumber>
|
|||
],
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 10),
|
||||
child: context
|
||||
.login()
|
||||
.config
|
||||
.appTheme
|
||||
.buttons
|
||||
.primaryButton(
|
||||
context: context,
|
||||
isLoading: _loading,
|
||||
isDisabled: _loading,
|
||||
child: Text(
|
||||
context.translate(
|
||||
'login_phone_number.button.submit',
|
||||
),
|
||||
style: Theme.of(context).textTheme.button,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
onPressed: () {
|
||||
if (phoneNumber != null) {
|
||||
setState(() {
|
||||
errorMsg = null;
|
||||
_loading = true;
|
||||
});
|
||||
context
|
||||
.loginRepository()
|
||||
.trySignInWithPhoneNumber(
|
||||
phoneNumber: phoneNumber!,
|
||||
onCodeSent: (
|
||||
verificationId,
|
||||
resendToken,
|
||||
resultWeb,
|
||||
) =>
|
||||
navigateFadeTo(
|
||||
context,
|
||||
(ctx) => LoginPhoneNumberVerify(
|
||||
resultWeb: resultWeb,
|
||||
verificationId: verificationId,
|
||||
phoneNumber: phoneNumber!,
|
||||
onLogin: _onLoggedIn,
|
||||
),
|
||||
),
|
||||
onAutoLogin: (_) => _onLoggedIn,
|
||||
onVerificationFailed: (String errorCode) {
|
||||
if (errorCode == 'invalid-phone-number') {
|
||||
setState(() {
|
||||
errorMsg = context.translate(
|
||||
'login_phone_number.text.error.invalid_phone_number',
|
||||
);
|
||||
_loading = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
errorMsg = context.translate(
|
||||
'login_phone_number.text.error.verification_failed',
|
||||
);
|
||||
_loading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
child: config.appTheme.buttons.primaryButton(
|
||||
context: context,
|
||||
isLoading: _loading,
|
||||
isDisabled: _loading,
|
||||
child: Text(
|
||||
context.translate(
|
||||
'login_phone_number.button.submit',
|
||||
),
|
||||
style: Theme.of(context).textTheme.button,
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
onPressed: () {
|
||||
if (phoneNumber != null) {
|
||||
setState(() {
|
||||
errorMsg = null;
|
||||
_loading = true;
|
||||
});
|
||||
repository.trySignInWithPhoneNumber(
|
||||
phoneNumber: phoneNumber!,
|
||||
onCodeSent: (
|
||||
verificationId,
|
||||
resendToken,
|
||||
resultWeb,
|
||||
) =>
|
||||
navigateFadeTo(
|
||||
context,
|
||||
(ctx) => LoginPhoneNumberVerify(
|
||||
resultWeb: resultWeb,
|
||||
verificationId: verificationId,
|
||||
phoneNumber: phoneNumber!,
|
||||
onLogin: _onLoggedIn,
|
||||
),
|
||||
),
|
||||
onAutoLogin: (_) => _onLoggedIn,
|
||||
onVerificationFailed: (String errorCode) {
|
||||
if (errorCode == 'invalid-phone-number') {
|
||||
setState(() {
|
||||
errorMsg = context.translate(
|
||||
'login_phone_number.text.error.invalid_phone_number',
|
||||
);
|
||||
_loading = false;
|
||||
});
|
||||
} else {
|
||||
setState(() {
|
||||
errorMsg = context.translate(
|
||||
'login_phone_number.text.error.verification_failed',
|
||||
);
|
||||
_loading = false;
|
||||
});
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_login/flutter_login_view.dart';
|
||||
import 'package:pinput/pinput.dart';
|
||||
import '../../backend/login_repository.dart';
|
||||
import '../../extensions/widget.dart';
|
||||
|
||||
class LoginPhoneNumberVerify extends StatefulWidget {
|
||||
|
@ -35,6 +36,10 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var config = FlutterLogin.of(context).config;
|
||||
var repository =
|
||||
context.loginRepository() as LoginRespositoryWithPhoneNumber;
|
||||
|
||||
return Material(
|
||||
child: Scaffold(
|
||||
backgroundColor: Theme.of(context).backgroundColor,
|
||||
|
@ -48,9 +53,9 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
|
|||
top: 10,
|
||||
left: 5,
|
||||
),
|
||||
child: context.login().config.appTheme.buttons.backButton(
|
||||
context: context,
|
||||
),
|
||||
child: config.appTheme.buttons.backButton(
|
||||
context: context,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(top: 40),
|
||||
|
@ -81,13 +86,12 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
|
|||
errorMsg = false;
|
||||
}),
|
||||
onCompleted: (String code) async {
|
||||
var user =
|
||||
await context.loginRepository().signInWithSMSCode(
|
||||
widget.verificationId,
|
||||
code,
|
||||
widget.phoneNumber,
|
||||
resultWeb: widget.resultWeb,
|
||||
);
|
||||
var user = await repository.signInWithSMSCode(
|
||||
widget.verificationId,
|
||||
code,
|
||||
widget.phoneNumber,
|
||||
resultWeb: widget.resultWeb,
|
||||
);
|
||||
if (user != null) {
|
||||
widget.onLogin.call(user);
|
||||
} else {
|
||||
|
@ -129,43 +133,39 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
|
|||
style: Theme.of(context).textTheme.bodyText1,
|
||||
),
|
||||
),
|
||||
context.login().config.appTheme.buttons.tertiaryButton(
|
||||
context: context,
|
||||
child: Text(
|
||||
context.translate(
|
||||
'login_phone_number_verify.button.send_again',
|
||||
),
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
),
|
||||
onPressed: () {
|
||||
context
|
||||
.loginRepository()
|
||||
.trySignInWithPhoneNumber(
|
||||
phoneNumber: widget.phoneNumber,
|
||||
onCodeSent: (
|
||||
verificationId,
|
||||
resendToken,
|
||||
resultWeb,
|
||||
) {
|
||||
this.verificationId = verificationId;
|
||||
this.resultWeb = resultWeb;
|
||||
pinPutController.clear();
|
||||
ScaffoldMessenger.of(context)
|
||||
.showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
context.translate(
|
||||
'login_phone_verify.text.send_again',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
onAutoLogin: (user) =>
|
||||
widget.onLogin.call(user),
|
||||
);
|
||||
},
|
||||
config.appTheme.buttons.tertiaryButton(
|
||||
context: context,
|
||||
child: Text(
|
||||
context.translate(
|
||||
'login_phone_number_verify.button.send_again',
|
||||
),
|
||||
style: Theme.of(context).textTheme.bodyText1,
|
||||
),
|
||||
onPressed: () {
|
||||
repository.trySignInWithPhoneNumber(
|
||||
phoneNumber: widget.phoneNumber,
|
||||
onCodeSent: (
|
||||
verificationId,
|
||||
resendToken,
|
||||
resultWeb,
|
||||
) {
|
||||
this.verificationId = verificationId;
|
||||
this.resultWeb = resultWeb;
|
||||
pinPutController.clear();
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
context.translate(
|
||||
'login_phone_verify.text.send_again',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
onAutoLogin: (user) => widget.onLogin.call(user),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_login/backend/login_repository.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
import '../../flutter_login_view.dart';
|
||||
|
||||
|
@ -15,7 +16,7 @@ class LoginSocialButtons extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var config = FlutterLogin.of(context).config;
|
||||
var repository = context.loginRepository();
|
||||
var repository = context.loginRepository() as LoginRepositoryWithSocial;
|
||||
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
|
|
Loading…
Reference in a new issue