Merge branch 'master' into othmane2

profile
Othmane BENJELLOUN 2 years ago
commit 33f0619268

2
.gitignore vendored

@ -124,3 +124,5 @@ linux/flutter/generated_plugin_registrant.cc
linux/flutter/generated_plugins.cmake
windows/flutter/generated_plugin_registrant.cc
windows/flutter/generated_plugins.cmake
flutter/

@ -4,26 +4,28 @@ import 'package:tuple/tuple.dart';
abstract class IDataStrategy {
// Create user
Future<bool> postUser(String email, String hash, String username);
Future<Tuple2<bool, String>> postUser(
String email, String hash, String username);
// Delete user
Future<void> deleteUser(String token);
Future<Tuple2<bool, String>> deleteUser(String token);
// Get Token validate
Future<void> connexion(String email, String hash);
Future<Tuple2<bool, String>> connexion(String email, String hash);
// Get all files for user
//Future<void> getFiles(String token);
Future<Tuple2> getFiles(String token);
// Upload file on BDD
Future<Tuple2<bool, String>> uploadFile(String token, File file);
// Get one file by id
Future<Tuple2<bool, String>> getFile(String token, String fileUuid);
Future<Tuple2> getFile(String token, String fileUuid);
// Delete one file on BDD
//Future<void> deleteFile(String token, String idFile);
Future<Tuple2<bool, String>> deleteFile(String token, String fileUuid);
Future<Tuple2> getInfoUser(String token);
/* -> Modification attribut
// Update email
Future<void> updateEmail(String token, String email);

@ -11,31 +11,48 @@ class RequestApi extends IDataStrategy {
"https://codefirst.iut.uca.fr/containers/SmartFit-smartfit_api";
@override
Future<Tuple2<bool, String>> getFile(String token, String fileUuid) async {
final response = await http.get(Uri.parse('$urlApi/user/files/$fileUuid'),
headers: <String, String>{'Authorization': token});
Future<Tuple2> getFile(String token, String fileUuid) async {
final url = Uri.parse('$urlApi/user/files/$fileUuid');
var request = http.Request('GET', url);
request.headers.addAll(<String, String>{'Authorization': token});
var streamedResponse = await request.send();
final response = await http.Response.fromStream(streamedResponse);
// !! Crée un fichier comme ca avec les bytes !!
//File("//").writeAsBytes(response.bodyBytes);
if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/
throw UnimplementedError();
} else {
throw UnimplementedError();
return Tuple2(true, response.bodyBytes);
}
if ((response.statusCode == 401)) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
if ((response.statusCode == 404)) {
return const Tuple2(false, "404 - NOT FOUND");
}
return const Tuple2(false, "Fail");
}
@override
Future<bool> deleteFile(String token, String idFile) async {
final response = await http.delete(Uri.parse('$urlApi/$token/files'));
Future<Tuple2<bool, String>> deleteFile(String token, String fileUuid) async {
final response = await http.delete(Uri.parse('$urlApi/user/files'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/
throw UnimplementedError();
} else {
throw UnimplementedError();
return const Tuple2(true, "Successful");
}
if (response.statusCode == 401) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
if (response.statusCode == 404) {
return const Tuple2(false, "404 - NOT FOUND");
}
return const Tuple2(false, "Fail");
}
@override
Future<Tuple2> deleteUser(String token) async {
Future<Tuple2<bool, String>> deleteUser(String token) async {
final response = await http.delete(Uri.parse('$urlApi/user'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) {
@ -51,44 +68,49 @@ class RequestApi extends IDataStrategy {
}
@override
Future<String> getFiles(String token) async {
final response = await http.get(Uri.parse('$urlApi/$token/files'));
Future<Tuple2> getFiles(String token) async {
final response = await http.get(Uri.parse('$urlApi/user/files'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) {
/*return Classe.fromJson(jsonDecode(response.body) as Map<String, dynamic>);*/
throw UnimplementedError();
} else {
throw UnimplementedError();
return Tuple2(true, response.body);
}
if (response.statusCode == 401) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
return const Tuple2(false, "Fail");
}
@override
Future<Tuple2> connexion(String email, String hash) async {
Future<Tuple2<bool, String>> connexion(String email, String hash) async {
final response =
await http.get(Uri.parse('$urlApi/user/login/$email/$hash'));
if (response.statusCode == 200) {
Map<String, String> json =
jsonDecode(response.body) as Map<String, String>;
return Tuple2<bool, String>(true, json['token']!);
} else if (response.statusCode == 401) {
Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2<bool, String>(true, json['token'].toString());
}
if (response.statusCode == 401) {
return const Tuple2<bool, String>(false, "UNAUTHORIZED");
}
if (response.statusCode == 404) {
return const Tuple2<bool, String>(false, "Not found");
}
return const Tuple2(false, "Fail");
}
/*
@override
Future<Tuple2> postUser(String email, String hash, String username) async {
final response =
await http.post(Uri.parse('$urlApi/user'), headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
}, body: {
"email": "'$email'",
"hash": "'$hash'",
"username": "'$username'"
});
Future<Tuple2<bool, String>> postUser(
String email, String hash, String username) async {
final response = await http.post(Uri.parse('$urlApi/user'),
body: <String, String>{
"email": email,
"hash": hash,
"username": username
});
if (response.statusCode == 200) {
return const Tuple2(true, "Successful");
Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2(true, json['token'].toString());
}
if (response.statusCode == 400) {
return const Tuple2(false, "400 BAD REQUEST - Json mal formaté");
@ -98,7 +120,7 @@ class RequestApi extends IDataStrategy {
false, "409 CONFLICT - Déja un compte avec cet email");
}
return const Tuple2(false, "Fail");
}*/
}
/*
@override
@ -135,14 +157,12 @@ class RequestApi extends IDataStrategy {
Future<Tuple2> modifAttribut(
String token, String nameAttribut, String newValue) async {
final response = await http.put(Uri.parse('$urlApi/user/$nameAttribut'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': token
},
headers: <String, String>{'Authorization': token},
body: jsonEncode(<String, String>{nameAttribut: newValue}));
if (response.statusCode == 200) {
return const Tuple2(true, "Successful");
Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2(true, json);
}
if (response.statusCode == 400) {
return const Tuple2(false, "400 - BAD REQUEST");
@ -161,7 +181,7 @@ class RequestApi extends IDataStrategy {
var request = http.MultipartRequest('POST', uri);
final httpImage = http.MultipartFile.fromBytes(
'file_FIT', await file.readAsBytes(),
'file', await file.readAsBytes(),
filename: file.path.split('/').last);
request.files.add(httpImage);
request.headers.addAll(headers);
@ -184,8 +204,20 @@ class RequestApi extends IDataStrategy {
}
@override
Future<bool> postUser(String email, String hash, String username) {
// TODO: implement postUser
throw UnimplementedError();
Future<Tuple2> getInfoUser(String token) async {
final response = await http.get(Uri.parse('$urlApi/user/info'),
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) {
Map<String, dynamic> json = jsonDecode(response.body);
return Tuple2(true, json);
}
if (response.statusCode == 400) {
return const Tuple2(false, "400 - BAD REQUEST");
}
if (response.statusCode == 401) {
return const Tuple2(false, "401 - UNAUTHORIZED");
}
return const Tuple2(false, "Fail ");
}
}

@ -1,3 +1,5 @@
import 'package:fl_chart/fl_chart.dart';
class ActivityOfUser {
final String _type = "Default";
@ -8,4 +10,101 @@ class ActivityOfUser {
ActivityOfUser(List<dynamic> listeDynamic) {
_contentActivity = listeDynamic;
}
List<FlSpot> getHeartRateWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in _contentActivity) {
if (ligne[0] == "Data") {
if (ligne.length >= 10 && ligne[9] == "heart_rate") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[10]]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[10].toDouble()));
} else if (ligne.length >= 16 && ligne[15] == "heart_rate") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[17]]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[16].toDouble()));
}
}
}
return result;
}
List<FlSpot> getDistanceWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in _contentActivity) {
if (ligne.length >= 8 && ligne[0] == "Data" && ligne[6] == "distance") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[7].toInt()]);
result
.add(FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[7].toDouble()));
}
}
return result;
}
List<FlSpot> getAltitudeWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in _contentActivity) {
if (ligne.length >= 14 && ligne[0] == "Data" && ligne[12] == "altitude") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[13].toInt()]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[13].toDouble()));
}
}
return result;
}
double getDistance() {
double result = 0.0;
for (int i = _contentActivity.length - 1; i >= 0; i--) {
if (_contentActivity[i].length >= 8 &&
_contentActivity[i][0] == "Data" &&
_contentActivity[i][6] == "distance") {
if (_contentActivity[i][7] > result) {
result = _contentActivity[i][7].toDouble();
}
}
}
return result;
}
List<FlSpot> getSpeedWithTime() {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in _contentActivity) {
if (ligne[0] == "Data" && ligne[1] == 1) {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[19].toDouble()));
}
if (ligne[0] == "Data" && ligne[1] == 2) {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[25].toDouble()));
}
}
return result;
}
}

@ -1,21 +1,12 @@
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
import 'package:csv/csv.dart';
import 'package:fit_tool/fit_tool.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:path_provider/path_provider.dart';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/Modele/Api/request_api.dart';
import 'package:smartfit_app_mobile/Modele/activity.dart';
class ManagerFile {
final IDataStrategy _dataStrategy = RequestApi();
//List<dynamic>? _contentFile;
//List<dynamic>? get contentFile => _contentFile;
// ----- //
// ----- Read csv File ------- //
Future<List<dynamic>> readCSVFile(String path) async {
if (File(path).exists() == false) return List.empty();
@ -27,13 +18,6 @@ class ManagerFile {
return fields;
}
// ------ Import File and save it in BDD
Future<bool> importFileAndSaveInBDD(String path, String tokenUser) async {
if (File(path).existsSync() == false) return false;
_dataStrategy.uploadFile(tokenUser, File(path));
return true;
}
// ----- Read a file FIT --- //
Future<List<dynamic>> readFitFile(String path) async {
if (File(path).existsSync() == false) return List.empty();
@ -46,14 +30,14 @@ class ManagerFile {
}
// ------------- Get The path of application --- //
Future<String> get _localPath async {
Future<String> get localPath async {
final directory = await getApplicationDocumentsDirectory();
return directory.path;
}
// --- A modifier si utilisé --- //
Future<bool> writeFile(String nameFileWithExtension, File file) async {
final outFile = File("${await _localPath}\\Files\\$nameFileWithExtension");
final outFile = File("${await localPath}\\Files\\$nameFileWithExtension");
if (outFile.existsSync() == false) {
outFile.createSync(recursive: true);
}
@ -64,103 +48,4 @@ class ManagerFile {
// --- Ligne utile --- //
//final csv = const ListToCsvConverter().convert(fitFile.toRows());
//await outFile.writeAsString(csv);*/
// ---------------- Fonction to get data --------- //
List<FlSpot> getHeartRateWithTime(ActivityOfUser activity) {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in activity.contentActivity) {
if (ligne[0] == "Data") {
if (ligne.length >= 10 && ligne[9] == "heart_rate") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[10]]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[10].toDouble()));
} else if (ligne.length >= 16 && ligne[15] == "heart_rate") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[17]]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[16].toDouble()));
}
}
}
return result;
}
List<FlSpot> getDistanceWithTime(ActivityOfUser activityOfUser) {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in activityOfUser.contentActivity) {
if (ligne.length >= 8 && ligne[0] == "Data" && ligne[6] == "distance") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[7].toInt()]);
result
.add(FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[7].toDouble()));
}
}
return result;
}
List<FlSpot> getAltitudeWithTime(ActivityOfUser activityOfUser) {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in activityOfUser.contentActivity) {
if (ligne.length >= 14 && ligne[0] == "Data" && ligne[12] == "altitude") {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
//result.add([(ligne[4] - firtTimeStamp) ~/ 100, ligne[13].toInt()]);
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[13].toDouble()));
}
}
return result;
}
double getDistance(ActivityOfUser activity) {
double result = 0.0;
for (int i = activity.contentActivity.length - 1; i >= 0; i--) {
if (activity.contentActivity[i].length >= 8 &&
activity.contentActivity[i][0] == "Data" &&
activity.contentActivity[i][6] == "distance") {
if (activity.contentActivity[i][7] > result) {
result = activity.contentActivity[i][7].toDouble();
}
}
}
return result;
}
List<FlSpot> getSpeedWithTime(ActivityOfUser activityOfUser) {
List<FlSpot> result = List.empty(growable: true);
int firtTimeStamp = 0;
for (List<dynamic> ligne in activityOfUser.contentActivity) {
if (ligne[0] == "Data" && ligne[1] == 1) {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[19].toDouble()));
}
if (ligne[0] == "Data" && ligne[1] == 2) {
if (firtTimeStamp == 0) {
firtTimeStamp = ligne[4];
}
result.add(
FlSpot((ligne[4] - firtTimeStamp) / 100, ligne[25].toDouble()));
}
}
return result;
}
}

