WT1.1.3 build 2 iOS. Apple SignIn, Google SignIn
This commit is contained in:
@@ -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
@@ -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
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user