This commit is contained in:
Stein Milder 2022-09-21 16:11:23 +02:00
parent dab2b7fb6e
commit f0be8a8c79
5 changed files with 122 additions and 115 deletions

View file

@ -8,8 +8,18 @@ abstract class LoginRepository {
String loginError = ''; String loginError = '';
String getLoginError() => loginError; String getLoginError() => loginError;
Future<bool> login(String username, String password); Future<bool> login(String username, String password);
Future<LoginUser?> signInWithSocial(SocialLoginBundle bundle);
Future sendLoginEmail(String input); 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({ Future<void> trySignInWithPhoneNumber({
required String phoneNumber, required String phoneNumber,
void Function( void Function(
@ -27,8 +37,8 @@ abstract class LoginRepository {
String phoneNumber, { String phoneNumber, {
LoginConfirmationResult? resultWeb, LoginConfirmationResult? resultWeb,
}); });
Future<bool> forgotPassword(String email); }
Future<bool> isRegistrationRequired(LoginUser user);
Future<void> reLogin({required VoidCallback onLoggedIn}); abstract class LoginRepositoryWithSocial extends LoginRepository {
Future<LoginUser?> signInAnonymous(); Future<LoginUser?> signInWithSocial(SocialLoginBundle bundle);
} }

View file

@ -1,8 +1,6 @@
import 'dart:async';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login_view.dart'; import 'package:flutter_login/flutter_login_view.dart';
import '../../extensions/widget.dart'; import '../../extensions/widget.dart';
import 'resend.dart'; import 'resend.dart';
class LoginAwaitEmailScreen extends StatefulWidget { class LoginAwaitEmailScreen extends StatefulWidget {

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_login/backend/login_repository.dart';
import 'package:flutter_login/flutter_login_view.dart'; import 'package:flutter_login/flutter_login_view.dart';
import 'package:intl_phone_number_input/intl_phone_number_input.dart'; import 'package:intl_phone_number_input/intl_phone_number_input.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -30,6 +31,10 @@ class LoginPhoneNumberState extends State<LoginPhoneNumber>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var config = FlutterLogin.of(context).config;
var repository =
context.loginRepository() as LoginRespositoryWithPhoneNumber;
return Material( return Material(
child: Scaffold( child: Scaffold(
backgroundColor: Theme.of(context).backgroundColor, backgroundColor: Theme.of(context).backgroundColor,
@ -99,12 +104,7 @@ class LoginPhoneNumberState extends State<LoginPhoneNumber>
], ],
Padding( Padding(
padding: const EdgeInsets.only(top: 10), padding: const EdgeInsets.only(top: 10),
child: context child: config.appTheme.buttons.primaryButton(
.login()
.config
.appTheme
.buttons
.primaryButton(
context: context, context: context,
isLoading: _loading, isLoading: _loading,
isDisabled: _loading, isDisabled: _loading,
@ -121,9 +121,7 @@ class LoginPhoneNumberState extends State<LoginPhoneNumber>
errorMsg = null; errorMsg = null;
_loading = true; _loading = true;
}); });
context repository.trySignInWithPhoneNumber(
.loginRepository()
.trySignInWithPhoneNumber(
phoneNumber: phoneNumber!, phoneNumber: phoneNumber!,
onCodeSent: ( onCodeSent: (
verificationId, verificationId,

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login_view.dart'; import 'package:flutter_login/flutter_login_view.dart';
import 'package:pinput/pinput.dart'; import 'package:pinput/pinput.dart';
import '../../backend/login_repository.dart';
import '../../extensions/widget.dart'; import '../../extensions/widget.dart';
class LoginPhoneNumberVerify extends StatefulWidget { class LoginPhoneNumberVerify extends StatefulWidget {
@ -35,6 +36,10 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var config = FlutterLogin.of(context).config;
var repository =
context.loginRepository() as LoginRespositoryWithPhoneNumber;
return Material( return Material(
child: Scaffold( child: Scaffold(
backgroundColor: Theme.of(context).backgroundColor, backgroundColor: Theme.of(context).backgroundColor,
@ -48,7 +53,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
top: 10, top: 10,
left: 5, left: 5,
), ),
child: context.login().config.appTheme.buttons.backButton( child: config.appTheme.buttons.backButton(
context: context, context: context,
), ),
), ),
@ -81,8 +86,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
errorMsg = false; errorMsg = false;
}), }),
onCompleted: (String code) async { onCompleted: (String code) async {
var user = var user = await repository.signInWithSMSCode(
await context.loginRepository().signInWithSMSCode(
widget.verificationId, widget.verificationId,
code, code,
widget.phoneNumber, widget.phoneNumber,
@ -129,7 +133,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
style: Theme.of(context).textTheme.bodyText1, style: Theme.of(context).textTheme.bodyText1,
), ),
), ),
context.login().config.appTheme.buttons.tertiaryButton( config.appTheme.buttons.tertiaryButton(
context: context, context: context,
child: Text( child: Text(
context.translate( context.translate(
@ -138,9 +142,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
style: Theme.of(context).textTheme.bodyText1, style: Theme.of(context).textTheme.bodyText1,
), ),
onPressed: () { onPressed: () {
context repository.trySignInWithPhoneNumber(
.loginRepository()
.trySignInWithPhoneNumber(
phoneNumber: widget.phoneNumber, phoneNumber: widget.phoneNumber,
onCodeSent: ( onCodeSent: (
verificationId, verificationId,
@ -150,8 +152,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
this.verificationId = verificationId; this.verificationId = verificationId;
this.resultWeb = resultWeb; this.resultWeb = resultWeb;
pinPutController.clear(); pinPutController.clear();
ScaffoldMessenger.of(context) ScaffoldMessenger.of(context).showSnackBar(
.showSnackBar(
SnackBar( SnackBar(
content: Text( content: Text(
context.translate( context.translate(
@ -161,8 +162,7 @@ class LoginPhoneNumberVerifyState extends State<LoginPhoneNumberVerify>
), ),
); );
}, },
onAutoLogin: (user) => onAutoLogin: (user) => widget.onLogin.call(user),
widget.onLogin.call(user),
); );
}, },
), ),

View file

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_login/backend/login_repository.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import '../../flutter_login_view.dart'; import '../../flutter_login_view.dart';
@ -15,7 +16,7 @@ class LoginSocialButtons extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var config = FlutterLogin.of(context).config; var config = FlutterLogin.of(context).config;
var repository = context.loginRepository(); var repository = context.loginRepository() as LoginRepositoryWithSocial;
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,