From 327b18049b1f9097ce05703c729270c2894ff619 Mon Sep 17 00:00:00 2001 From: Valentin CZERYBA Date: Sat, 3 Sep 2022 21:17:47 +0200 Subject: [PATCH] import login page --- covas_mobile/lib/MyHomePage.dart | 186 +++++++++++++++++++++++++ covas_mobile/lib/main.dart | 224 ++++++++++--------------------- 2 files changed, 257 insertions(+), 153 deletions(-) create mode 100644 covas_mobile/lib/MyHomePage.dart diff --git a/covas_mobile/lib/MyHomePage.dart b/covas_mobile/lib/MyHomePage.dart new file mode 100644 index 0000000..3c01511 --- /dev/null +++ b/covas_mobile/lib/MyHomePage.dart @@ -0,0 +1,186 @@ +// ignore_for_file: unnecessary_brace_in_string_interps + +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({Key? key}) : super(key: key); + + // This widget is the root of your application. + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + // This is the theme of your application. + // + // Try running your application with "flutter run". You'll see the + // application has a blue toolbar. Then, without quitting the app, try + // changing the primarySwatch below to Colors.green and then invoke + // "hot reload" (press "r" in the console where you ran "flutter run", + // or simply save your changes to "hot reload" in a Flutter IDE). + // Notice that the counter didn't reset back to zero; the application + // is not restarted. + primarySwatch: Colors.blue, + ), + home: const MyHomePage(title: 'Flutter Demo Home Page'), + ); + } +} + +class MyHomePage extends StatefulWidget { + const MyHomePage({Key? key, required this.title}) : super(key: key); + + // This widget is the home page of your application. It is stateful, meaning + // that it has a State object (defined below) that contains fields that affect + // how it looks. + + // This class is the configuration for the state. It holds the values (in this + // case the title) provided by the parent (in this case the App widget) and + // used by the build method of the State. Fields in a Widget subclass are + // always marked "final". + + final String title; + + @override + State createState() => _MyHomePageState(); +} + +class _MyHomePageState extends State { + String listUser = ""; + + Future _incrementCounter() async { + var url = Uri.parse("http://localhost:8083/api/token"); + String credentials = "peter93:toto"; + Codec stringToBase64 = utf8.fuse(base64); + String encoded = stringToBase64.encode(credentials); + var response = await http.get(url, headers: { + HttpHeaders.authorizationHeader: 'Basic $encoded', + }); + var user = ""; + var jwt = ""; + var cookies = response.headers["set-cookie"].toString().split(";"); + for (var cookie in cookies) { + var cookiesMany = cookie.split(","); + for (var cookie2 in cookiesMany) { + switch (cookie2.split("=")[0]) { + case "jwt": + { + jwt = cookie2.toString(); + } + break; + case "user": + { + user = cookie2.toString(); + } + break; + default: + break; + } + } + } + String former = ""; + stderr.writeln("User ${user}"); + stderr.writeln("Jwt ${jwt}"); + stderr.writeln('Response status: ${response.statusCode}'); + stderr.writeln('Response body: ${response.body}'); + var urlGet = Uri.parse("http://localhost:8083/api/users"); + + var responseGet = await http + .get(urlGet, headers: {HttpHeaders.cookieHeader: '${jwt}; ${user}'}); + + stderr.writeln('Response Get status: ${responseGet.statusCode}'); + stderr.writeln('Response Get body: ${responseGet.body}'); + var json = jsonDecode(responseGet.body); + for (var user in json) { + former = "$former\n ${user['name']}"; + } + + setState(() { + // This call to setState tells the Flutter framework that something has + // changed in this State, which causes it to rerun the build method below + // so that the display can reflect the updated values. If we changed + // _counter without calling setState(), then the build method would not be + // called again, and so nothing would appear to happen. + listUser = former; + }); + } + + final _formKey = GlobalKey(); + + @override + Widget build(BuildContext context) { + // This method is rerun every time setState is called, for instance as done + // by the _incrementCounter method above. + // + // The Flutter framework has been optimized to make rerunning build methods + // fast, so that you can just rebuild anything that needs updating rather + // than having to individually change instances of widgets. + return Scaffold( + appBar: AppBar( + // Here we take the value from the MyHomePage object that was created by + // the App.build method, and use it to set our appbar title. + title: Text(widget.title), + ), + body: Center( + // Center is a layout widget. It takes a single child and positions it + // in the middle of the parent. + child: Column( + // Column is also a layout widget. It takes a list of children and + // arranges them vertically. By default, it sizes itself to fit its + // children horizontally, and tries to be as tall as its parent. + // + // Invoke "debug painting" (press "p" in the console, choose the + // "Toggle Debug Paint" action from the Flutter Inspector in Android + // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) + // to see the wireframe for each widget. + // + // Column has various properties to control how it sizes itself and + // how it positions its children. Here we use mainAxisAlignment to + // center the children vertically; the main axis here is the vertical + // axis because Columns are vertical (the cross axis would be + // horizontal). + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Form( + key: _formKey, + child: Column( + children: [ + // Add TextFormFields and ElevatedButton here. + TextFormField( + // The validator receives the text that the user has entered. + validator: (value) { + if (value == null || value.isEmpty) { + return 'Please enter some text'; + } + return null; + }, + ), + ], + ), + ), + const Text( + 'You have pushed the button this many times:', + ), + Text( + '$listUser', + style: Theme.of(context).textTheme.headline4, + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: _incrementCounter, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), // This trailing comma makes auto-formatting nicer for build methods. + ); + } +} diff --git a/covas_mobile/lib/main.dart b/covas_mobile/lib/main.dart index 3c01511..00265ef 100644 --- a/covas_mobile/lib/main.dart +++ b/covas_mobile/lib/main.dart @@ -1,186 +1,104 @@ -// ignore_for_file: unnecessary_brace_in_string_interps - -import 'dart:io'; - import 'package:flutter/material.dart'; -import 'package:http/http.dart' as http; -import 'dart:convert'; +import 'MyHomePage.dart'; void main() { - runApp(const MyApp()); + runApp(MyApp()); } class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); - - // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // Try running your application with "flutter run". You'll see the - // application has a blue toolbar. Then, without quitting the app, try - // changing the primarySwatch below to Colors.green and then invoke - // "hot reload" (press "r" in the console where you ran "flutter run", - // or simply save your changes to "hot reload" in a Flutter IDE). - // Notice that the counter didn't reset back to zero; the application - // is not restarted. - primarySwatch: Colors.blue, - ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), + debugShowCheckedModeBanner: false, + home: LoginDemo(), ); } } -class MyHomePage extends StatefulWidget { - const MyHomePage({Key? key, required this.title}) : super(key: key); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; - +class LoginDemo extends StatefulWidget { @override - State createState() => _MyHomePageState(); + _LoginDemoState createState() => _LoginDemoState(); } -class _MyHomePageState extends State { - String listUser = ""; - - Future _incrementCounter() async { - var url = Uri.parse("http://localhost:8083/api/token"); - String credentials = "peter93:toto"; - Codec stringToBase64 = utf8.fuse(base64); - String encoded = stringToBase64.encode(credentials); - var response = await http.get(url, headers: { - HttpHeaders.authorizationHeader: 'Basic $encoded', - }); - var user = ""; - var jwt = ""; - var cookies = response.headers["set-cookie"].toString().split(";"); - for (var cookie in cookies) { - var cookiesMany = cookie.split(","); - for (var cookie2 in cookiesMany) { - switch (cookie2.split("=")[0]) { - case "jwt": - { - jwt = cookie2.toString(); - } - break; - case "user": - { - user = cookie2.toString(); - } - break; - default: - break; - } - } - } - String former = ""; - stderr.writeln("User ${user}"); - stderr.writeln("Jwt ${jwt}"); - stderr.writeln('Response status: ${response.statusCode}'); - stderr.writeln('Response body: ${response.body}'); - var urlGet = Uri.parse("http://localhost:8083/api/users"); - - var responseGet = await http - .get(urlGet, headers: {HttpHeaders.cookieHeader: '${jwt}; ${user}'}); - - stderr.writeln('Response Get status: ${responseGet.statusCode}'); - stderr.writeln('Response Get body: ${responseGet.body}'); - var json = jsonDecode(responseGet.body); - for (var user in json) { - former = "$former\n ${user['name']}"; - } - - setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - listUser = former; - }); - } - - final _formKey = GlobalKey(); - +class _LoginDemoState extends State { @override Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. return Scaffold( + backgroundColor: Colors.white, appBar: AppBar( - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), + title: Text("Login Page"), ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. + body: SingleChildScrollView( child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Invoke "debug painting" (press "p" in the console, choose the - // "Toggle Debug Paint" action from the Flutter Inspector in Android - // Studio, or the "Toggle Debug Paint" command in Visual Studio Code) - // to see the wireframe for each widget. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - mainAxisAlignment: MainAxisAlignment.center, children: [ - Form( - key: _formKey, - child: Column( - children: [ - // Add TextFormFields and ElevatedButton here. - TextFormField( - // The validator receives the text that the user has entered. - validator: (value) { - if (value == null || value.isEmpty) { - return 'Please enter some text'; - } - return null; - }, - ), - ], + Padding( + padding: const EdgeInsets.only(top: 60.0), + child: Center( + child: Container( + width: 200, + height: 150, + /*decoration: BoxDecoration( + color: Colors.red, + borderRadius: BorderRadius.circular(50.0)),*/ + child: Image.asset('asset/images/flutter-logo.png')), ), ), - const Text( - 'You have pushed the button this many times:', + Padding( + //padding: const EdgeInsets.only(left:15.0,right: 15.0,top:0,bottom: 0), + padding: EdgeInsets.symmetric(horizontal: 15), + child: TextField( + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Email', + hintText: 'Enter valid email id as abc@gmail.com'), + ), ), - Text( - '$listUser', - style: Theme.of(context).textTheme.headline4, + Padding( + padding: const EdgeInsets.only( + left: 15.0, right: 15.0, top: 15, bottom: 0), + //padding: EdgeInsets.symmetric(horizontal: 15), + child: TextField( + obscureText: true, + decoration: InputDecoration( + border: OutlineInputBorder(), + labelText: 'Password', + hintText: 'Enter secure password'), + ), ), + FlatButton( + onPressed: () { + //TODO FORGOT PASSWORD SCREEN GOES HERE + }, + child: Text( + 'Forgot Password', + style: TextStyle(color: Colors.blue, fontSize: 15), + ), + ), + Container( + height: 50, + width: 250, + decoration: BoxDecoration( + color: Colors.blue, borderRadius: BorderRadius.circular(20)), + child: FlatButton( + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => MyHomePage(title: 'Flutter Demo'))); + }, + child: Text( + 'Login', + style: TextStyle(color: Colors.white, fontSize: 25), + ), + ), + ), + SizedBox( + height: 130, + ), + Text('New User? Create Account') ], ), ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. ); } }