From b8dcc9414d697435cd164927dbfdf4039d4111f0 Mon Sep 17 00:00:00 2001 From: appflowy <annie@appflowy.io> Date: Mon, 8 Nov 2021 14:11:10 +0800 Subject: [PATCH] [flutter]: config skip screen ui --- .../lib/user/application/sign_in_bloc.dart | 6 +- app_flowy/lib/user/domain/i_auth.dart | 6 +- app_flowy/lib/user/domain/i_splash.dart | 5 +- .../lib/user/infrastructure/i_auth_impl.dart | 6 +- .../user/infrastructure/i_splash_impl.dart | 15 ++- .../lib/user/presentation/sign_in_screen.dart | 2 +- .../lib/user/presentation/sign_up_screen.dart | 2 +- .../user/presentation/skip_log_in_screen.dart | 115 +++++++----------- .../lib/user/presentation/splash_screen.dart | 4 +- .../user/presentation/widgets/background.dart | 8 +- 10 files changed, 78 insertions(+), 91 deletions(-) diff --git a/app_flowy/lib/user/application/sign_in_bloc.dart b/app_flowy/lib/user/application/sign_in_bloc.dart index 59139fb1ef..73bdbeb2ff 100644 --- a/app_flowy/lib/user/application/sign_in_bloc.dart +++ b/app_flowy/lib/user/application/sign_in_bloc.dart @@ -8,8 +8,8 @@ import 'package:flutter_bloc/flutter_bloc.dart'; part 'sign_in_bloc.freezed.dart'; class SignInBloc extends Bloc<SignInEvent, SignInState> { - final IAuth authImpl; - SignInBloc(this.authImpl) : super(SignInState.initial()); + final IAuth authManager; + SignInBloc(this.authManager) : super(SignInState.initial()); @override Stream<SignInState> mapEventToState( @@ -33,7 +33,7 @@ class SignInBloc extends Bloc<SignInEvent, SignInState> { Stream<SignInState> _performActionOnSignIn(SignInState state) async* { yield state.copyWith(isSubmitting: true, emailError: none(), passwordError: none(), successOrFail: none()); - final result = await authImpl.signIn(state.email, state.password); + final result = await authManager.signIn(state.email, state.password); yield result.fold( (userProfile) => state.copyWith(isSubmitting: false, successOrFail: some(left(userProfile))), (error) => stateFromCode(error), diff --git a/app_flowy/lib/user/domain/i_auth.dart b/app_flowy/lib/user/domain/i_auth.dart index d85d8ade44..4357491e27 100644 --- a/app_flowy/lib/user/domain/i_auth.dart +++ b/app_flowy/lib/user/domain/i_auth.dart @@ -3,10 +3,8 @@ import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; abstract class IAuth { - Future<Either<UserProfile, UserError>> signIn( - String? email, String? password); - Future<Either<UserProfile, UserError>> signUp( - String? name, String? password, String? email); + Future<Either<UserProfile, UserError>> signIn(String? email, String? password); + Future<Either<UserProfile, UserError>> signUp(String? name, String? password, String? email); Future<Either<Unit, UserError>> signOut(); } diff --git a/app_flowy/lib/user/domain/i_splash.dart b/app_flowy/lib/user/domain/i_splash.dart index c4bb8f2973..1488af8d04 100644 --- a/app_flowy/lib/user/domain/i_splash.dart +++ b/app_flowy/lib/user/domain/i_splash.dart @@ -17,7 +17,8 @@ abstract class ISplashUserWatch { abstract class ISplashRoute { void pushSignInScreen(BuildContext context); + void pushSkipLoginScreen(BuildContext context); + Future<void> pushWelcomeScreen(BuildContext context, UserProfile profile); - void pushHomeScreen( - BuildContext context, UserProfile profile, String workspaceId); + void pushHomeScreen(BuildContext context, UserProfile profile, String workspaceId); } diff --git a/app_flowy/lib/user/infrastructure/i_auth_impl.dart b/app_flowy/lib/user/infrastructure/i_auth_impl.dart index 4d82c3c88f..5d60ffe387 100644 --- a/app_flowy/lib/user/infrastructure/i_auth_impl.dart +++ b/app_flowy/lib/user/infrastructure/i_auth_impl.dart @@ -15,14 +15,12 @@ class AuthImpl extends IAuth { }); @override - Future<Either<UserProfile, UserError>> signIn( - String? email, String? password) { + Future<Either<UserProfile, UserError>> signIn(String? email, String? password) { return repo.signIn(email: email, password: password); } @override - Future<Either<UserProfile, UserError>> signUp( - String? name, String? password, String? email) { + Future<Either<UserProfile, UserError>> signUp(String? name, String? password, String? email) { return repo.signUp(name: name, password: password, email: email); } diff --git a/app_flowy/lib/user/infrastructure/i_splash_impl.dart b/app_flowy/lib/user/infrastructure/i_splash_impl.dart index 16f498c2e3..4c6e93076e 100644 --- a/app_flowy/lib/user/infrastructure/i_splash_impl.dart +++ b/app_flowy/lib/user/infrastructure/i_splash_impl.dart @@ -58,7 +58,20 @@ class SplashRoute implements ISplashRoute { void pushSignInScreen(BuildContext context) { Navigator.push( context, - PageRoutes.fade(() => SkipLogInScreen(router: getIt<IAuthRouter>()), RouteDurations.slow.inMilliseconds * .001), + PageRoutes.fade(() => SignInScreen(router: getIt<IAuthRouter>()), RouteDurations.slow.inMilliseconds * .001), + ); + } + + @override + void pushSkipLoginScreen(BuildContext context) { + Navigator.push( + context, + PageRoutes.fade( + () => SkipLogInScreen( + router: getIt<IAuthRouter>(), + authManager: getIt<IAuth>(), + ), + RouteDurations.slow.inMilliseconds * .001), ); } } diff --git a/app_flowy/lib/user/presentation/sign_in_screen.dart b/app_flowy/lib/user/presentation/sign_in_screen.dart index ff88a477ed..18c04130af 100644 --- a/app_flowy/lib/user/presentation/sign_in_screen.dart +++ b/app_flowy/lib/user/presentation/sign_in_screen.dart @@ -58,7 +58,7 @@ class SignInForm extends StatelessWidget { alignment: Alignment.center, child: AuthFormContainer( children: [ - const AuthFormTitle( + const FlowyLogoTitle( title: 'Login to Appflowy', logoSize: Size(60, 60), ), diff --git a/app_flowy/lib/user/presentation/sign_up_screen.dart b/app_flowy/lib/user/presentation/sign_up_screen.dart index 0461abd695..e65e8daac3 100644 --- a/app_flowy/lib/user/presentation/sign_up_screen.dart +++ b/app_flowy/lib/user/presentation/sign_up_screen.dart @@ -53,7 +53,7 @@ class SignUpForm extends StatelessWidget { alignment: Alignment.center, child: AuthFormContainer( children: [ - const AuthFormTitle( + const FlowyLogoTitle( title: 'Sign Up to Appflowy', logoSize: Size(60, 60), ), diff --git a/app_flowy/lib/user/presentation/skip_log_in_screen.dart b/app_flowy/lib/user/presentation/skip_log_in_screen.dart index e28c725d30..1525a4ae68 100644 --- a/app_flowy/lib/user/presentation/skip_log_in_screen.dart +++ b/app_flowy/lib/user/presentation/skip_log_in_screen.dart @@ -1,47 +1,22 @@ -// ignore_for_file: prefer_const_constructors - -import 'package:app_flowy/startup/startup.dart'; -import 'package:app_flowy/user/application/sign_in_bloc.dart'; import 'package:app_flowy/user/domain/i_auth.dart'; import 'package:app_flowy/user/presentation/widgets/background.dart'; import 'package:flowy_infra/size.dart'; import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/widget/rounded_button.dart'; import 'package:flowy_infra_ui/widget/spacing.dart'; -import 'package:flowy_infra_ui/style_widget/snap_bar.dart'; -import 'package:flowy_sdk/protobuf/flowy-user/errors.pb.dart'; -import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:dartz/dartz.dart'; import 'package:url_launcher/url_launcher.dart'; class SkipLogInScreen extends StatelessWidget { final IAuthRouter router; - const SkipLogInScreen({Key? key, required this.router}) : super(key: key); + final IAuth authManager; + const SkipLogInScreen({Key? key, required this.router, required this.authManager}) : super(key: key); @override Widget build(BuildContext context) { - return BlocProvider( - create: (context) => getIt<SignInBloc>(), - child: BlocListener<SignInBloc, SignInState>( - listener: (context, state) { - state.successOrFail.fold( - () => null, - (result) => _handleSuccessOrFail(result, context), - ); - }, - child: Scaffold( - body: SignInForm(router: router), - ), - ), - ); - } - - void _handleSuccessOrFail(Either<UserProfile, UserError> result, BuildContext context) { - result.fold( - (user) => router.pushWelcomeScreen(context, user), - (error) => showSnapBar(context, error.msg), + return Scaffold( + body: SignInForm(router: router), ); } } @@ -57,45 +32,43 @@ class SignInForm extends StatelessWidget { Widget build(BuildContext context) { return Center( child: SizedBox( - width: 600, + width: 400, height: 600, - child: Expanded( - child: Column( - // ignore: prefer_const_literals_to_create_immutables - children: [ - const AuthFormTitle( - title: 'Welcome to AppFlowy', - logoSize: Size(60, 60), - ), - const VSpace(80), - const GoButton(), - const VSpace(30), - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - // ignore: prefer_const_constructors - InkWell( - child: Text( - 'Star on Github', - style: TextStyle(decoration: TextDecoration.underline, color: Colors.blue), - ), - onTap: () { - _launchURL('https://github.com/AppFlowy-IO/appflowy'); - }, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const FlowyLogoTitle( + title: 'Welcome to AppFlowy', + logoSize: Size.square(60), + ), + const VSpace(80), + GoButton(onPressed: _autoRegister), + const VSpace(30), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + InkWell( + child: const Text( + 'Star on Github', + style: TextStyle(decoration: TextDecoration.underline, color: Colors.blue), ), - HSpace(60), - InkWell( - child: Text( - 'Subscribe to Newsletter', - style: TextStyle(decoration: TextDecoration.underline, color: Colors.blue), - ), - onTap: () { - _launchURL('https://www.appflowy.io/blog'); - }), - ], - ) - ], - ), + onTap: () { + _launchURL('https://github.com/AppFlowy-IO/appflowy'); + }, + ), + const Spacer(), + InkWell( + child: const Text( + 'Subscribe to Newsletter', + style: TextStyle(decoration: TextDecoration.underline, color: Colors.blue), + ), + onTap: () { + _launchURL('https://www.appflowy.io/blog'); + }, + ), + ], + ) + ], ), ), ); @@ -108,11 +81,15 @@ class SignInForm extends StatelessWidget { throw 'Could not launch $url'; } } + + void _autoRegister() {} } class GoButton extends StatelessWidget { + final VoidCallback onPressed; const GoButton({ Key? key, + required this.onPressed, }) : super(key: key); @override @@ -120,12 +97,10 @@ class GoButton extends StatelessWidget { final theme = context.watch<AppTheme>(); return RoundedTextButton( title: 'Let\'s Go', - height: 60, + height: 50, borderRadius: Corners.s10Border, color: theme.main1, - onPressed: () { - //to do: direct to the workspace - }, + onPressed: onPressed, ); } } diff --git a/app_flowy/lib/user/presentation/splash_screen.dart b/app_flowy/lib/user/presentation/splash_screen.dart index a5a74e177b..5b9baee5bf 100644 --- a/app_flowy/lib/user/presentation/splash_screen.dart +++ b/app_flowy/lib/user/presentation/splash_screen.dart @@ -59,7 +59,9 @@ class SplashScreen extends StatelessWidget { void _handleUnauthenticated(BuildContext context, Unauthenticated result) { Log.error(result.error); - getIt<ISplashRoute>().pushSignInScreen(context); + // getIt<ISplashRoute>().pushSignInScreen(context); + + getIt<ISplashRoute>().pushSkipLoginScreen(context); } } diff --git a/app_flowy/lib/user/presentation/widgets/background.dart b/app_flowy/lib/user/presentation/widgets/background.dart index cfac6ac667..30c92be256 100644 --- a/app_flowy/lib/user/presentation/widgets/background.dart +++ b/app_flowy/lib/user/presentation/widgets/background.dart @@ -26,13 +26,13 @@ class AuthFormContainer extends StatelessWidget { } } -class AuthFormTitle extends StatelessWidget { +class FlowyLogoTitle extends StatelessWidget { final String title; final Size logoSize; - const AuthFormTitle({ + const FlowyLogoTitle({ Key? key, required this.title, - required this.logoSize, + this.logoSize = const Size.square(40), }) : super(key: key); @override @@ -43,7 +43,7 @@ class AuthFormTitle extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox.fromSize( - size: const Size.square(40), + size: logoSize, child: svg("flowy_logo"), ), const VSpace(30),