WT1.1.3 build 2 iOS. Apple SignIn, Google SignIn

This commit is contained in:
bossanyit
2021-01-17 09:30:57 +01:00
parent 4bd1950ffd
commit d44fefe9af
31 changed files with 811 additions and 249 deletions
+9 -7
View File
@@ -10,6 +10,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
// ignore: must_be_immutable
class CustomerExerciseDevicePage extends StatelessWidget with Trans {
@@ -37,19 +38,20 @@ class CustomerExerciseDevicePage extends StatelessWidget with Trans {
..add(CustomerExerciseDeviceLoad()),
child: BlocConsumer<CustomerExerciseDeviceBloc, CustomerExerciseDeviceState>(
listener: (context, state) {
if (state is CustomerExerciseDeviceLoading) {
Scaffold.of(context).showSnackBar(SnackBar(
duration: Duration(milliseconds: 100),
backgroundColor: Colors.transparent,
content: Container(child: Center(child: CircularProgressIndicator()))));
} else if (state is CustomerExerciseDeviceError) {
if (state is CustomerExerciseDeviceError) {
Scaffold.of(context).showSnackBar(
SnackBar(backgroundColor: Colors.orange, content: Text(state.message, style: TextStyle(color: Colors.white))));
}
},
builder: (context, state) {
final bloc = BlocProvider.of<CustomerExerciseDeviceBloc>(context);
return getPage(bloc, cWidth, cHeight);
return ModalProgressHUD(
child: getPage(bloc, cWidth, cHeight),
inAsyncCall: state is CustomerExerciseDeviceLoading,
opacity: 0.5,
color: Colors.black54,
progressIndicator: CircularProgressIndicator(),
);
},
))));
}
+33 -20
View File
@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/bloc/login/login_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
@@ -68,29 +70,40 @@ class LoginPage extends StatelessWidget with Trans {
return Form(
key: _scaffoldKey,
child: Container(
padding: const EdgeInsets.only(left: 15, right: 50),
child: ListView(shrinkWrap: false, padding: EdgeInsets.only(top: 100.0), children: <Widget>[
FlatButton(
child: new Image.asset(
'asset/image/login_fb.png',
width: MediaQuery.of(context).size.width * .85,
),
onPressed: () => {loginBloc.add(LoginFB())},
),
Text(AppLocalizations.of(context).translate("OR")),
Divider(),
padding: const EdgeInsets.only(left: 20, right: 20),
child: ListView(shrinkWrap: false, padding: EdgeInsets.only(top: 150.0), children: <Widget>[
ListTile(title: Text(t("Login"), style: GoogleFonts.inter())),
Row(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.center,
children: [
new InkWell(
child: new Text(AppLocalizations.of(context).translate('Login'),
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24)),
FlatButton(
child: Image.asset(
'asset/image/button_fb.png',
width: 60,
),
onPressed: () => {loginBloc.add(LoginFB())},
),
FlatButton(
child: Image.asset(
'asset/image/button_google.png',
width: 60,
),
onPressed: () => {loginBloc.add(LoginGoogle())},
),
Platform.isIOS
? FlatButton(
child: Image.asset(
'asset/image/button_apple.png',
width: 60,
),
onPressed: () => {loginBloc.add(LoginApple())},
)
: Offstage(),
],
),
Divider(
color: Colors.transparent,
),
Divider(),
ListTile(title: Text(t("OR"), style: GoogleFonts.inter())),
Divider(),
TextFormField(
key: LibraryKeys.loginEmailField,
decoration: InputDecoration(
@@ -118,7 +131,7 @@ class LoginPage extends StatelessWidget with Trans {
),
TextFormField(
key: LibraryKeys.loginPasswordField,
obscureText: true,
obscureText: loginBloc.obscure,
decoration: InputDecoration(
labelStyle: TextStyle(fontSize: 14),
contentPadding: EdgeInsets.only(left: 15, top: 15, bottom: 15),
@@ -168,7 +181,7 @@ class LoginPage extends StatelessWidget with Trans {
),
Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: <Widget>[
InkWell(
child: Text(AppLocalizations.of(context).translate('SignUp')),
child: Text(AppLocalizations.of(context).translate('SignUpLink')),
onTap: () => Navigator.of(context).pushNamed('registration'),
),
Spacer(flex: 2),
+51 -33
View File
@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:aitrainer_app/bloc/account/account_bloc.dart';
import 'package:aitrainer_app/bloc/login/login_bloc.dart';
import 'package:aitrainer_app/localization/app_localization.dart';
@@ -11,7 +13,6 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_form_bloc/flutter_form_bloc.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:modal_progress_hud/modal_progress_hud.dart';
import 'package:toggle_switch/toggle_switch.dart';
import '../library_keys.dart';
@@ -74,28 +75,48 @@ class RegistrationPage extends StatelessWidget with Trans {
return Form(
key: _scaffoldKey,
child: Container(
padding: const EdgeInsets.only(left: 15, right: 50),
padding: const EdgeInsets.only(left: 20, right: 20),
child: ListView(shrinkWrap: false, padding: EdgeInsets.only(top: 150.0), children: <Widget>[
FlatButton(
child: Image.asset(
'asset/image/fb_registration.png',
width: MediaQuery.of(context).size.width * .85,
),
onPressed: () => {loginBloc.add(RegistrationFB())},
),
ListTile(title: Text(AppLocalizations.of(context).translate("OR"))),
ListTile(title: Text(t("SignUp"), style: GoogleFonts.inter())),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
FlatButton(
child: Image.asset(
'asset/image/button_fb.png',
width: 60,
),
onPressed: () => {loginBloc.add(RegistrationFB())},
),
FlatButton(
child: Image.asset(
'asset/image/button_google.png',
width: 60,
),
onPressed: () => {loginBloc.add(RegistrationGoogle())},
),
Platform.isIOS
? FlatButton(
child: Image.asset(
'asset/image/button_apple.png',
width: 60,
),
onPressed: () => {loginBloc.add(RegistrationApple())},
)
: Offstage(),
],
),
ListTile(title: Text(t("OR"), style: GoogleFonts.inter())),
/* Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
InkWell(
child:
Text(AppLocalizations.of(context).translate('SignUp'), style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24)),
child: Text(AppLocalizations.of(context).translate('SignUp with Email'),
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 24)),
),
],
),
Divider(
color: Colors.transparent,
),
), */
TextFormField(
key: LibraryKeys.loginEmailField,
decoration: InputDecoration(
@@ -123,7 +144,7 @@ class RegistrationPage extends StatelessWidget with Trans {
),
TextFormField(
key: LibraryKeys.loginPasswordField,
obscureText: true,
obscureText: loginBloc.obscure,
decoration: InputDecoration(
labelStyle: TextStyle(fontSize: 14),
contentPadding: EdgeInsets.only(left: 15, top: 15, bottom: 15),
@@ -153,6 +174,9 @@ class RegistrationPage extends StatelessWidget with Trans {
color: Colors.transparent,
),
getDataProtection(loginBloc),
Divider(
color: Colors.transparent,
),
Row(mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[
FlatButton(
key: LibraryKeys.loginOKButton,
@@ -196,22 +220,16 @@ class RegistrationPage extends StatelessWidget with Trans {
}
Widget getDataProtection(LoginBloc loginBloc) {
return ListTile(
subtitle: Text(t("Please accept our data protection policy. For more information please click on 'Privacy'")),
title: ToggleSwitch(
minWidth: 100.0,
minHeight: 30.0,
fontSize: 14.0,
initialLabelIndex: loginBloc.dataPolicyAllowed ? 0 : 1,
activeBgColor: Colors.indigo,
activeFgColor: Colors.white,
inactiveBgColor: Colors.white30,
inactiveFgColor: Colors.black,
labels: [t('Yes'), t('No')],
onToggle: (index) {
loginBloc.add(DataProtectionClicked(marked: index == 0));
},
),
return CheckboxListTile(
title: Text(t("Please accept our data protection policy.")),
subtitle: Text(t("For more information please click on 'Privacy'")),
dense: true,
value: loginBloc.dataPolicyAllowed,
activeColor: Colors.indigo,
onChanged: (value) {
loginBloc.add(DataProtectionClicked(marked: value));
},
controlAffinity: ListTileControlAffinity.leading, // <-- leading Checkbox
);
}
}