import 'package:universal_io/io.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:mobdr/network/api_provider.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:mobdr/ui/home.dart'; import 'package:mobdr/ui/authentication/verification.dart'; class SigninPage extends StatefulWidget { @override _SigninPageState createState() => _SigninPageState(); } class _SigninPageState extends State { bool _obscureText = true; IconData _iconVisible = Icons.visibility_off; ApiProvider _apiProvider = ApiProvider(); // TODO: A voir si bien positionné TextEditingController _etUserName = TextEditingController(); TextEditingController _etPinCode = TextEditingController(); Color _gradientTop = Color(0xFF039be6); Color _gradientBottom = Color(0xFF0299e2); Color _mainColor = Color(0xFF0181cc); Color _underlineColor = Color(0xFFCCCCCC); void _toggleObscureText() { setState(() { _obscureText = !_obscureText; if (_obscureText == true) { _iconVisible = Icons.visibility_off; } else { _iconVisible = Icons.visibility; } }); } @override void initState() { _etUserName = TextEditingController(text: 'fbenoist'); _etPinCode = TextEditingController(text: '9295'); super.initState(); } @override void dispose() { _etUserName.dispose(); _etPinCode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: AnnotatedRegion( value: Platform.isIOS ? SystemUiOverlayStyle.light : SystemUiOverlayStyle(statusBarIconBrightness: Brightness.light), child: Stack( children: [ // top blue background gradient Container( height: MediaQuery.of(context).size.height / 3.5, decoration: BoxDecoration( gradient: LinearGradient( colors: [_gradientTop, _gradientBottom], begin: Alignment.topCenter, end: Alignment.bottomCenter)), ), // set your logo here Container( margin: EdgeInsets.fromLTRB( 0, MediaQuery.of(context).size.height / 20, 0, 0), alignment: Alignment.topCenter, child: Image.asset('assets/images/logo_dark.png', height: 120)), ListView( children: [ // create form login Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), elevation: 5, margin: EdgeInsets.fromLTRB(32, MediaQuery.of(context).size.height / 3.5 - 72, 32, 0), color: Colors.white, child: Container( margin: EdgeInsets.fromLTRB(24, 0, 24, 20), child: Column( children: [ SizedBox( height: 40, ), Center( child: Text( 'SIGN IN', style: TextStyle( color: _mainColor, fontSize: 18, fontWeight: FontWeight.w900), ), ), SizedBox( height: 20, ), TextField( keyboardType: TextInputType.emailAddress, controller: _etUserName, decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: Colors.grey[600]!)), enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: _underlineColor), ), labelText: 'Email', labelStyle: TextStyle(color: Colors.grey[700])), ), SizedBox( height: 20, ), TextField( obscureText: _obscureText, controller: _etPinCode, decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: Colors.grey[600]!)), enabledBorder: UnderlineInputBorder( borderSide: BorderSide(color: _underlineColor), ), labelText: 'Pin code', labelStyle: TextStyle(color: Colors.grey[700]), suffixIcon: IconButton( icon: Icon(_iconVisible, color: Colors.grey[700], size: 20), onPressed: () { _toggleObscureText(); }), ), ), SizedBox( height: 60, ), SizedBox( width: double.maxFinite, child: TextButton( style: ButtonStyle( backgroundColor: MaterialStateProperty .resolveWith( (Set states) => _mainColor, ), overlayColor: MaterialStateProperty.all( Colors.transparent), shape: MaterialStateProperty.all( RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), )), ), onPressed: () async { //Navigator.of(context).pushAndRemoveUntil(MaterialPageRoute(builder: (context) => HomePage()), (Route route) => false); var apiResponse = await _apiProvider.login( _etUserName.text, _etPinCode.text, ''); if (apiResponse == 'OK') { Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (context) => HomePage()), (Route route) => false); } else if (apiResponse == 'SECURITY_CODE') { Navigator.push( context, MaterialPageRoute( builder: (_) => VerificationPage())); } else { Fluttertoast.showToast( msg: apiResponse, toastLength: Toast.LENGTH_SHORT); } }, child: Padding( padding: const EdgeInsets.symmetric(vertical: 5), child: Text( 'LOGIN', style: TextStyle( fontSize: 16, color: Colors.white), textAlign: TextAlign.center, ), )), ), ], )), ), ], ) ], ), )); } }