list activity

profile
Enzo 1 year ago
parent c5b38871a5
commit 682ba07aa3

@ -60,7 +60,14 @@ class WorkoutRow extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
wObj["nomActivite"].toString(),
wObj["categorie"].toString(),
style: TextStyle(
color: TColor.black,
fontSize: 12,
),
),
Text(
wObj["date"].toString(),
style: TextStyle(
color: TColor.black,
fontSize: 12,

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/view/main_tab/main_tab_view.dart';
import 'package:smartfit_app_mobile/view/login/signup_view.dart';
void main() {
runApp(ChangeNotifierProvider(
@ -36,7 +36,7 @@ class MyApp extends StatelessWidget {
primaryColor: TColor.primaryColor1,
fontFamily: "Poppins"),
//home: const StartedView(),
home: const MainTabView(),
home: const SignUpView(),
);
}
}

@ -3,20 +3,42 @@ import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:smartfit_app_mobile/common_widget/graph/graph.dart';
class ActivityOfUser {
late String _nomActivite;
// A afficher
late String _categorie;
late String _date;
late String _fileUuid;
late String _nameFile;
// ------------ //
late String _imageName;
late List<dynamic> _contentActivity;
late int _dataSession;
// -- Getter/Setter -- //
List<dynamic> get contentActivity => _contentActivity;
ActivityOfUser(String nom, List<dynamic> listeDynamic) {
_nomActivite = nom;
_imageName = "assets/img/workout1.svg";
_contentActivity = listeDynamic;
set contentActivity(List<dynamic> content) {
_contentActivity = content;
_dataSession = getDataSession();
}
String get fileUuid => _fileUuid;
String get nameFile => _nameFile;
ActivityOfUser(
String date, String categorie, String fileUuid, String nameFile) {
_categorie = categorie;
_date = date;
_fileUuid = fileUuid;
_nameFile = nameFile;
// Mettre dans une fonction appart
if (categorie == "Walking") {
_imageName = "assets/img/workout1.svg";
} else {
// Mettre des conditions pour d'autre type d'activité
_imageName = "assets/img/workout1.svg";
}
}
// ----- Retourne l'indice de la ligne qui contient les données de la session -- //
int getDataSession() {
for (int i = _contentActivity.length - 1; i != 0; i--) {
@ -287,9 +309,6 @@ class ActivityOfUser {
// -------------------------- FIN Localisation ---------------------- //
Map<String, dynamic> toMap() {
return {
'nomActivite': _nomActivite,
'image': _imageName,
};
return {'categorie': _categorie, 'image': _imageName, 'date': _date};
}
}

@ -73,7 +73,8 @@ class RequestApi extends IDataStrategy {
headers: <String, String>{'Authorization': token});
if (response.statusCode == 200) {
return Tuple2(true, response.body);
return Tuple2(true,
(json.decode(response.body) as List).cast<Map<String, dynamic>>());
}
if (response.statusCode == 401) {
return const Tuple2(false, "401 - UNAUTHORIZED");
@ -120,37 +121,6 @@ class RequestApi extends IDataStrategy {
return const Tuple2(false, "Fail");
}
/*
@override
Future<bool> updateEmail(String token, String email) async {
final response = await http.put(Uri.parse('$urlApi/$token/email'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{'email': email}));
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}
@override
Future<bool> updateUsername(String token, String username) async {
final response = await http.put(Uri.parse('$urlApi/$token/username'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{'username': username}));
if (response.statusCode == 200) {
return true;
} else {
return false;
}
}*/
@override
Future<Tuple2> modifAttribut(
String token, String nameAttribut, String newValue) async {

@ -27,10 +27,18 @@ class ManagerFile {
return fitFile.toRows();
}
List<dynamic> readFitFileWeb(Uint8List bytes) {
Future<List<dynamic>> readFitFileWhithFile(File file) async {
final bytes = await file.readAsBytes();
final fitFile = FitFile.fromBytes(bytes);
return fitFile.toRows();
}
List<dynamic> readFitFileWeb(Uint8List bytes) {
final fitFile = FitFile.fromBytes(bytes);
return fitFile.toRows();
}
// ------------- Get The path of application --- //
Future<String> get localPath async {
final directory = await getApplicationDocumentsDirectory();

@ -0,0 +1,6 @@
class AttributUser {
final String _email = "email";
final String _username = "username";
String get email => _email;
String get username => _username;
}

@ -0,0 +1,3 @@
class AttributFileFit {
// Ajouter une variable privé qui contient le champs + un getter
}

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:smartfit_app_mobile/modele/activity.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity.dart/list_activity_utile.dart';
class User extends ChangeNotifier {
String username = "VOID";
@ -22,4 +23,10 @@ class User extends ChangeNotifier {
listActivity.insert(index, activity);
notifyListeners();
}
void insertActivityTop(ActivityOfUser activity, BuildContext context) {
listActivity.insert(0, activity);
ListActivityUtile().getContentOnTheFirstFile(context);
notifyListeners();
}
}

@ -0,0 +1,31 @@
import 'dart:io';
import 'package:flutter/material.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/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:tuple/tuple.dart';
class ListActivityUtile {
final IDataStrategy _strategy = RequestApi();
final ManagerFile _managerFile = ManagerFile();
Future<void> getContentOnTheFirstFile(BuildContext context) async {
Tuple2 result = await _strategy.getFile(
Provider.of<User>(context, listen: false).token,
Provider.of<User>(context, listen: false).listActivity[0].fileUuid);
if (result.item1 == false) {
//Erreur
//print(result);
return;
}
File file = File(
"${await _managerFile.localPath}/${Provider.of<User>(context, listen: false).listActivity[0].nameFile}");
await file.create();
await file.writeAsBytes(result.item2);
Provider.of<User>(context, listen: false).listActivity[0].contentActivity =
await _managerFile.readFitFileWhithFile(file);
}
}

@ -26,12 +26,9 @@ class Login {
return Tuple2(true, result.item2);
}
void fillUser(BuildContext context, Map<String, dynamic> map, String token) {
print(map);
void fillUser(BuildContext context, Map<dynamic, dynamic> 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);
}
}

@ -0,0 +1,10 @@
import 'package:smartfit_app_mobile/modele/api/i_data_strategy.dart';
import 'package:smartfit_app_mobile/modele/api/request_api.dart';
class ProfileUtil {
final IDataStrategy _dataStrategy = RequestApi();
void modifyDataUser(String token, String attribut, String newUsername) {
_dataStrategy.modifAttribut(token, attribut, newUsername);
}
}

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
@ -5,9 +7,10 @@ import 'package:smartfit_app_mobile/common/colo_extension.dart';
import 'package:smartfit_app_mobile/modele/activity.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/manager_file.dart';
import 'package:smartfit_app_mobile/modele/user.dart';
import 'package:smartfit_app_mobile/common_widget/container/workout_row.dart';
import 'package:smartfit_app_mobile/modele/utile/list_activity.dart/list_activity_utile.dart';
import 'package:tuple/tuple.dart';
class MobileListActivity extends StatefulWidget {
const MobileListActivity({Key? key}) : super(key: key);
@ -19,8 +22,9 @@ class MobileListActivity extends StatefulWidget {
class _MobileListActivity extends State<MobileListActivity> {
FilePickerResult? result;
IDataStrategy strategy = RequestApi();
ManagerFile _managerFile = ManagerFile();
final ListActivityUtile _utile = ListActivityUtile();
/*
Future<void> readFile(String nom) async {
PlatformFile t = result!.files.single;
String? y = t.path;
@ -28,18 +32,61 @@ class _MobileListActivity extends State<MobileListActivity> {
print("t");
} else {
List<dynamic> result = await _managerFile.readFitFile(y!);
// Upload the file and Syncronise (getFiles())
strategy.uploadFile(context.watch<User>().token, File(y));
Provider.of<User>(context, listen: false)
.addActivity(ActivityOfUser(nom, result));
.addActivity(ActivityOfUser("Random date", "$nom categorie !"));
Provider.of<User>(context, listen: false)
.listActivity
.last
.contentActivity = result;
}
}*/
void addFile(String path) async {
Tuple2<bool, String> result = await strategy.uploadFile(
Provider.of<User>(context, listen: false).token, File(path));
if (result.item1 == false) {
// Afficher msg d'erreur
print("Upload - ${result.item2}");
return;
}
getFiles();
}
List lastWorkoutArr = [];
void getFiles() async {
Tuple2 result = await strategy
.getFiles(Provider.of<User>(context, listen: false).token);
if (result.item1 == false) {
print("GetFiles - ${result.item2}");
// Afficher une message d'erreur
return;
}
Provider.of<User>(context, listen: false).listActivity.clear();
for (Map<String, dynamic> element in result.item2) {
Provider.of<User>(context, listen: false).addActivity(ActivityOfUser(
element["creation_date"].toString(),
element["category"].toString(),
element["uuid"].toString(),
element["filename"].toString()));
}
_utile.getContentOnTheFirstFile(context);
return;
}
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;
int firstActivityIndex = 0;
if (Provider.of<User>(context).listActivity.isNotEmpty) {
_utile.getContentOnTheFirstFile(context);
}
return Scaffold(
backgroundColor: TColor.white,
body: SingleChildScrollView(
@ -60,16 +107,23 @@ class _MobileListActivity extends State<MobileListActivity> {
fontSize: 16,
fontWeight: FontWeight.w700),
),
TextButton(
onPressed: getFiles,
child: Text("Get activity",
style: TextStyle(
color: TColor.gray,
fontSize: 14,
fontWeight: FontWeight.w700))),
TextButton(
onPressed: () async {
result = await FilePicker.platform.pickFiles();
if (result == null) {
print("No file selected");
FilePickerResult? result =
await FilePicker.platform.pickFiles();
if (result != null) {
addFile(result.files.single.path!);
} else {
for (var element in result!.files) {
readFile(element.name);
print(element.name);
}
print("Picker");
// msg d'erreur
// User canceled the picker
}
},
child: Text(
@ -86,7 +140,7 @@ class _MobileListActivity extends State<MobileListActivity> {
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 20),
const SizedBox(height: 20),
Text(
"Vous n'avez pas d'activités pour le moment, veuillez en ajouter.",
style: TextStyle(
@ -109,7 +163,7 @@ class _MobileListActivity extends State<MobileListActivity> {
itemBuilder: (context, index) {
var activityObj =
Provider.of<User>(context, listen: true)
.listActivity[index] as ActivityOfUser;
.listActivity[index];
var activityMap = activityObj.toMap();
bool isFirstActivity = false;
@ -136,7 +190,7 @@ class _MobileListActivity extends State<MobileListActivity> {
Provider.of<User>(context, listen: false)
.removeActivity(activityObj);
Provider.of<User>(context, listen: false)
.insertActivity(0, activityObj);
.insertActivityTop(activityObj, context);
},
isFirstActivity: isFirstActivity,
),

@ -24,8 +24,6 @@ class _WebListActivityState extends State<WebListActivity> {
IDataStrategy strategy = RequestApi();
int firstActivityIndex = 0;
//late File x = File(file.path);
void readFile(html.File file) async {
ManagerFile x = ManagerFile();
final reader = html.FileReader();
@ -34,14 +32,16 @@ class _WebListActivityState extends State<WebListActivity> {
if (reader.readyState == html.FileReader.DONE) {
Uint8List bytes = reader.result as Uint8List;
List<dynamic> result = x.readFitFileWeb(bytes);
Provider.of<User>(context, listen: false).addActivity(
ActivityOfUser("Date random", "${file.name} Categorie", "", ""));
Provider.of<User>(context, listen: false)
.addActivity(ActivityOfUser(file.name, result));
.listActivity
.last
.contentActivity = result;
}
});
}
List lastWorkoutArr = [];
@override
Widget build(BuildContext context) {
var media = MediaQuery.of(context).size;

Loading…
Cancel
Save