aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/main.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/main.dart')
-rw-r--r--lib/main.dart602
1 files changed, 0 insertions, 602 deletions
diff --git a/lib/main.dart b/lib/main.dart
deleted file mode 100644
index e56c38d..0000000
--- a/lib/main.dart
+++ /dev/null
@@ -1,602 +0,0 @@
-import 'package:meta/meta.dart';
-import 'dart:async';
-import 'dart:convert';
-import 'package:flutter/material.dart';
-import 'package:flutter/rendering.dart';
-import 'package:beam_messenger/globals.dart' as globals;
-import 'lockedscreen/home.dart';
-import 'pincode/pincode_verify.dart';
-import 'pincode/pincode_create.dart';
-import 'package:local_auth/local_auth.dart';
-import 'package:shared_preferences/shared_preferences.dart';
-import 'components.dart';
-
-void main() {
- runApp(new MaterialApp(home: new LoginPage()));
-}
-
-class LoginPage extends StatefulWidget {
- LoginPageState createState() => new LoginPageState();
-}
-
-class LoginPageState extends State<LoginPage> {
- final formKey = new GlobalKey<FormState>();
- final _scaffoldKey = new GlobalKey<ScaffoldState>();
-
- String _email;
- String _password;
- bool _usePinCode = false;
-
- bool autovalidate = false;
- void _handleSubmitted() {
- final FormState form = formKey.currentState;
- if (!form.validate()) {
- autovalidate = true; // Start validating on every change.
- showInSnackBar('Please fix the errors in red before submitting.');
- setState(() {
- globals.isLoggedIn = false;
- });
- } else {
- form.save();
- _performLogin();
- }
- }
-
- void showInSnackBar(String value) {
- _scaffoldKey.currentState
- .showSnackBar(new SnackBar(content: new Text(value)));
- }
-
- void _performLogin() async {
- // This is just a demo, so no actual login here.
- final snackbar = new SnackBar(
- duration: new Duration(seconds: 10),
- content: new Row(
- children: <Widget>[
- new CircularProgressIndicator(),
- new Text(" Signing-In...")
- ],
- ),
- );
- _scaffoldKey.currentState.showSnackBar(snackbar);
- await tryLogin(_email, _password);
- if (globals.isLoggedIn) {
- // await showAlertPopup();
- // await saveData(_usePinCode);
- if (_usePinCode) {
- navigateToScreen('Create Pin');
- } else {
- navigateToScreen('Home');
- }
- }
- _scaffoldKey.currentState.hideCurrentSnackBar();
- }
-
- Future<bool> _loginRequest(String email, String password) async {
- String result = "";
- result = await globals.Utility.getData({'email': email, 'password': password});
-
- //Decode Data
- try {
- Map decoded = JSON.decode(result);
- globals.id = decoded["user_data"]['id'].toString();
- globals.firstname = decoded["user_data"]['name'].toString();
- globals.email = decoded["user_data"]['email'].toString();
- globals.avatar = decoded["user_data"]['avatar'].toString();
-
- print(globals.id);
- print(globals.firstname);
- print(globals.email);
- print(globals.avatar);
-
- globals.token = globals.id;
- } catch (exception) {
- print("Error Decoding Data");
- return false;
- }
- return true;
- }
-
- tryLogin(String email, String password) async {
- await _loginRequest(email, password);
- print("Token: " + globals.token + " | Error: " + globals.error);
-
- if (globals.token != 'null') {
- print("Valid Token!");
- setState(() {
- globals.isLoggedIn = true;
- });
-
- //Save Email and Password to Shared Preferences
- SharedPreferences prefs = await SharedPreferences.getInstance();
- print('Email: $email Password $password.');
- prefs.setString('userEmail', email);
- prefs.setString('userPassword', password);
- prefs.setString('userToken', globals.token);
- } else {
- print("Invalid Token!");
- setState(() {
- globals.isLoggedIn = false;
- });
- globals.error = "Check Email and Password!";
- globals.Utility.showAlertPopup(
- context, "Info", "Please Try Logging In Again! \n" + globals.error);
- }
- }
-
- saveData(bool usePin) async {
- SharedPreferences prefs = await SharedPreferences.getInstance();
- if (usePin) {
- prefs.setBool('usePinCode', true);
- } else {
- prefs.setBool('usePinCode', false);
- }
- }
-
- Future<Null> navigateToScreen(String name) async {
- if (name.contains('Home')) {
- Navigator.push(
- context,
- new MaterialPageRoute(
- builder: (context) =>
- new Home()), //When Authorized Navigate to the next screen
- );
- } else if (name.contains('Create Pin')) {
- Navigator.push(
- context,
- new MaterialPageRoute(
- builder: (context) =>
- new PinCodeCreate()), //When Authorized Navigate to the next screen
- );
- } else if (name.contains('Verify Pin')) {
- Navigator.push(
- context,
- new MaterialPageRoute(
- builder: (context) =>
- new PinCodeVerify()), //When Authorized Navigate to the next screen
- );
- } else {
- print('Error: $name');
- }
- }
-
- Future<Null> showAlertPopup() async {
- return showDialog<Null>(
- context: context,
- barrierDismissible: false, // user must tap button!
- child: new AlertDialog(
- title: new Text('Info'),
- content: new SingleChildScrollView(
- child: new ListBody(
- children: <Widget>[
- new Text('Would you like to set a Pin Code for a faster log in?'),
- new Text('Once a Pin is set you can unlock with biometrics'),
- ],
- ),
- ),
- actions: <Widget>[
- new FlatButton(
- child: new Text('Yes'),
- onPressed: () {
- _usePinCode = true;
- Navigator.of(context).pop();
- },
- ),
- new FlatButton(
- child: new Text('No'),
- onPressed: () {
- _usePinCode = false;
- Navigator.of(context).pop();
- },
- ),
- ],
- ),
- );
- }
-
- String _authorized = 'Not Authorized';
- Future<Null> _goToBiometrics() async {
- String email;
- String password;
- final LocalAuthentication auth = new LocalAuthentication();
- bool authenticated = false;
- try {
- authenticated = await auth.authenticateWithBiometrics(
- localizedReason: 'Scan your fingerprint to authenticate',
- useErrorDialogs: true,
- stickyAuth: false);
- } catch (e) {
- print(e);
- }
- if (!mounted) return;
-
- setState(() {
- _authorized = authenticated ? 'Authorized' : 'Not Authorized';
- print(_authorized);
-
- if (authenticated) {
- //Todo: Get Saved Email and Password from Shared Preferences
- //https://github.com/flutter/plugins/tree/master/packages/shared_preferences
- String savedEmail = "Test";
- String savedPassword = "Test";
- //Todo: Get Email and Password from Shared Preferences
- email = savedEmail;
- password = savedPassword;
- }
- });
- if (authenticated) {
- await tryLogin(email, password);
- if (globals.isLoggedIn) {
- navigateToScreen('Home');
- } else {
- globals.Utility.showAlertPopup(
- context, "Info", "Login Failed\nPlease Try Logging In Again");
- }
- } else {
- globals.Utility.showAlertPopup(
- context, "Info", "Login Failed\nPlease Try Biometrics Again");
- }
- }
-
- void newAccount() {
- Navigator.of(context).push(new MaterialPageRoute<Null>(
- builder: (BuildContext context) {
- return new NewAccountPage();
- },
- fullscreenDialog: true));
- }
-
- void needHelp() {
- Navigator.of(context).push(new MaterialPageRoute<Null>(
- builder: (BuildContext context) {
- return new HelpPage();
- },
- fullscreenDialog: true));
- }
-
- @override
- Widget build(BuildContext context) {
- return new Scaffold(
- key: _scaffoldKey,
- appBar: new AppBar(
- title: new Text('Login'),
- ),
- body: new Container(
- color: Colors.grey[300],
- child: new ListView(
- physics: new AlwaysScrollableScrollPhysics(),
- key: new PageStorageKey("Divider 1"),
- children: <Widget>[
- new Container(
- height: 20.0,
- ),
- new Padding(
- padding: EdgeInsets.all(20.0),
- child: new Card(
- child: new Column(
- children: <Widget>[
- new Container(height: 30.0),
- new Icon(
- globals.isLoggedIn ? Icons.lock_open : Icons.lock_outline,
- size: 120.0,
- ),
- new Padding(
- padding: const EdgeInsets.all(16.0),
- child: new Form(
- key: formKey,
- child: new Column(
- children: [
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Email'),
- validator: (val) =>
- val.length < 1 ? 'Email Required' : null,
- onSaved: (val) => _email = val,
- obscureText: false,
- keyboardType: TextInputType.text,
- autocorrect: false,
- ),
- new Container(height: 10.0),
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Password'),
- validator: (val) =>
- val.length < 1 ? 'Password Required' : null,
- onSaved: (val) => _password = val,
- obscureText: true,
- keyboardType: TextInputType.text,
- autocorrect: false,
- ),
- new Container(height: 5.0),
- ],
- ),
- ),
- ),
- ],
- ),
- ),
- ),
- new Padding(
- padding: EdgeInsets.all(20.0),
- child: new Row(
- children: <Widget>[
- new Expanded(
- child: new Padding(
- padding: const EdgeInsets.all(5.0),
- child: new RaisedButton(
- color: Colors.blue,
- onPressed: _handleSubmitted,
- child: new Text(
- 'Login',
- style: new TextStyle(color: Colors.white),
- ),
- ),
- ),
- ),
- new Padding(
- padding: const EdgeInsets.all(5.0),
- child: new RaisedButton(
- color: Colors.redAccent[400],
- onPressed: _goToBiometrics,
- child: new Icon(
- Icons.fingerprint,
- color: Colors.white,
- ),
- ),
- ),
- ],
- ),
- ),
- new Padding(
- padding: EdgeInsets.all(20.0),
- child: new Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: <Widget>[
- new TextButton(name: "Create Account", onPressed: newAccount),
- new TextButton(name: "Need Help?", onPressed: needHelp),
- ],
- ),
- )
- ],
- ),
- ),
- );
- }
-}
-
-class NewAccountPage extends StatefulWidget {
- @override
- NewAccountPageState createState() => new NewAccountPageState();
-}
-
-class NewAccountPageState extends State<NewAccountPage> {
- final formKey = new GlobalKey<FormState>();
- final _scaffoldKey = new GlobalKey<ScaffoldState>();
-
- String _email;
- String _password;
-
- void openTermsAndConditions() {
- Navigator.of(context).push(new MaterialPageRoute<Null>(
- builder: (BuildContext context) {
- return new TermsConditionsPage();
- },
- fullscreenDialog: true));
- }
-
- bool isEmail(String email) {
- String regex =
- r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
- RegExp regExp = new RegExp(regex);
- return regExp.hasMatch(email);
- }
-
- bool autovalidate = false;
- void _handleSubmitted() {
- final FormState form = formKey.currentState;
- if (!form.validate()) {
- autovalidate = true; // Start validating on every change.
- showInSnackBar('Please fix the errors before submitting again.');
- } else {
- form.save();
- Navigator.pop(context);
- }
- }
-
- void showInSnackBar(String value) {
- _scaffoldKey.currentState
- .showSnackBar(new SnackBar(content: new Text(value)));
- }
-
- @override
- Widget build(BuildContext context) {
- return new Scaffold(
- key: _scaffoldKey,
- appBar: new AppBar(
- title: const Text('Create New Account'),
- ),
- body: new Container(
- color: Colors.grey[300],
- child: new ListView(
- physics: new AlwaysScrollableScrollPhysics(),
- key: new PageStorageKey("Divider 1"),
- children: <Widget>[
- new Container(
- height: 20.0,
- ),
- new Padding(
- padding: EdgeInsets.all(20.0),
- child: new Card(
- child: new Column(
- children: <Widget>[
- new Padding(
- padding: const EdgeInsets.all(16.0),
- child: new Form(
- key: formKey,
- child: new Column(
- children: [
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Email'),
- validator: (val) => isEmail(val) && val.length < 1
- ? 'Email Required'
- : null,
- onSaved: (val) => _email = val,
- obscureText: false,
- keyboardType: TextInputType.emailAddress,
- autocorrect: false,
- ),
- new Container(
- height: 10.0,
- ),
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Email'),
- validator: (val) =>
- isEmail(val) && val.length < 1 ? 'Email Required' : null,
- onSaved: (val) => _email = val,
- obscureText: true,
- keyboardType: TextInputType.emailAddress,
- autocorrect: false,
- ),
- new Container(height: 10.0),
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Password'),
- validator: (val) =>
- val.length >= 8 && val.length >= 32 ? 'Password length must be between 8 and 32 characters.' : null,
- onSaved: (val) => _password = val,
- obscureText: true,
- keyboardType: TextInputType.text,
- autocorrect: false,
- ),
- new Container(
- height: 10.0,
- ),
- new TextFormField(
- decoration:
- new InputDecoration(labelText: 'Password'),
- validator: (val) =>
- val.length >= 8 && val.length >= 32 ? 'Password length must be between 8 and 32 characters.' : null,
- onSaved: (val) => _password = val,
- obscureText: true,
- keyboardType: TextInputType.text,
- autocorrect: false,
- ),
- new Container(height: 5.0),
- ],
- ),
- ),
- ),
- new TextButton(
- name: "Terms and Conditions",
- onPressed: openTermsAndConditions),
- ],
- ),
- ),
- ),
- new Padding(
- padding: EdgeInsets.all(20.0),
- child: new Row(
- children: <Widget>[
- new Expanded(
- child: new Padding(
- padding: const EdgeInsets.all(5.0),
- child: new RaisedButton(
- color: Colors.blue,
- onPressed: _handleSubmitted,
- child: new Text(
- 'Save',
- style: new TextStyle(color: Colors.white),
- ),
- ),
- ),
- ),
- ],
- ),
- ),
- ],
- ),
- ),
- );
- }
-}
-
-class HelpPage extends StatefulWidget {
- @override
- HelpPageState createState() => new HelpPageState();
-}
-
-class HelpPageState extends State<HelpPage> {
- @override
- Widget build(BuildContext context) {
- return new Scaffold(
- appBar: new AppBar(
- title: const Text('Help'),
- ),
- body: new Center(
- child: new Column(
- children: <Widget>[
- new Padding(
- padding: new EdgeInsets.all(10.0),
- child: new Text(
- '24/7 Customer Support',
- textAlign: TextAlign.center,
- style: new TextStyle(
- color: Colors.black,
- fontWeight: FontWeight.bold,
- fontSize: 20.0,
- ),
- ),
- ),
- new Padding(
- padding: new EdgeInsets.all(10.0),
- child: new Text(
- 'Email: contact@beam-messenger.com',
- textAlign: TextAlign.center,
- style: new TextStyle(
- color: Colors.black,
- fontSize: 15.0,
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
-}
-
-class TermsConditionsPage extends StatefulWidget {
- @override
- TermsConditionsPageState createState() => new TermsConditionsPageState();
-}
-
-class TermsConditionsPageState extends State<TermsConditionsPage> {
- String termsOfUse = "Your data is secure - don't worry :) (TODO: Write TOU)";
- @override
- Widget build(BuildContext context) {
- return new Scaffold(
- appBar: new AppBar(
- title: const Text('Terms and Conditions'),
- ),
- body: new Center(
- child: new Column(
- children: <Widget>[
- new Padding(
- padding: new EdgeInsets.all(10.0),
- child: new Text(
- termsOfUse,
- textAlign: TextAlign.center,
- style: new TextStyle(
- color: Colors.black,
- fontSize: 15.0,
- ),
- ),
- ),
- ],
- ),
- ),
- );
- }
-}