import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:mqtt_client/mqtt_server_client.dart';
import 'package:mycore_api/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);
if(user != null) {
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
print("STORE IT LOCALLY - update");
await DatabaseHelper.instance.update(homieAppContext);
} else {
print("STORE IT LOCALLY - insert");
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!.addDefaultHeader('authorization', 'Bearer '+accessToken);
/*clientAPI.apiApi!.authentications!.forEach((key, auth) {
if (auth is OAuth) {
auth.accessToken = accessToken;
}
});*/
}
}