@ -1,8 +1,17 @@
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:flutter_svg/svg.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/Modele/Api/request_api.dart';
import 'package:smartfit_app_mobile/Modele/user.dart';
import 'package:smartfit_app_mobile/View/page_test.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/common_widget/round_button.dart';
import 'package:smartfit_app_mobile/common_widget/round_text_field.dart';
import 'package:flutter/material.dart';
import 'package:tuple/tuple.dart';
class LoginView extends StatefulWidget {
const LoginView({super.key});
@ -13,6 +22,32 @@ class LoginView extends StatefulWidget {
class _LoginViewState extends State<LoginView> {
bool isCheck = false;
IDataStrategy api = RequestApi();
final controllerTextEmail = TextEditingController();
final controllerTextPassword = TextEditingController();
Future<Tuple2<bool, String>> checkLoginAndPassword() async {
Tuple2<bool, String> result = await api.connexion(controllerTextEmail.text,
sha256.convert(utf8.encode(controllerTextPassword.text)).toString());
return result;
}
Future<Tuple2<bool, Map<String, String>>> getUserInfo(String token) async {
Tuple2 result = await api.getInfoUser(token);
if (result.item1 == false) {
return const Tuple2(false, <String, String>{"Empty": "Empty"});
}
return Tuple2(true, result.item2 as Map<String, String>);
}
void fillUser(BuildContext context, Map<String, String> map, String token) {
context.read<User>().email = map["email"];
context.read<User>().username = map["username"];
context.read<User>().token = token;
context.read<User>().listActivity = List.empty(growable: true);
}
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
@ -43,15 +78,17 @@ class _LoginViewState extends State<LoginView> {
SizedBox(
height: media.width * 0.04,
),
const RoundTextField(
RoundTextField(
hitText: "Email",
icon: "assets/img/email.svg",
keyboardType: TextInputType.emailAddress,
controller: controllerTextEmail,
),
SizedBox(
height: media.width * 0.04,
),
RoundTextField(
controller: controllerTextPassword,
hitText: "Mot de passe",
icon: "assets/img/lock.svg",
obscureText: true,
@ -80,11 +117,32 @@ class _LoginViewState extends State<LoginView> {
),
],
),
const Spacer(),
const Spacer(),
RoundButton(
title: "Se connecter",
onPressed: () {
onPressed: () async {
Tuple2<bool, String> result =
await checkLoginAndPassword();
if (result.item1 == true) {
Tuple2 infoUser = await getUserInfo(result.item2);
if (infoUser.item1 == false) {
print(
"Erreur - Impossible de récupéré les données de l'utilisateur");
// Afficher pop-up
} else {
fillUser(context, infoUser.item2, result.item2);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const TestPage()));
}
} else {
print("Connection refuser");
//Afficher une pop-up
}
}),
SizedBox(
height: media.width * 0.04,
@ -198,4 +256,4 @@ class _LoginViewState extends State<LoginView> {
),
);
}
}
}

