import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:mqtt_client/mqtt_server_client.dart'; import 'package:mycoreapi/api.dart'; import 'package:myhomie_app/Components/Buttons/rounded_button.dart'; import 'package:myhomie_app/Components/rounded_input_field.dart'; import 'package:myhomie_app/Components/rounded_password_field.dart'; import 'package:myhomie_app/Models/homieContext.dart'; import 'package:myhomie_app/Screens/Main/MainPage.dart'; import 'package:myhomie_app/Screens/Login/components/background.dart'; import 'package:myhomie_app/app_context.dart'; import 'package:myhomie_app/client.dart'; import 'package:provider/provider.dart'; import 'package:uuid/uuid.dart'; import '../../../Helpers/DatabaseHelper.dart'; class Body extends StatefulWidget { const Body({ Key key, }) : super(key: key); @override State createState() => _BodyState(); } class _BodyState extends State { final clientAPI = Client('http://192.168.31.140'); // TODO field TokenDTO token; @override Widget build(BuildContext context) { final appContext = Provider.of(context); Size size = MediaQuery.of(context).size; return Background( child: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "LOGIN", style: TextStyle(fontWeight: FontWeight.bold), ), SizedBox(height: size.height * 0.03), /*SvgPicture.asset( "assets/icons/login.svg", height: size.height * 0.35, ),*/ SizedBox(height: size.height * 0.03), RoundedInputField( hintText: "Your Email", onChanged: (value) {}, ), RoundedPasswordField( onChanged: (value) {}, ), RoundedButton( text: "LOGIN", press: () async { // TODO check login etc var connected = await authenticateTRY(); if (connected) { HomieAppContext homieAppContext = new HomieAppContext(); UserInfoDetailDTO user = await clientAPI.userApi.userGet("6182c472e20a6dbcfe8fe82c"); // TO replace user get by email print(user); homieAppContext.host = "http://192.168.31.140";// TODO homieAppContext.clientMQTT = new MqttServerClient(homieAppContext.host.replaceAll('http://', ''),'my_homie_app_'+ Uuid().v1()); homieAppContext.clientAPI = clientAPI; homieAppContext.userId = user.id; homieAppContext.language = user.language == null ? 'FR': user.language; // homieAppContext.token = token.accessToken; // TODO check if we select by default or ask user to select if(user.homeIds.length > 0) { homieAppContext.homeId = user.homeIds.first; } else { // TODO invite home creation } setState(() { appContext.setContext(homieAppContext); }); // STORE IT LOCALLY (SQLite) HomieAppContext localContext = await DatabaseHelper.instance.getData(); if (localContext != null) { // Check if sql DB exist await DatabaseHelper.instance.update(homieAppContext); } else { await DatabaseHelper.instance.insert(homieAppContext); } Fluttertoast.showToast( msg: "Connexion réussie", toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, timeInSecForIosWeb: 1, backgroundColor: Colors.lightGreen, textColor: Colors.white, fontSize: 16.0 ); Navigator.pushAndRemoveUntil( context, MaterialPageRoute( builder: (context) { return MainPage(); }, ), (Route route) => false ); } }, ), SizedBox(height: size.height * 0.03), // TODO /*AlreadyHaveAnAccountCheck( press: () { Navigator.push( context, MaterialPageRoute( builder: (context) { //return SignUpScreen(); // TODODODO }, ), ); }, ),*/ ], ), ), ); } Future authenticateTRY() async { print("try auth.. "); // if () {} // Add if token exist and not null + not expired var isConnected = false; try { //LoginDTO loginDTO = new LoginDTO(email: "test@email.be", password: "kljqsdkljqsd"); LoginDTO loginDTO = new LoginDTO(email: "", password: ""); token = await clientAPI.authenticationApi.authenticationAuthenticateWithJson(loginDTO); print("Token ??"); print(token); print(token.accessToken); setAccessToken(token.accessToken); isConnected = true; // TODO update context + db } catch (e) { print("error auth"); } return isConnected; /*if (!isError) { UserInfoDetailDTO user = await clientAPI.userApi.userGet("6182c472e20a6dbcfe8fe82c"); print("user values ??"); print(user.email); print(user.id); List homes = await clientAPI.homeApi.homeGetAll(user.id); print("number of homes " + homes.length.toString()); homes.forEach((element) { print(element); }); HomeDTO home = homes[0]; // TODO List rooms = await clientAPI.roomApi.roomGetAll(home.id); print("number of rooms " + rooms.length.toString()); rooms.forEach((element) { print(element); }); List providers = await clientAPI.providerApi.providerGetAll(home.id); print("number of providers " + providers.length.toString()); providers.forEach((element) { print(element); }); List devices = await clientAPI.deviceApi.deviceGetAll(home.id); print("number of devices " + devices.length.toString()); /*devices.forEach((element) { print(element); });*/ List alarms = await clientAPI.alarmApi.alarmGetAll(home.id); print("number of alarms " + alarms.length.toString()); alarms.forEach((element) { print(element); }); /*List lastEvents = await clientAPI.eventApi.eventGet(home.id); print("number of events " + lastEvents.length.toString()); lastEvents.forEach((element) { print(element); });*/ List automations = await clientAPI.automationApi.automationGetAll(home.id); print("number of automations " + automations.length.toString()); automations.forEach((element) { print(element); }); List groups = await clientAPI.groupApi.groupGetAll(home.id); print("number of groups " + groups.length.toString()); groups.forEach((element) { print(element); }); }*/ } void setAccessToken(String accessToken) { clientAPI.apiApi.authentications.forEach((key, auth) { if (auth is OAuth) { auth.accessToken = accessToken; } }); } }