@ -15,6 +15,11 @@ class SignUpView extends StatefulWidget {
class _SignUpViewState extends State<SignUpView> {
bool isCheck = false;
final controllerTextEmail = TextEditingController();
final controllerTextUsername = TextEditingController();
final controllerTextPassword = TextEditingController();
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
@ -55,10 +60,11 @@ class _SignUpViewState extends State<SignUpView> {
SizedBox(
height: media.width * 0.04,
),
const RoundTextField(
RoundTextField(
hitText: "Email",
icon: "assets/img/email.svg",
keyboardType: TextInputType.emailAddress,
controller: controllerTextEmail,
),
SizedBox(
height: media.width * 0.04,
@ -67,6 +73,7 @@ class _SignUpViewState extends State<SignUpView> {
hitText: "Mot de passe",
icon: "assets/img/lock.svg",
obscureText: true,
controller: controllerTextPassword,
rigtIcon: TextButton(
onPressed: () {},
child: Container(

@ -1,13 +1,18 @@
import 'dart:convert';
import 'package:crypto/crypto.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:file_picker/file_picker.dart';
import 'dart:io';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/Modele/Api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/Modele/Api/request_api.dart';
import 'package:smartfit_app_mobile/Modele/activity.dart';
import 'package:smartfit_app_mobile/Modele/manager_file.dart';
import 'package:smartfit_app_mobile/Modele/user.dart';
import 'package:smartfit_app_mobile/View/home/home_view.dart';
import 'package:tuple/tuple.dart';
// ----------- File --------------- //
@ -57,6 +62,7 @@ class TestPage extends StatefulWidget {
class _TestPage extends State<TestPage> {
// Lire un fichier avec picker
FilePickerResult? result;
IDataStrategy strategy = RequestApi();
//late File x = File(file.path);
Future<void> readFile() async {
@ -74,21 +80,110 @@ class _TestPage extends State<TestPage> {
print("test33");
//print(x.getDistanceWithTime(ActivityOfUser(result)));
//print(x.getDistance(ActivityOfUser(result)));
print("test44");
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(result));
print("test55");
print(result);
//print(x.getAltitudeWithTime(ActivityOfUser(result)));
//print(x.getSpeedWithTime(ActivityOfUser(result)));
}
}
Future<void> createUser() async {
String mds = "1234";
var byte = utf8.encode(mds);
var digest = sha256.convert(byte);
print(digest.toString());
print("Appel");
Tuple2<bool, String> res =
await strategy.postUser("toto@gmail.com", digest.toString(), "toto");
print(res.item1);
print(res.item2);
}
Future<void> login() async {
String mds = "1234";
var byte = utf8.encode(mds);
var digest = sha256.convert(byte);
print(digest.toString());
print("Appel");
Tuple2<bool, String> res =
await strategy.connexion("toto@gmail.com", digest.toString());
print(res.item1);
print(res.item2);
}
Future<void> deleteUser() async {
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiYjA3OThmMjAtN2ZiMy0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNDI3fQ.2_bnvEC7_pwchielF3Kpu9fFtXDv_KabdOU8T07UnWI";
print("Appel");
Tuple2<bool, String> res = await strategy.deleteUser(token);
print(res.item1);
print(res.item2);
}
Future<void> getFiles() async {
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgyNzk3fQ.b_zsOHj2C-Y28CrcozbSjEz8BUWL8kgjjx5CDhES8PI";
print("Appel");
Tuple2 res = await strategy.getFiles(token);
print(res.item1);
print(res.item2);
}
Future<void> modifAttribut() async {
String nameAtt = "username";
String newValue = "toto2";
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzMDM4fQ.umN7LmUDbKUOeIToLcsOUIioQ7u4wsReHggRDB68VPQ";
print("Appel");
Tuple2 res = await strategy.modifAttribut(token, nameAtt, newValue);
print(res.item1);
print(res.item2);
}
Future<void> uploadFile() async {
PlatformFile t = result!.files.single;
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzNjM5fQ.0TmfJ9eYnszw4_RkNwPkMzkJxvsIFs5BI9uhQ7qYb0g";
String? lol = t.path!;
print("Appel");
Tuple2 res = await strategy.uploadFile(token, File(lol));
print(res.item1);
print(res.item2);
}
Future<void> getOneFile() async {
String ui = "fc6e234c-7fc6-11ee-bafd-02420a5a001f";
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzOTE3fQ.TUdrGEo7A0auQlUfO5RQm874QWuGXFBSKbJ8qTGPF2M";
print("Appel");
Tuple2 res = await strategy.getFile(token, ui);
print(res.item1);
print(res.item2);
ManagerFile x = ManagerFile();
File file = File("${await x.localPath}/Walking_2023-11-08T10_57_28.fit");
await file.create();
await file.writeAsBytes(res.item2);
print(await x.localPath);
print("Save");
print(await x
.readFitFile("${await x.localPath}/Walking_2023-11-08T10_57_28.fit"));
}
Future<void> getInfoUser() async {
String token =
"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1dWlkIjoiOGUyYWVmMTItN2ZiNC0xMWVlLWJhZmQtMDI0MjBhNWEwMDFmIiwiZXhwIjoxNzA0ODgzOTE3fQ.TUdrGEo7A0auQlUfO5RQm874QWuGXFBSKbJ8qTGPF2M";
Tuple2 res = await strategy.getInfoUser(token);
print(res.item1);
print(res.item2);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
const Text('A random AWESOME idea:'),
Text(Provider.of<User>(context).username),
const Text("User"),
// Add this.
ElevatedButton(
@ -109,7 +204,20 @@ class _TestPage extends State<TestPage> {
}
},
child: const Text("File - ")),
ElevatedButton(onPressed: readFile, child: const Text("Read Data"))
ElevatedButton(onPressed: login, child: const Text("Connexion")),
ElevatedButton(
onPressed: createUser, child: const Text("Create User")),
ElevatedButton(
onPressed: deleteUser, child: const Text("Delete User")),
ElevatedButton(onPressed: getFiles, child: const Text("getFiles")),
ElevatedButton(
onPressed: modifAttribut, child: const Text("modif attribut")),
ElevatedButton(
onPressed: uploadFile, child: const Text("Upload File")),
ElevatedButton(
onPressed: getOneFile, child: const Text("Get One File")),
ElevatedButton(
onPressed: getInfoUser, child: const Text("Get info User"))
],
),
);

@ -1,13 +1,15 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/Modele/user.dart';
import 'package:smartfit_app_mobile/View/login/login_view.dart';
import 'package:smartfit_app_mobile/View/login/signup_view.dart';
import 'package:smartfit_app_mobile/View/on_boarding/started_view.dart';
import 'package:smartfit_app_mobile/View/page_test.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
void main() {
runApp(ChangeNotifierProvider(
create: (context) => User("toto", "toto@email", "1234"),
child: const MyApp()));
create: (context) => User(), child: const MyApp()));
}
class MyApp extends StatelessWidget {
@ -36,7 +38,8 @@ class MyApp extends StatelessWidget {
// tested with just a hot reload.
primaryColor: TColor.primaryColor1,
fontFamily: "Poppins"),
home: const StartedView(),
//home: const StartedView(),
home: const SignUpView(),
);
}
}

@ -53,6 +53,7 @@ dependencies:
http: ^1.1.0
provider: ^6.0.5
tuple: ^2.0.2
crypto: ^3.0.3
dev_dependencies:
flutter_test:

Loading…
Cancel
Save