diff --git a/.idea/Daflv4.iml b/.idea/Daflv4.iml index 7d01c35..77aa9fc 100644 --- a/.idea/Daflv4.iml +++ b/.idea/Daflv4.iml @@ -11,6 +11,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 3dbed52..008f0f6 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/Images/Backlog.png b/Documentation/Images/Backlog.png new file mode 100644 index 0000000..5ed4787 Binary files /dev/null and b/Documentation/Images/Backlog.png differ diff --git a/Documentation/Images/backlog.png b/Documentation/Images/backlog.png deleted file mode 100644 index 8fe46dc..0000000 Binary files a/Documentation/Images/backlog.png and /dev/null differ diff --git a/Sources/dafl_project_flutter/assets/images/EmptyDiscovery-Hint.png b/Sources/dafl_project_flutter/assets/images/EmptyDiscovery-Hint.png new file mode 100644 index 0000000..8fd7351 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/EmptyDiscovery-Hint.png differ diff --git a/Sources/dafl_project_flutter/assets/images/backgroundNotify.png b/Sources/dafl_project_flutter/assets/images/backgroundNotify.png new file mode 100644 index 0000000..40afbec Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/backgroundNotify.png differ diff --git a/Sources/dafl_project_flutter/assets/images/delete_background.png b/Sources/dafl_project_flutter/assets/images/delete_background.png new file mode 100644 index 0000000..0034184 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/delete_background.png differ diff --git a/Sources/dafl_project_flutter/assets/images/errorNotify.png b/Sources/dafl_project_flutter/assets/images/errorNotify.png new file mode 100644 index 0000000..b8d9a71 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/errorNotify.png differ diff --git a/Sources/dafl_project_flutter/assets/images/error_animation.riv b/Sources/dafl_project_flutter/assets/images/error_animation.riv new file mode 100644 index 0000000..8e33a84 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/error_animation.riv differ diff --git a/Sources/dafl_project_flutter/assets/images/error_icon.riv b/Sources/dafl_project_flutter/assets/images/error_icon.riv new file mode 100644 index 0000000..3339560 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/error_icon.riv differ diff --git a/Sources/dafl_project_flutter/assets/images/valid_background.png b/Sources/dafl_project_flutter/assets/images/valid_background.png new file mode 100644 index 0000000..f1fdf26 Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/valid_background.png differ diff --git a/Sources/dafl_project_flutter/assets/images/valid_icon.riv b/Sources/dafl_project_flutter/assets/images/valid_icon.riv new file mode 100644 index 0000000..b41eb2c Binary files /dev/null and b/Sources/dafl_project_flutter/assets/images/valid_icon.riv differ diff --git a/Sources/dafl_project_flutter/lib/controller/controller.dart b/Sources/dafl_project_flutter/lib/controller/controller.dart index f3e632f..7da6b68 100644 --- a/Sources/dafl_project_flutter/lib/controller/controller.dart +++ b/Sources/dafl_project_flutter/lib/controller/controller.dart @@ -1,19 +1,24 @@ -import 'package:dafl_project_flutter/persistence/database_loader.dart'; -import 'package:dafl_project_flutter/persistence/database_saver.dart'; -import 'package:dafl_project_flutter/persistence/loader.dart'; +import '../persistence/database_loader.dart'; +import '../persistence/database_saver.dart'; +import '../persistence/database_searcher.dart'; +import '../persistence/loader.dart'; import '../persistence/saver.dart'; import '../persistence/loader.dart'; import '../model/user.dart'; +import '../persistence/searcher.dart'; class Controller{ static Controller? _this; - static Saver? saver = DatabaseSaver(); - static Loader? loader = DatabaseLoader(); + static Saver saver = DatabaseSaver(); + static Loader loader = DatabaseLoader(); + static Searcher _searcher = DatabaseSearcher(); + + + User currentUser = User("", ""); - Future? currentUser; factory Controller(){ if (_this == null) _this = Controller._(); @@ -23,13 +28,33 @@ class Controller{ Controller._(); void save(User userToSave){ - saver?.save(userToSave); + saver.save(userToSave); } - void load(String username, String password) async{ - currentUser = loader?.load(username, password); + Future load(String username, String password) async{ + changeCurrentUser(await loader.load(username, password)); } -} + User createUser(String username, String password){ + return User(username, password); + } + void changeCurrentUser(User user){ + this.currentUser = user; + } + void changeUsernameCourant(String newName){ + if(newName !=null){ + this.currentUser.usernameDafl = newName; + } + } + void changePasswordCourant(String newPass){ + if(newPass !=null){ + this.currentUser.passwDafl = newPass; + } + } + + Future searchByUsername(String username) async{ + return await _searcher.searchByUsername(username); + } +} diff --git a/Sources/dafl_project_flutter/lib/main.dart b/Sources/dafl_project_flutter/lib/main.dart index 95d07d8..19fa439 100644 --- a/Sources/dafl_project_flutter/lib/main.dart +++ b/Sources/dafl_project_flutter/lib/main.dart @@ -1,30 +1,30 @@ import 'dart:async'; -import 'package:dafl_project_flutter/persistence/database_saver.dart'; import 'package:fluttertoast/fluttertoast.dart'; -import 'package:path_provider/path_provider.dart'; +import 'package:vibration/vibration.dart'; import 'dart:math'; import './views/pages/home/p_home.dart'; import './views/pages/main/p_main.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; -import 'package:rive/rive.dart'; -import 'package:dafl_project_flutter/controller/controller.dart'; - - +import 'package:rive/rive.dart' as riv; +import '../controller/controller.dart'; +import '../model/music.dart'; +import 'model/music.dart'; void main() { MyApp mainApp = MyApp(); - - runApp(mainApp); + runApp(MyApp()); } - class MyApp extends StatelessWidget { + Controller controller = Controller(); + // This widget is the root of your application. @override Widget build(BuildContext context){ + Paint.enableDithering = true; SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersiveSticky); return ChangeNotifierProvider( create: (context) => CardProvider(), @@ -37,38 +37,22 @@ class MyApp extends StatelessWidget { } } -enum CardStatus { like, disLike, discovery} +enum CardStatus { like, disLike, discovery, message} class CardProvider extends ChangeNotifier{ - List _urlImages = []; + List _spotsList = MyApp().controller.currentUser.Spots; bool _isDragging = false; double _angle = 0; Offset _position = Offset.zero; Size _screenSize = Size.zero; - List get urlImages => _urlImages; + List get spotsList => _spotsList; bool get isDragging => _isDragging; Offset get position => _position; double get angle => _angle; - CardProvider() { - resetUsers(); - } - void resetUsers() { - _urlImages = [ - 'https://khaligidilit.com/assets/images/cover-LAI%CC%88LA-Khali.jpeg', - 'https://m.media-amazon.com/images/I/61aUOMzwS8L._SL1440_.jpg', - 'https://pbs.twimg.com/media/ExJ-My-XMAE3Ko2.jpg', - 'https://cdns-images.dzcdn.net/images/cover/2818a661c6d533155ce6dffc256b1f51/500x500.jpg', - 'https://cdns-images.dzcdn.net/images/cover/b351f0e935c9c3901f8d893b92ab952a/500x500.jpg', - 'https://cdns-images.dzcdn.net/images/cover/65147b581f2ace9e0f0723ee76e70fda/500x500.jpg', - 'https://cdns-images.dzcdn.net/images/cover/173b96be8ac025fb9578b0139010bc80/500x500.jpg', - 'https://cdns-images.dzcdn.net/images/cover/17a9747927ac3e5ea56f92f635d9180c/500x500.jpg', - ].reversed.toList(); - notifyListeners(); - } void setScreenSize(Size screenSize) => _screenSize = screenSize; @@ -87,7 +71,7 @@ class CardProvider extends ChangeNotifier{ notifyListeners(); } - void endPosition() { + void endPosition(context) { _isDragging = false; notifyListeners(); @@ -96,7 +80,7 @@ class CardProvider extends ChangeNotifier{ switch (status) { case CardStatus.like: - like(); + like(context); break; case CardStatus.disLike: dislike(); @@ -104,6 +88,9 @@ class CardProvider extends ChangeNotifier{ case CardStatus.discovery: discovery(); break; + case CardStatus.message: + message(context); + break; default: resetPosition(); } @@ -127,7 +114,8 @@ class CardProvider extends ChangeNotifier{ CardStatus? getStatus({bool force = false}) { final x = _position.dx; final y = _position.dy; - final forceDiscovery = x.abs() < 20; + final forceDiscovery = x.abs() < 80; + final forceMessage = x.abs() < 100; if(force) { final delta = 100; @@ -136,15 +124,19 @@ class CardProvider extends ChangeNotifier{ return CardStatus.like; } else if ( x <= -delta){ return CardStatus.disLike; - } else if ( y <= -delta / 2 && forceDiscovery){ + } else if ( y <= -delta/2 && forceDiscovery){ + return CardStatus.message; + } else if (y >= delta * 2 && x.abs() < 100) { return CardStatus.discovery; } } else{ final delta = 20; if(y <= -delta * 2 && forceDiscovery) { + return CardStatus.message; + } else if (y >= delta *2 && x.abs() < 80) { return CardStatus.discovery; - } else if ( x >= delta) { + }else if ( x >= delta) { return CardStatus.like; } else if ( x <= -delta) { return CardStatus.disLike; @@ -161,43 +153,188 @@ class CardProvider extends ChangeNotifier{ } void discovery() { - print("discovery"); _angle = 0; - _position -= Offset(0, _screenSize.height); + _position -= Offset(0, -_screenSize.height); _discovery_card(); - Fluttertoast.showToast( - msg: 'Ajouté', - toastLength: Toast.LENGTH_SHORT, - gravity: ToastGravity.TOP, - timeInSecForIosWeb: 2, - backgroundColor: Colors.deepPurple, - textColor: Colors.white - ); + print("discovery"); + if(MyApp().controller.currentUser.Discovery.contains(MyApp().controller.currentUser.Spots?.last)){ + MyApp().controller.currentUser.Discovery.remove(MyApp().controller.currentUser.Spots?.last); + Fluttertoast.showToast( + msg: 'Supprimer', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.TOP, + timeInSecForIosWeb: 2, + backgroundColor: Colors.red, + textColor: Colors.white + ); + } + else{ + if(MyApp().controller.currentUser.Spots?.last != null){ + MyApp().controller.currentUser.addDiscovery(MyApp().controller.currentUser.Spots.last); + Fluttertoast.showToast( + msg: 'Ajouté', + toastLength: Toast.LENGTH_SHORT, + gravity: ToastGravity.TOP, + timeInSecForIosWeb: 2, + backgroundColor: Colors.deepPurple, + textColor: Colors.white + ); + notifyListeners(); + } + + } + + } + void message(context) { + print("message"); + _angle = 0; + _position -= Offset(0, _screenSize.height); + _message_card(); + showModalBottomSheet( + isDismissible: false, + useRootNavigator: true, + isScrollControlled: true, + backgroundColor: Colors.transparent, + context: context, + constraints: BoxConstraints( + maxWidth: 600, + maxHeight: double.infinity, + ), + builder: (context) => buildSheet(),); notifyListeners(); } + Widget buildSheet() => Container( + height: 550, + width: 350, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.4), + offset: const Offset( + 0, + 0, + ), + blurRadius: 10.0, + spreadRadius: 2.0, + ), + BoxShadow( + color: Colors.white.withOpacity(0.3), + offset: const Offset(0.0, 0.0), + blurRadius: 0.0, + spreadRadius: 0.0, + ),//BoxShadow//BoxShadow + ], + color: Color(0xFF232123), + borderRadius: BorderRadius.only( + topRight: Radius.circular(30), + topLeft: Radius.circular(30), + ), + ), + child: Padding( + padding: EdgeInsets.fromLTRB(20, 10, 20, 10), + child: Column( + children: [ + + Container( + height: 5, + width: 130, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Color(0xFF8A8A8A), + ), + ), + SizedBox(height: 30,), + Container( + width: double.infinity, + height: 300, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Color(0xFF302C30), + ), + child: Padding( + padding: EdgeInsets.all(20), + child: TextField( + maxLength: 300, + style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 17, fontWeight: FontWeight.w200), + expands: true, + maxLines: null, + keyboardType: TextInputType.multiline, + decoration: InputDecoration( + hintStyle: TextStyle( + color: Colors.white, + ), + border: InputBorder.none, + hintText: "Mon message", + ), + ), + ), + ), + SizedBox(height: 20,), + SizedBox( + width: double.infinity, + height: 70, + child: ElevatedButton( + onPressed: () {}, + style: ElevatedButton.styleFrom( + primary: Color(0xFF3F1DC3), + textStyle: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(17) + ), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Text("Envoyer"), + Opacity(opacity: 0.2, + child: Image.asset("assets/images/send_logo.png",),) + ], + ), + ), + ) + ], + ), + ), - void like() { + ); + + + void like(context) { print("like"); _angle = 20; _position += Offset(2 * _screenSize.width, 0); _nextCard(); - notifyListeners(); + } Future _nextCard() async { - if ( _urlImages.isEmpty) return; + print(_spotsList.length); + if (_spotsList.isEmpty) { + print('dernier'); + return; + } + else { + await Future.delayed(Duration(milliseconds: 200)); + print(_spotsList.last.name); + _spotsList.removeLast(); + resetPosition(); + } + } + Future _discovery_card() async { await Future.delayed(Duration(milliseconds: 200)); - _urlImages.removeLast(); resetPosition(); } - Future _discovery_card() async { + Future _message_card() async { await Future.delayed(Duration(milliseconds: 200)); resetPosition(); } + } @@ -238,7 +375,7 @@ class _SplashState extends State { Container( height: 300, width: 300, - child: RiveAnimation.asset('assets/images/new_file (2).riv'), + child: riv.RiveAnimation.asset('assets/images/new_file (2).riv'), ), SizedBox(height: 50), ], @@ -247,3 +384,166 @@ class _SplashState extends State { ); } } +Object Notify(int index, context, {bool isError = true}){ + String message; + if(isError == true){ + switch(index){ + case 0: { + message = "Ce nom d'utilisateur existe déjà ! Veuillez réessayer."; + break; + } + case 1: { + message = "Mots de passe différents ! Veuillez réessayer."; + break; + } + case 2: { + message = "Identifiant incorrect ! Veuillez réessayer."; + break; + } + case 3: { + message = "Mot de passe incorrect ! Votre mot de passe doit contenir 8 caractères minimum."; + break; + } + case 4: { + message = "Mot de passe incorrect ! Veuillez réessayer."; + break; + } + default: + message = "Une erreur est survenue pendant l'inscription. Veuillez réessayer."; + break; + + } + return ScaffoldMessenger.of(context).showSnackBar( SnackBar( + dismissDirection: DismissDirection.down, + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.transparent, + elevation: 0, + content: Stack( + clipBehavior: Clip.none, + children: [ + + Container( + padding: EdgeInsets.all(16), + height: 90, + child: Row( + children: [ + Container( + height: 48, + width: 48, + ), + Expanded(child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Oh oh !", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),), + Text(message,style: TextStyle( + ), + overflow: TextOverflow.ellipsis, + maxLines: 2,), + ], + ),), + ], + ), + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/backgroundNotify.png"), + fit: BoxFit.cover), + gradient: LinearGradient(colors: [Color(0xFF81052a),Color(0xFF810548)],begin: Alignment.topLeft, end: Alignment.bottomRight), + borderRadius: BorderRadius.all(Radius.circular(20)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 10, + offset: Offset(4, 8), // Shadow position + ), + ], + ), + ), + Positioned( + top: -50, + left: -20, + child: Container( + color: Colors.transparent, + height: 110, + width: 110, + child: riv.RiveAnimation.asset("assets/images/error_icon.riv"),)), + ], + ) + )); + } + else{ + switch(index){ + case 0: { + message = "Vous avez changer votre identifiant avec succès"; + break; + } + case 1: { + message = "Vous avez changer votre mot de passe avec succès"; + break; + } + default: + message = "L'opération a bien été éxécutée"; + break; + + } + return ScaffoldMessenger.of(context).showSnackBar( SnackBar( + dismissDirection: DismissDirection.down, + behavior: SnackBarBehavior.floating, + backgroundColor: Colors.transparent, + elevation: 0, + content: Stack( + clipBehavior: Clip.none, + children: [ + + Container( + padding: EdgeInsets.all(16), + height: 90, + child: Row( + children: [ + Container( + height: 48, + width: 48, + ), + Expanded(child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text("Super !", style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),), + Text(message,style: TextStyle( + ), + overflow: TextOverflow.ellipsis, + maxLines: 2,), + ], + ),), + ], + ), + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/valid_background.png"), + fit: BoxFit.cover), + gradient: LinearGradient(colors: [Color(0xFF81052a),Color(0xFF810548)],begin: Alignment.topLeft, end: Alignment.bottomRight), + borderRadius: BorderRadius.all(Radius.circular(20)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.3), + blurRadius: 10, + offset: Offset(4, 8), // Shadow position + ), + ], + ), + ), + Positioned( + top: -50, + left: -20, + child: Container( + color: Colors.transparent, + height: 110, + width: 110, + child: riv.RiveAnimation.asset("assets/images/valid_icon.riv"),)), + ], + ) + )); + + } + +} + + diff --git a/Sources/dafl_project_flutter/lib/model/music.dart b/Sources/dafl_project_flutter/lib/model/music.dart new file mode 100644 index 0000000..74bb1ab --- /dev/null +++ b/Sources/dafl_project_flutter/lib/model/music.dart @@ -0,0 +1,19 @@ +class Music{ + String name; + String artist; + String linkCover; + + Music(this.name, this.artist, this.linkCover); + + + @override + bool operator ==(Object other) => + identical(this, other) || + other is Music && + runtimeType == other.runtimeType && + name == other.name && + artist == other.artist; + + @override + int get hashCode => name.hashCode ^ artist.hashCode; +} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/model/user.dart b/Sources/dafl_project_flutter/lib/model/user.dart index c23a3e2..0509730 100644 --- a/Sources/dafl_project_flutter/lib/model/user.dart +++ b/Sources/dafl_project_flutter/lib/model/user.dart @@ -1,27 +1,77 @@ +import 'package:dafl_project_flutter/main.dart'; +import 'package:dafl_project_flutter/model/message.dart'; + import 'conversation.dart'; +import 'music.dart'; class User{ //attributes from DAFL - int? idDafl; - String? usernameDafl; - String? passwDafl; + late int _idDafl; + late String _usernameDafl; + late String _passwDafl; + //attributes to link with API - String? usernameAPI; - String? passwAPI; + late String _usernameAPI; + late String _passwAPI; + + + + // Getters for attributes + int get idDafl => _idDafl; + String get passwAPI => _passwAPI; + String get usernameDafl => _usernameDafl; + String get passwDafl => _passwDafl; + String get usernameAPI => _usernameAPI; + + // Setters for attributes + set idDafl(int value) { _idDafl = value; } + set usernameDafl(String value) { _usernameDafl = value; } + set passwDafl(String value) { _passwDafl = value; } + set usernameAPI(String value) { _usernameAPI = value; } + set passwAPI(String value) { _passwAPI = value; } + + //constructors - User(this.usernameDafl, this.passwDafl); + User(this._usernameDafl, this._passwDafl); - User.name(this.usernameDafl); + User.name(this._usernameDafl); + + User.fromDatabase(this._idDafl, this._usernameDafl); - User.fromDatabase(this.idDafl, this.usernameDafl); //lists Set likedUsers={}; + List Discovery=[]; + List waitingConv=[]; + List confirmConv=[]; + + Music currentSong = Music('Couleurs','Khali','https://khaligidilit.com/assets/images/cover-LAI%CC%88LA-Khali.jpeg'); + + List Spots=[ + Music('Couleurs','Khali','https://khaligidilit.com/assets/images/cover-LAI%CC%88LA-Khali.jpeg'), + Music("J'suis PNL",'PNL','https://m.media-amazon.com/images/I/61aUOMzwS8L._SL1440_.jpg'), + Music('Sundance','Nepal','https://pbs.twimg.com/media/ExJ-My-XMAE3Ko2.jpg'), + Music('Eternelle 2','So La Lune','https://cdns-images.dzcdn.net/images/cover/2818a661c6d533155ce6dffc256b1f51/500x500.jpg'), + Music('M.I.L.S 3','Ninho','https://cdns-images.dzcdn.net/images/cover/b351f0e935c9c3901f8d893b92ab952a/500x500.jpg'), + Music('Deux frères','PNL','https://cdns-images.dzcdn.net/images/cover/65147b581f2ace9e0f0723ee76e70fda/500x500.jpg'), + Music('Paradis','Sopico','https://cdns-images.dzcdn.net/images/cover/17a9747927ac3e5ea56f92f635d9180c/500x500.jpg')].reversed.toList(); Map conversations={}; + + void addDiscovery(Music newmusic){ + if(MyApp().controller.currentUser.Discovery == null){ + + } + else{ + MyApp().controller.currentUser.Discovery.add(newmusic); + } + + + } + void like(User liked){ likedUsers.add(liked); Conversation? conv = liked.conversations[this]; @@ -42,5 +92,5 @@ class User{ } @override - String toString() => "$usernameDafl ($idDafl)"; + String toString() => "$usernameDafl ($passwDafl)"; } \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/model/user_creator.dart b/Sources/dafl_project_flutter/lib/model/user_creator.dart deleted file mode 100644 index 07029e6..0000000 --- a/Sources/dafl_project_flutter/lib/model/user_creator.dart +++ /dev/null @@ -1,8 +0,0 @@ -import 'user.dart'; - -class UserCreator{ - - User? createUser(int id, String username){ - - } -} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/persistence/.logs/.gitkeep b/Sources/dafl_project_flutter/lib/persistence/.logs/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/dafl_project_flutter/lib/persistence/.logs/logs.txt b/Sources/dafl_project_flutter/lib/persistence/.logs/logs.txt deleted file mode 100644 index f589036..0000000 --- a/Sources/dafl_project_flutter/lib/persistence/.logs/logs.txt +++ /dev/null @@ -1,5 +0,0 @@ -postgres -mdpDaflBd -89.83.54.48 -BD-DaflMusic - diff --git a/Sources/dafl_project_flutter/lib/persistence/database_connexion.dart b/Sources/dafl_project_flutter/lib/persistence/database_connexion.dart index 72028bc..d7fe1ed 100644 --- a/Sources/dafl_project_flutter/lib/persistence/database_connexion.dart +++ b/Sources/dafl_project_flutter/lib/persistence/database_connexion.dart @@ -1,6 +1,5 @@ import 'dart:convert'; import 'dart:io'; - import 'package:flutter/services.dart'; import 'package:path_provider/path_provider.dart'; @@ -9,16 +8,23 @@ import 'package:postgresql2/constants.dart'; import 'package:postgresql2/pool.dart'; import 'package:postgresql2/postgresql.dart'; + class DatabaseConnexion{ - final String filePath = 'assets/logs.txt'; + // Path to the file containing the database identifiers + static final String filePath = 'assets/logs.txt'; + - String? _psqlUser; - String? _psqlPswd; - String? _psqlHost; - String? _psqlDataBase; + // Database identifiers + static String? _psqlUser; + static String? _psqlPswd; + static String? _psqlHost; + static String? _psqlDataBase; - Future _loadLogs() async{ + + + // Read the database connection identifiers in a file + static Future _loadLogs() async{ try{ final _loadedData = await rootBundle.loadString(filePath); @@ -35,12 +41,20 @@ class DatabaseConnexion{ } - //Initialise connection to the database - Future initConnexion() async{ - await _loadLogs(); - var uri = 'postgres://$_psqlUser:$_psqlPswd@$_psqlHost:5442/$_psqlDataBase'; + //Initialise and open a connection to the database + static Future initConnexion() async{ + if(_psqlHost == null || _psqlPswd == null || _psqlUser == null || _psqlDataBase == null){ + await _loadLogs(); + } - return connect(uri); + try{ + var uri = 'postgres://$_psqlUser:$_psqlPswd@$_psqlHost:5442/$_psqlDataBase'; + + return connect(uri); + } + catch(e){ + throw Exception('Connection to database : IMPOSSIBLE'); + } } } \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/persistence/database_loader.dart b/Sources/dafl_project_flutter/lib/persistence/database_loader.dart index ae4bebc..4c3bc53 100644 --- a/Sources/dafl_project_flutter/lib/persistence/database_loader.dart +++ b/Sources/dafl_project_flutter/lib/persistence/database_loader.dart @@ -1,20 +1,27 @@ -import '../persistence/loader.dart'; +import 'dart:async'; + +import 'loader.dart'; import '../model/user.dart'; import 'database_connexion.dart'; class DatabaseLoader extends Loader{ - DatabaseConnexion dbConnexion = DatabaseConnexion(); + // Load an user from database @override - Future load(String? username, String? password) async { - final connection = await dbConnexion.initConnexion(); + Future load(String username, String password) async { + final connection = await DatabaseConnexion.initConnexion(); - connection.query('select * from utilisateur where username = @username AND password = @password', + var queryResult = await connection.query('select * from utilisateur where username = @username AND password = @password', {'username': username, 'password': password}).toList() .then((result) { - print(result); }); + print(result); + if(result.isNotEmpty) return User(username, password); + else return User("", ""); + }).whenComplete(() { + connection.close();}); + + return queryResult; } } - diff --git a/Sources/dafl_project_flutter/lib/persistence/database_saver.dart b/Sources/dafl_project_flutter/lib/persistence/database_saver.dart index 3019a57..25ab875 100644 --- a/Sources/dafl_project_flutter/lib/persistence/database_saver.dart +++ b/Sources/dafl_project_flutter/lib/persistence/database_saver.dart @@ -5,15 +5,21 @@ import '../model/user.dart'; class DatabaseSaver extends Saver{ - DatabaseConnexion dbConnexion = DatabaseConnexion(); + + // Save user in the database @override void save(User userToSave) async{ - final connection = await dbConnexion.initConnexion(); + final connection = await DatabaseConnexion.initConnexion(); connection.execute('insert into utilisateur (username, password) values (@username, @password)', { 'id' : '', 'username': userToSave.usernameDafl, - 'password' : userToSave.passwDafl}).then((_) {}); + 'password' : userToSave.passwDafl}) + + .whenComplete(() { + connection.close(); + }); } -} + +} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/persistence/database_search.dart b/Sources/dafl_project_flutter/lib/persistence/database_search.dart deleted file mode 100644 index e69de29..0000000 diff --git a/Sources/dafl_project_flutter/lib/persistence/database_searcher.dart b/Sources/dafl_project_flutter/lib/persistence/database_searcher.dart new file mode 100644 index 0000000..a01721b --- /dev/null +++ b/Sources/dafl_project_flutter/lib/persistence/database_searcher.dart @@ -0,0 +1,26 @@ +import 'package:dafl_project_flutter/persistence/database_connexion.dart'; + +import 'searcher.dart'; + + + +class DatabaseSearcher extends Searcher{ + Future searchUser(String? username, String? password) async { return true; } + + + + // Search an user in the database by username + @override + Future searchByUsername(String? usernameToSearch) async{ + final connection = await DatabaseConnexion.initConnexion(); + + bool queryResult = await connection.query('select * from utilisateur where username = @username',{ 'username' : usernameToSearch}) + .toList() + .then((rows) { return rows.isEmpty; }).whenComplete(() { + connection.close();}); + + + return queryResult; + } + +} diff --git a/Sources/dafl_project_flutter/lib/persistence/loader.dart b/Sources/dafl_project_flutter/lib/persistence/loader.dart index 9133993..2adf991 100644 --- a/Sources/dafl_project_flutter/lib/persistence/loader.dart +++ b/Sources/dafl_project_flutter/lib/persistence/loader.dart @@ -1,5 +1,7 @@ +import 'dart:async'; + import '../model/user.dart'; abstract class Loader{ - Future load(String? username, String? password); + Future load(String username, String password); } \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/persistence/searcher.dart b/Sources/dafl_project_flutter/lib/persistence/searcher.dart index 76bb714..276a197 100644 --- a/Sources/dafl_project_flutter/lib/persistence/searcher.dart +++ b/Sources/dafl_project_flutter/lib/persistence/searcher.dart @@ -1,6 +1,6 @@ import '../model/user.dart'; -abstract class Search{ - bool searchUser(String? username, String? password); - bool searchUsername(String? username); +abstract class Searcher{ + Future searchUser(String? username, String? password); + Future searchByUsername(String? username); } \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/views/pages/home/p_home.dart b/Sources/dafl_project_flutter/lib/views/pages/home/p_home.dart index 737d33c..781c451 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/home/p_home.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/home/p_home.dart @@ -28,30 +28,12 @@ class _HomePageState extends State { crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.end, children: [ - + Spacer(), Image.asset( 'assets/images/Logo.png', - width: 200, + width: 230, ), - SizedBox(height: height*0.04,), - SizedBox( - height: 55, - width: width*0.75, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFF24CF5F), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(15.0), - ),// background// foreground - ), - onPressed: () { - }, - child: Text("CONTINUER AVEC SPOTIFY", - style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.bold), - textAlign: TextAlign.center, - ), - ),), - SizedBox(height: height*0.015,), + SizedBox(height: height*0.08,), SizedBox( height: 55, width: width*0.75, @@ -76,7 +58,7 @@ class _HomePageState extends State { textAlign: TextAlign.center, ), ),), - SizedBox(height: 220,), + Spacer(), GestureDetector( onTap: (){ Navigator.of(context).push( @@ -112,18 +94,9 @@ class _HomePageState extends State { ], ), - Align( - alignment: Alignment.topRight, - child: Container( - padding: EdgeInsets.fromLTRB(0, 20, 20, 0), - child: Text("v1.0", - style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.5) ,fontSize: 17, fontWeight: FontWeight.w700), - ), - ) - ), ], ), ); } -} +} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart b/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart new file mode 100644 index 0000000..30580f7 --- /dev/null +++ b/Sources/dafl_project_flutter/lib/views/pages/main/p_conversation.dart @@ -0,0 +1,161 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttericon/font_awesome5_icons.dart'; + +class ConversationPage extends StatefulWidget { + const ConversationPage({Key? key}) : super(key: key); + + @override + State createState() => _ConversationPageState(); +} + +class _ConversationPageState extends State { + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + return Scaffold( + extendBodyBehindAppBar: true, + resizeToAvoidBottomInset: true, + appBar: AppBar( + backgroundColor: Color(0xFF141414), + toolbarHeight: 70, + title: Container( + child: Row( + children: [ + Container( + padding: EdgeInsets.fromLTRB(0, 10, 0, 0), + height: 40, + width: 40, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(40), + color: Colors.blue, + ), + ), + SizedBox(width: 20,), + Text("Max"), + + ], + ), + ), + + elevation: 0, + ), + body: SingleChildScrollView( + child: + Container( + color: Color(0xFF141414), + height: height*0.92, + width: double.infinity, + child: ListView( + reverse: true, + scrollDirection: Axis.vertical, + children: [ + Message('Adolescebat autem obstinatum propositum erga haec et similia multa scrutanda, stimulos admovente regina, quae abrupte mariti fortunas trudebat in exitium praeceps, cum eum potius lenitate feminea ad veritatis humanitatisque viam reducere utilia suadendo deberet, ut in Gordianorum actibus factitasse Maximini truculenti illius imperatoris rettulimus coniugem.', 0), + Message('Claudiopolis olim Seleucia Caesar potens quidem olim interneciva enim et.', 1), + Message('Quae quae praeceps feminea quae truculenti humanitatisque cum humanitatisque in truculenti abrupte imperatoris mariti regina regina ad lenitate veritatis veritatis.', 1), + Message('Quae quae praeceps feminea quae truculenti humanitatisque cum humanitatisque in truculenti abrupte imperatoris mariti regina regina ad lenitate veritatis veritatis.', 0), + Message('Quae quae praeceps feminea quae truculenti humanitatisque cum humanitatisque in truculenti abrupte imperatoris mariti regina regina ad lenitate veritatis veritatis.', 0), + Message('Quae quae praeceps feminea quae truculenti humanitatisque cum humanitatisque in truculenti abrupte imperatoris mariti regina regina ad lenitate veritatis veritatis.', 1), + ], + ), + + ), + ), + bottomSheet: BottomAppBar( + color: Color(0xFF141414), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + crossAxisAlignment: CrossAxisAlignment.center, + + children: [ + Container( + height: height*0.08, + color: Colors.transparent, + width: width*0.8, + child: Container( + margin: EdgeInsets.fromLTRB(20, 10, 0, 10), + decoration: BoxDecoration( + border: Border.all( + width: 1, + color: Color(0xFF2F2F2F), + ), + borderRadius: BorderRadius.circular(100), + color: Color(0xFF141414), + + ), + child: Padding( + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + child: TextField( + style: TextStyle(color: Colors.white), + decoration: InputDecoration( + hintStyle: TextStyle(color: Colors.white), + border: InputBorder.none, + hintText: "Envoyer un message...", + ), + cursorColor: Colors.purple, + textAlign: TextAlign.left, + ), + ), + ), + ), + Container( + width: 40, + height: 40, + margin: EdgeInsets.fromLTRB(0, 0, 0, 0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100), + color: Colors.blue, + ), + child: Icon(Icons.send, size: 20, color: Colors.white,), + ) + ], + ), + ), + + ); + } + + Widget Message(String message, int user) { + if(user == 0){ + return Container( + margin: EdgeInsets.fromLTRB(40, 7, 80, 7), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(20), + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + bottomLeft: Radius.circular(20), + ), + border: Border.all(width: 1.5, + color: Color(0xFF9C9C9C).withOpacity(0.3)), + color: Color(0xFF191919), + ), + child: Padding( + padding: EdgeInsets.fromLTRB(15, 15, 15, 15), + child: Text(message,style: TextStyle(fontFamily: 'DMSans', color: Colors.white ,fontSize: 15, fontWeight: FontWeight.w400), + )), + ); + } + else{ + return Container( + margin: EdgeInsets.fromLTRB(80, 7, 40, 7), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(20), + bottomLeft: Radius.circular(20), + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + color: Color(0xFF2F2F2F), + ), + child: Padding( + padding: EdgeInsets.fromLTRB(15, 15, 15, 15), + child: Text(message,style: TextStyle(fontFamily: 'DMSans', color: Colors.white ,fontSize: 15, fontWeight: FontWeight.w400), + )), + ); + } + + + } +} diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/p_main.dart b/Sources/dafl_project_flutter/lib/views/pages/main/p_main.dart index dc3ed46..0764fe9 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/p_main.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/p_main.dart @@ -4,8 +4,7 @@ import './w_settings.dart'; import './w_spot.dart'; import './w_discovery.dart'; import './w_profile.dart'; -import '../../../position/location.dart'; - +import './w_messages.dart'; class MainPage extends StatefulWidget { const MainPage({Key? key}) : super(key: key); @@ -20,48 +19,47 @@ class _MainPageState extends State { int get index => _index; final screens = [ ProfilWidget(), - DiscoveryWidget(), + new DiscoveryWidget(), SpotsWidget(), Center(child: Text('Tops'),), - Center(child: Text('Messages'),), + MessagesWidget(), SettingsWidget(), ]; @override Widget build(BuildContext context) { - Location.sendCurrentLocation(); - Location.getData(); double height = MediaQuery.of(context).size.height; return Scaffold( + resizeToAvoidBottomInset: false, body: screens[_index], bottomNavigationBar: NavigationBarTheme( data: NavigationBarThemeData( indicatorColor: Color(0xFF5C1DC3), labelTextStyle: MaterialStateProperty.all( - TextStyle(fontSize: 12, fontWeight: FontWeight.w400, color: Colors.grey) + TextStyle(fontSize: 12, fontWeight: FontWeight.w400, color: Colors.grey) ), ), child: ConstrainedBox( - constraints: BoxConstraints( - minHeight: height*0.1, - maxHeight: 100, - ), - child: NavigationBar( - animationDuration: Duration(seconds: 1), - selectedIndex: index, - height: height*0.1, - onDestinationSelected: (index) => - setState(() => _index = index), - backgroundColor: Color(0xFF232123), - destinations: [ - NavigationDestination(icon: Icon(Icons.person_outline, color: Colors.grey,), label: 'Profil', selectedIcon: Icon(Icons.person, color: Colors.white,),), - NavigationDestination(icon: Icon(Icons.bookmark_border, color: Colors.grey,), selectedIcon: Icon(Icons.bookmark, color: Colors.white,), label: 'Discovery'), - NavigationDestination(icon: Icon(CustomIcons.spot, color: Colors.grey), selectedIcon: Icon(CustomIcons.spot_outline, color: Colors.white), label: 'Spots',), - NavigationDestination(icon: Icon(CustomIcons.podium_outline, color: Colors.grey,), label: 'Tops', selectedIcon: Icon(CustomIcons.podium, color: Colors.white,),), - NavigationDestination(icon: Icon(Icons.mail_outline, color: Colors.grey,), label: 'Messages', selectedIcon: Icon(Icons.email, color: Colors.white,),), - ], - ), - ), + constraints: BoxConstraints( + minHeight: height*0.1, + maxHeight: 100, + ), + child: NavigationBar( + animationDuration: Duration(seconds: 1), + selectedIndex: index, + height: height*0.1, + onDestinationSelected: (index) => + setState(() => _index = index), + backgroundColor: Color(0xFF232123), + destinations: [ + NavigationDestination(icon: Icon(Icons.person_outline, color: Colors.grey,), label: 'Profil', selectedIcon: Icon(Icons.person, color: Colors.white,),), + NavigationDestination(icon: Icon(Icons.bookmark_border, color: Colors.grey,), selectedIcon: Icon(Icons.bookmark, color: Colors.white,), label: 'Discovery'), + NavigationDestination(icon: Icon(CustomIcons.spot, color: Colors.grey), selectedIcon: Icon(CustomIcons.spot_outline, color: Colors.white), label: 'Spots',), + NavigationDestination(icon: Icon(CustomIcons.podium_outline, color: Colors.grey,), label: 'Tops', selectedIcon: Icon(CustomIcons.podium, color: Colors.white,),), + NavigationDestination(icon: Icon(Icons.mail_outline, color: Colors.grey,), label: 'Messages', selectedIcon: Icon(Icons.email, color: Colors.white,),), + ], + ), + ), ), ); } -} +} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_card.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_card.dart index 6eef2c1..165cea2 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_card.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_card.dart @@ -3,17 +3,6 @@ import 'package:flutter/material.dart'; import '../../../main.dart'; import 'package:provider/provider.dart'; -class User{ - final String chanteur; - final String titre; - final String urlImage; - - const User({ - required this.chanteur, - required this.titre, - required this.urlImage, -}); -} @@ -44,21 +33,21 @@ class _CardWidgetState extends State{ } @override Widget build(BuildContext context) => SizedBox.expand( - child: widget.isFront ? buildFrontCard() : buildCard(), - ); + child: widget.isFront ? buildFrontCard() : buildCard(), + ); Widget buildCard() => ClipRRect( borderRadius: BorderRadius.circular(20), child: Container( decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage(widget.urlImage), - fit: BoxFit.cover, - alignment: Alignment(0,0), - ), borderRadius: BorderRadius.all(Radius.circular(20)) ), + child: FadeInImage.assetNetwork( + height: double.infinity, + width: double.infinity, + fit: BoxFit.cover, + placeholder: "assets/images/loadingPlaceholder.gif", image: widget.urlImage ), ), ); @@ -77,6 +66,9 @@ class _CardWidgetState extends State{ case CardStatus.discovery: final child = buildStamp(image: 'assets/images/icon_discovery.png', opacity: opacity); return child; + case CardStatus.message: + final child = buildStamp(image: 'assets/images/icon_messages.png', opacity: opacity); + return child; default: return Container(); @@ -84,29 +76,29 @@ class _CardWidgetState extends State{ } Widget buildStamp({ - double angle = 0, + double angle = 0, required String image, required double opacity, -}) { + }) { return Opacity(opacity: opacity, - child: ClipRRect( - borderRadius: BorderRadius.circular(20), - child: Container( - decoration: BoxDecoration( - color: Colors.black.withOpacity(0.75), - border: Border.all(color: Color(0xFF3F1DC3), width: 6), - - borderRadius: BorderRadius.all(Radius.circular(20)) - ), - child: Center( - child: Image.asset( - image, - width: 100, + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Container( + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.75), + border: Border.all(color: Color(0xFF3F1DC3), width: 6), + + borderRadius: BorderRadius.all(Radius.circular(20)) ), + child: Center( + child: Image.asset( + image, + width: 100, + ), + ), ), - ), - ),); + ),); } Widget buildFrontCard() => GestureDetector( @@ -124,7 +116,7 @@ class _CardWidgetState extends State{ ..translate(-center.dx, -center.dy); return AnimatedContainer( - curve: Curves.easeInOut, + curve: Curves.easeOut, duration: Duration(milliseconds: milliseconds), transform: rotatedMatrix..translate(position.dx, position.dy), child: Stack( @@ -149,7 +141,7 @@ class _CardWidgetState extends State{ onPanEnd: (details) { final provider = Provider.of(context, listen: false); - provider.endPosition(); + provider.endPosition(context); }, diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart index 0939e2b..cb1fc71 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_discovery.dart @@ -1,6 +1,11 @@ +import 'dart:math'; + +import 'package:dafl_project_flutter/main.dart'; import 'package:fluttericon/font_awesome5_icons.dart'; import 'package:flutter/material.dart'; +import '../../../model/music.dart'; + class DiscoveryWidget extends StatefulWidget { const DiscoveryWidget({Key? key}) : super(key: key); @@ -13,162 +18,124 @@ class _DiscoveryWidgetState extends State { @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Color(0xFF141414), - resizeToAvoidBottomInset: false, - - body: Padding(padding: EdgeInsets.fromLTRB(30, 50, 30, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Text('Playlist découverte', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 25),), - Spacer(), - Icon(FontAwesome5.sort_amount_down, size: 30, color: Colors.white,), - ] - ), - Padding(padding: EdgeInsets.fromLTRB(0, 5, 0, 0)), - Text('Retrouvez ici vos nouvelles découvertes.', style: TextStyle(color: Colors.grey.withOpacity(0.4), fontSize: 15),), - ], - ), + return Container( + color: Color(0xFF141414), + + child: Padding(padding: EdgeInsets.fromLTRB(0, 50, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.fromLTRB(30, 0, 30, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Text('Playlist découverte', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 25),), + Spacer(), + Icon(FontAwesome5.sort_amount_down, size: 30, color: Colors.white,), + ] + ), + Padding(padding: EdgeInsets.fromLTRB(0, 5, 0, 0)), + Text('Retrouvez ici vos nouvelles découvertes.', style: TextStyle(color: Colors.grey.withOpacity(0.4), fontSize: 15),), + ], ), - Expanded( - child: ListView( - - children: [ - SizedBox(height: 40,), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 0), - child: Column( - children: [ - - Container( - margin: EdgeInsets.fromLTRB(0, 5, 0, 0), - width: double.infinity, - child: Row( - children: [ - Container( - height: 60, - width: 60, - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage('https://www.goutemesdisques.com/uploads/tx_gmdchron/pi1/L_Etrange_Histoire_de_Mr_Anderson.jpg'), - fit: BoxFit.cover, - ), - border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), - borderRadius: BorderRadius.all(Radius.circular(10)), - ),), - Container( - margin: EdgeInsets.fromLTRB(20, 0, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('IVERSON',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Text('Laylow',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), - - ], - ),), - ], - ), - ), - - - ], - ) - ), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 0), - child: Column( - children: [ - - Container( - margin: EdgeInsets.fromLTRB(0, 5, 0, 0), - width: double.infinity, - child: Row( - children: [ - Container( - height: 60, - width: 60, - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage('https://www.goutemesdisques.com/uploads/tx_gmdchron/pi1/L_Etrange_Histoire_de_Mr_Anderson.jpg'), - fit: BoxFit.cover, - ), - border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), - borderRadius: BorderRadius.all(Radius.circular(10)), - ),), - Container( - margin: EdgeInsets.fromLTRB(20, 0, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('IVERSON',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Text('Laylow',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), - - ], - ),), - ], - ), - ), - - - ], - ) - ), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 0), - child: Column( - children: [ - - Container( - margin: EdgeInsets.fromLTRB(0, 5, 0, 0), - width: double.infinity, - child: Row( - children: [ - Container( - height: 60, - width: 60, - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage('https://www.goutemesdisques.com/uploads/tx_gmdchron/pi1/L_Etrange_Histoire_de_Mr_Anderson.jpg'), - fit: BoxFit.cover, - ), - border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), - borderRadius: BorderRadius.all(Radius.circular(10)), - ),), - Container( - margin: EdgeInsets.fromLTRB(20, 0, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('IVERSON',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Text('Laylow',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), - - ], - ),), - ], - ), - ), - - - ], - ) - ), + ), + Expanded( + child: MyApp().controller.currentUser.Discovery.isEmpty? + Center(child: Image.asset('assets/images/EmptyDiscovery-Hint.png',scale: 1.8,)): + DiscoveryList(), + ), + + ], + ),), + ); + } +} +class DiscoveryList extends StatefulWidget { + const DiscoveryList({Key? key}) : super(key: key); - ], - ), - ), - ], - ),), - ); + @override + State createState() => _DiscoveryListState(); +} + +class _DiscoveryListState extends State { + late GlobalKey refreshKey; + @override + void initState() { + refreshKey = GlobalKey(); + refreshList(); + super.initState(); + } + + Future refreshList() async { + await Future.delayed(Duration(seconds: 1)); + setState(() { + MyApp().controller.currentUser.Discovery; + }); + return null; + } + Widget build(BuildContext context) { + return RefreshIndicator(child: ListView.builder( + itemCount: MyApp().controller.currentUser.Discovery.length ?? 0, + itemBuilder: (context, index){ + int itemCount = MyApp().controller.currentUser.Discovery.length ?? 0; + int reversedIndex = itemCount - 1 - index; + return Dismissible( + key: Key(MyApp().controller.currentUser.Discovery[reversedIndex].name), + direction: DismissDirection.startToEnd, + child: Container( + margin: EdgeInsets.fromLTRB(0, 10, 0, 0), + padding: EdgeInsets.fromLTRB(30, 0, 30, 0), + child: Column( + children: [ + + Container( + margin: EdgeInsets.fromLTRB(0, 5, 0, 0), + width: double.infinity, + child: Row( + children: [ + Container( + height: 60, + width: 60, + decoration: BoxDecoration( + border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + child: Container( + child: FadeInImage.assetNetwork(placeholder: "assets/images/loadingPlaceholder.gif", image: MyApp().controller.currentUser.Discovery[reversedIndex].linkCover), + ),), + Container( + margin: EdgeInsets.fromLTRB(20, 0, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text(MyApp().controller.currentUser?.Discovery[reversedIndex].name ?? '',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), + Text(MyApp().controller.currentUser?.Discovery[reversedIndex].artist ?? '',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), + + ], + ),), + ], + ), + ), + + + ], + ) + + ), onDismissed: (direction) { + if(direction == DismissDirection.startToEnd) + MyApp().controller.currentUser?.Discovery.removeAt(reversedIndex); + }, + background: Container(decoration: BoxDecoration( + image: DecorationImage(image: AssetImage("assets/images/delete_background.png"), fit: BoxFit.cover), + )),); + } + ), onRefresh: () async { + refreshList(); + }, key: refreshKey,); } } diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart new file mode 100644 index 0000000..6b9e4ea --- /dev/null +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_messages.dart @@ -0,0 +1,228 @@ +import 'package:dafl_project_flutter/views/pages/main/p_conversation.dart'; +import 'package:dafl_project_flutter/views/pages/main/p_main.dart'; +import 'package:flutter/material.dart'; +import 'package:fluttericon/font_awesome5_icons.dart'; +import 'package:page_transition/page_transition.dart'; + +class MessagesWidget extends StatefulWidget { + const MessagesWidget({Key? key}) : super(key: key); + + @override + State createState() => _MessagesWidgetState(); +} + +class _MessagesWidgetState extends State { + int indexSectedButton = 0; + Widget listeActuelle = ListConfirmedWidget(); + + + var colorConfirm = Color(0xFFFFFFFF); + var colorWaiting = Color(0xFFA8A8A8); + void changeSelected(int num){ + if(indexSectedButton == num){ + return; + } + else{ + if(num == 0){ + setState((){ + colorConfirm = Color(0xFFFFFFFF); + colorWaiting = Color(0xFFA8A8A8); + listeActuelle = ListConfirmedWidget(); + indexSectedButton = num; + }); + + + } + else{ + setState((){ + colorConfirm = Color(0xFFA8A8A8); + colorWaiting = Color(0xFFFFFFFF); + listeActuelle = ListWaitingWidget(); + indexSectedButton = num; + }); + } + + } + } + + @override + + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + return Container( + color: Color(0xFF141414), + + child: Padding(padding: EdgeInsets.fromLTRB(30, 50, 30, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('Messages', style: TextStyle(color: Colors.white, fontWeight: FontWeight.w500, fontSize: 25)), + Padding(padding: EdgeInsets.fromLTRB(0, 5, 0, 0)), + Text('Retrouvez ici vos discussions.', style: TextStyle(color: Colors.grey.withOpacity(0.4), fontSize: 15),), + Padding( + padding: EdgeInsets.fromLTRB(0, height*0.01, 0, 0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + SizedBox( + height: 35, + width: width*0.35, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: colorConfirm, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15.0), + ),// background// foreground + ), + onPressed: () { + changeSelected(0); + }, + child: Text("Validées", + style: TextStyle(color: Colors.black ,fontSize: 17, fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ),), + SizedBox( + height: 35, + width: width*0.35, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: colorWaiting, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(15.0), + ),// background// foreground + ), + onPressed: () { + changeSelected(1); + }, + child: Text("En attente", + style: TextStyle(color: Colors.black ,fontSize: 17, fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ),), + ], + ),), + ], + ), + ), + Expanded( + child: + listeActuelle, + + + ), + ], + ),), + ); + } +} + +class MessagesButtonWidget extends StatelessWidget{ + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + return Container( + margin: EdgeInsets.fromLTRB(0, 0, 0, 10), + child: Column( + children: [ + + Container( + color: Colors.transparent, + margin: EdgeInsets.fromLTRB(0, 0, 0, 0), + child: Row( + children: [ + Container( + height: 60, + width: 60, + decoration: BoxDecoration( + image: DecorationImage( + image: NetworkImage('https://www.goutemesdisques.com/uploads/tx_gmdchron/pi1/L_Etrange_Histoire_de_Mr_Anderson.jpg'), + fit: BoxFit.cover, + ), + border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), + borderRadius: BorderRadius.all(Radius.circular(30)), + ),), + Container( + width: width-160, + margin: EdgeInsets.fromLTRB(20, 0, 20, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('Max',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), + Text('1 jour(s)',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.8) ,fontSize: 15, fontWeight: FontWeight.w400),), + ], + ), + Text('A envoyé un musique.',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), + + ], + ),), + ], + ), + ), + + + ], + ) + ); + + } +} + +class ListConfirmedWidget extends StatelessWidget{ + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + return ListView( + + children: [ + SizedBox(height: 40,), + MessagesButtonWidget(), + MessagesButtonWidget(), + MessagesButtonWidget(), + MessagesButtonWidget(), + + + ], + ); + + } +} + +class ListWaitingWidget extends StatelessWidget{ + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; + return ListView( + + children: [ + SizedBox(height: 40,), + GestureDetector( + onTap: () { + Navigator.of(context).push(PageTransition( + duration: Duration(milliseconds: 200), + reverseDuration: Duration(milliseconds: 200), + type: PageTransitionType.rightToLeftWithFade, + childCurrent: context.widget, + child: ConversationPage())); + }, + child: MessagesButtonWidget(), + ), + + ], + ); + + } +} \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart index b38784c..50fc84e 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_profile.dart @@ -1,3 +1,7 @@ +import 'package:dafl_project_flutter/main.dart'; + +import '../../../main.dart'; +import '../../../main.dart'; import './w_settings.dart'; import './w_spot.dart'; import 'package:flutter/material.dart'; @@ -16,198 +20,228 @@ class _ProfilWidgetState extends State { Widget build(BuildContext context) { double height = MediaQuery.of(context).size.height; + return MainPageProfil(); + } +} + +class MainPageProfil extends StatelessWidget { + const MainPageProfil({super.key}); + + @override + Widget build(BuildContext context) { + double height = MediaQuery.of(context).size.height; + double width = MediaQuery.of(context).size.width; return Container( color: Color(0xFF141414), - child: Container( - width: double.infinity, - height: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: double.infinity, - margin: EdgeInsets.fromLTRB(30, 50, 0, 0), - child: Text( - "Profil", - style: TextStyle(fontSize: 25, fontWeight: FontWeight.w600, color: Colors.white),), - ), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 40), - height: height*0.14, - width: height*0.14, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(100.0), - color: Colors.blue,border: Border.all(width: 6.0, color: Colors.white), + child: Container( + width: double.infinity, + height: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + width: double.infinity, + margin: EdgeInsets.fromLTRB(30, 50, 0, 0), + child: Text( + "Profil", + style: TextStyle(fontSize: 25, fontWeight: FontWeight.w600, color: Colors.white),), + ), + Container( + margin: EdgeInsets.fromLTRB(0, 10, 0, 10), + height: height*0.14, + width: height*0.14, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(100.0), + color: Colors.blue,border: Border.all(width: 6.0, color: Colors.white), + boxShadow: [ + BoxShadow( + offset: Offset(0, 0), + spreadRadius: 5, + blurRadius:10, + color: Color.fromRGBO(0, 0, 0, 1), + ), + ], + ), + child: Center( + child: Text(MyApp().controller.currentUser.usernameDafl![0] ?? '', + style: TextStyle(color: Colors.white ,fontSize: 60, fontWeight: FontWeight.w500), + textAlign: TextAlign.center, + ), + ), ), - ), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, + Text(MyApp().controller.currentUser.usernameDafl ?? '', + style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), + textAlign: TextAlign.center, ), - margin: EdgeInsets.fromLTRB(30, 0, 30, 0), - child: SizedBox( + Container( height: 55, width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ),// background// foreground - ), - onPressed: () { - }, - child: Row( - children: [ - Image.asset('assets/images/fav_logo.png', height: 25,), - SizedBox(width: 12,), - Text("Préférences musicales", - style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - Spacer(), - Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), - ], - ) - ),), - ), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.transparent, + ), + margin: EdgeInsets.fromLTRB(30, 40, 30, 0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ),// background// foreground + ), + onPressed: () { + }, + child: Row( + children: [ + Image.asset('assets/images/fav_logo.png', height: 25,), + SizedBox(width: 12,), + Text("Préférences musicales", + style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + Spacer(), + Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), + ], + ) + ),), ), - margin: EdgeInsets.fromLTRB(30, 10, 30, 0), - child: SizedBox( + Container( height: 55, width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ),// background// foreground - ), - onPressed: () { - Navigator.push(context,MaterialPageRoute(builder: (context)=> DisplayInfoWidget())); - }, - child: Row( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.transparent, + ), + margin: EdgeInsets.fromLTRB(30, 10, 30, 0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ),// background// foreground + ), + onPressed: () { + Navigator.push(context,MaterialPageRoute(builder: (context)=> DisplayInfoWidget())); + }, + child: Row( + children: [ + Icon(Icons.remove_red_eye, color: Colors.white,size: 30,), + SizedBox(width: 12,), + Text("Aperçu de mon profil", + style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + Spacer(), + Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), + ], + ) + ),), + ), + Container( + height: height*0.27, + width: double.infinity, + margin: EdgeInsets.fromLTRB(30, 15, 30, 0), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Icon(Icons.remove_red_eye, color: Colors.white,size: 30,), - SizedBox(width: 12,), - Text("Aperçu de mon profil", + Icon(Icons.wifi_tethering, color: Colors.white, size: 35,), + SizedBox(width: 10,), + Text("En cours d'écoute...", style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), textAlign: TextAlign.center, ), - Spacer(), - Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), ], - ) - ),), - ), - Container( - height: height*0.27, - width: double.infinity, - margin: EdgeInsets.fromLTRB(30, 15, 30, 0), - child: Column( - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Icon(Icons.wifi_tethering, color: Colors.white, size: 35,), - SizedBox(width: 10,), - Text("En cours d'écoute...", - style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - ], - ), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 0), - height: height*0.14, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15.0), - color: Color(0xFFD9D9D9).withOpacity(0.08), ), - child: - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.fromLTRB(15, 0, 0, 0), - child: ClipRRect( - borderRadius: BorderRadius.circular(15), - child: Image( - height: 90, - width: 90, - image: NetworkImage('https://images.genius.com/ef4849be3da5fdb22ea9e656679be3a3.600x600x1.jpg'), + Container( + margin: EdgeInsets.fromLTRB(0, 10, 0, 0), + height: height*0.14, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15.0), + color: Color(0xFFD9D9D9).withOpacity(0.08), + ), + child: + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.fromLTRB(15, 0, 0, 0), + child: ClipRRect( + borderRadius: BorderRadius.circular(15), + child: FadeInImage.assetNetwork( + height: 90, + width: 90, + placeholder: "assets/images/loadingPlaceholder.gif", image: 'https://images.genius.com/ef4849be3da5fdb22ea9e656679be3a3.600x600x1.jpg'), ), ), - ), - Container( - margin: EdgeInsets.fromLTRB(12, 20, 0, 0), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('BAMBINA', style: TextStyle(fontSize:18, fontWeight: FontWeight.w500, color: Colors.white),), - Text('PNL', style: TextStyle(fontSize:16, fontWeight: FontWeight.w400, color: Colors.grey),), - ], - ), - ) + Container( + margin: EdgeInsets.fromLTRB(12, 20, 0, 0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text('BAMBINA', style: TextStyle(fontSize:18, fontWeight: FontWeight.w500, color: Colors.white),), + Text('PNL', style: TextStyle(fontSize:16, fontWeight: FontWeight.w400, color: Colors.grey),), + ], + ), + ) - ], + ], + ), ), - ), - ], + ], + ), ), - ), - Spacer(), - Container( - height: 55, - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.transparent, - ), - margin: EdgeInsets.fromLTRB(30, 0, 30, height*0.04), - child: SizedBox( + Spacer(), + Container( height: 55, width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ),// background// foreground - ), - onPressed: () { - Navigator.push(context,MaterialPageRoute(builder: (context)=> SettingsWidget())); - }, - child: Row( - children: [ - Icon(Icons.settings, color: Colors.white,size: 30,), - SizedBox(width: 12,), - Text("Paramètres", - style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), - textAlign: TextAlign.center, - ), - Spacer(), - Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), - ], - ) - ),), - ), - ], + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Colors.transparent, + ), + margin: EdgeInsets.fromLTRB(30, 0, 30,0), + child: SizedBox( + height: 55, + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor: Color(0xFFD9D9D9).withOpacity(0.08), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ),// background// foreground + ), + onPressed: () { + Navigator.push(context,MaterialPageRoute(builder: (context)=> SettingsWidget())); + }, + child: Row( + children: [ + Icon(Icons.settings, color: Colors.white,size: 30,), + SizedBox(width: 12,), + Text("Paramètres", + style: TextStyle(color: Colors.white ,fontSize: 17, fontWeight: FontWeight.w400), + textAlign: TextAlign.center, + ), + Spacer(), + Icon(Icons.arrow_forward_ios, color: Colors.white.withOpacity(0.3),), + ], + ) + ),), + ), + Spacer(), + ], + ), ), - ), ); + } } diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_settings.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_settings.dart index 19db674..ab0daa5 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_settings.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_settings.dart @@ -1,4 +1,6 @@ +import 'package:dafl_project_flutter/main.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; class SettingsWidget extends StatefulWidget { const SettingsWidget({Key? key}) : super(key: key); @@ -8,6 +10,8 @@ class SettingsWidget extends StatefulWidget { } class _SettingsWidgetState extends State { + final userNameTextField = TextEditingController(text: MyApp().controller.currentUser?.usernameDafl); + final passwordTextField = TextEditingController(text: MyApp().controller.currentUser?.passwDafl); @override Widget build(BuildContext context) { double height = MediaQuery.of(context).size.height; @@ -30,21 +34,21 @@ class _SettingsWidgetState extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( - margin: EdgeInsets.fromLTRB(30, height*0.07, 30, 0), - width: double.infinity, - height: 30, - alignment: Alignment.centerLeft, - decoration: BoxDecoration( - color: Color(0xFFD9D9D9).withOpacity(0.16), - borderRadius: BorderRadius.circular(7.0), - ), - child: Padding( - padding: EdgeInsets.fromLTRB(20, 0, 0, 0), - child: Text('Pseudo', - style: TextStyle( - color: Color(0xFFAEAEAE) - ),), - ) + margin: EdgeInsets.fromLTRB(30, height*0.07, 30, 0), + width: double.infinity, + height: 30, + alignment: Alignment.centerLeft, + decoration: BoxDecoration( + color: Color(0xFFD9D9D9).withOpacity(0.16), + borderRadius: BorderRadius.circular(7.0), + ), + child: Padding( + padding: EdgeInsets.fromLTRB(20, 0, 0, 0), + child: Text('Pseudo', + style: TextStyle( + color: Color(0xFFAEAEAE) + ),), + ) ), Padding(padding: EdgeInsets.fromLTRB(30, 0, 30, 0), child: SizedBox( @@ -54,6 +58,7 @@ class _SettingsWidgetState extends State { SizedBox( width: 230, child: TextField( + controller: userNameTextField, style: TextStyle(color: Colors.white), decoration: InputDecoration( hintStyle: Theme.of(context).textTheme.caption?.copyWith( @@ -67,9 +72,15 @@ class _SettingsWidgetState extends State { ), ), Spacer(), - Padding(padding: EdgeInsets.fromLTRB(0, 0, 20, 0), - child: Text('modifier', - style: TextStyle( color: Colors.blue, fontSize: 17),),), + GestureDetector( + onTap: () { + MyApp().controller.changeUsernameCourant(userNameTextField.text); + Notify(0,context,isError: false); + }, + child: Padding(padding: EdgeInsets.fromLTRB(0, 0, 20, 0), + child: Text('modifier', + style: TextStyle( color: Colors.blue, fontSize: 17),),),) + ], ), @@ -100,6 +111,7 @@ class _SettingsWidgetState extends State { SizedBox( width: 230, child: TextField( + controller: passwordTextField, obscureText: true, style: TextStyle(color: Colors.white), decoration: InputDecoration( @@ -114,9 +126,15 @@ class _SettingsWidgetState extends State { ), ), Spacer(), - Padding(padding: EdgeInsets.fromLTRB(0, 0, 20, 0), - child: Text('modifier', - style: TextStyle( color: Colors.blue, fontSize: 17),),), + GestureDetector( + onTap: () { + MyApp().controller.changePasswordCourant(passwordTextField.text); + Notify(1,context,isError: false); + }, + child: Padding(padding: EdgeInsets.fromLTRB(0, 0, 20, 0), + child: Text('modifier', + style: TextStyle( color: Colors.blue, fontSize: 17),),), + ), ], ), @@ -129,3 +147,4 @@ class _SettingsWidgetState extends State { ); } } + diff --git a/Sources/dafl_project_flutter/lib/views/pages/main/w_spot.dart b/Sources/dafl_project_flutter/lib/views/pages/main/w_spot.dart index bca1061..fcfcdd0 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/main/w_spot.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/main/w_spot.dart @@ -1,4 +1,7 @@ import 'dart:ui'; +import 'package:dafl_project_flutter/views/pages/main/w_discovery.dart'; + +import '../../../model/music.dart'; import './w_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/painting/gradient.dart' as gradiant; @@ -6,6 +9,7 @@ import 'package:provider/provider.dart'; import '../../../main.dart'; import 'package:rive/rive.dart'; import 'package:animations/animations.dart'; +import 'package:vibration/vibration.dart'; class SpotsWidget extends StatefulWidget { const SpotsWidget({Key? key}) : super(key: key); @@ -16,45 +20,35 @@ class SpotsWidget extends StatefulWidget { class _SpotsWidgetState extends State { - final user = User( - chanteur: 'Khali', - titre: 'COULEURS', - urlImage: 'https://khaligidilit.com/assets/images/cover-LAI%CC%88LA-Khali.jpeg', - ); @override Widget build(BuildContext context) { double height = MediaQuery.of(context).size.height; double width = MediaQuery.of(context).size.width; final provider = Provider.of(context); - return Scaffold( - - resizeToAvoidBottomInset: false, - backgroundColor: Color(0xFF141414), - body: Container( - height: double.maxFinite, - child: Stack( - children: [ - Transform.scale(scale: 1.1, - child: Container( - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage(provider.urlImages.isEmpty != true - ?provider.urlImages.last - :"https://i.imgur.com/Uovh293.png"), - fit: BoxFit.cover, + return Container( - ), - ), - child: BackdropFilter(filter: ImageFilter.blur(sigmaX: 20.0, sigmaY: 20.0), + color: Color(0xFF141414), + child: Container( + height: double.maxFinite, + child: Stack( + children: [ + Transform.scale(scale: 1.1, child: Container( - decoration: BoxDecoration(color: Colors.black.withOpacity(0.4)), + decoration: BoxDecoration( + image: DecorationImage( + image: NetworkImage(MyApp().controller.currentUser.Spots.isEmpty? "https://i.imgur.com/Uovh293.png":MyApp().controller.currentUser.Spots.last.linkCover), + fit: BoxFit.cover, + + ), + ), + child: BackdropFilter(filter: ImageFilter.blur(sigmaX: 20.0, sigmaY: 20.0), + child: Container( + decoration: BoxDecoration(color: Colors.black.withOpacity(0.4)), + ),), ),), - ),), - Padding( - padding: EdgeInsets.fromLTRB(0, 0, 0,height*0.03), - child: Align( + Align( alignment: FractionalOffset.bottomCenter, - child: OpenContainer( + child: MyApp().controller.currentUser.Spots.isEmpty? Container():OpenContainer( closedColor: Colors.transparent, closedElevation: 0, @@ -67,68 +61,74 @@ class _SpotsWidgetState extends State { }, ), ), - ), - Center( - child: Container( - width: 300, - height: 300, - child: RiveAnimation.asset('assets/images/search_spot_animation.riv'), + Center( + child: Container( + width: 300, + height: 300, + child: RiveAnimation.asset('assets/images/search_spot_animation.riv'), + ), ), - ), - Positioned( - top: height*0.68, - width: width, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - GestureDetector( - onTap: () { - final provider = Provider.of(context, listen: false); - provider.dislike(); - - }, - child: Image.asset( - 'assets/images/bouton_dislike.png', - height: 70, - width: 70, - fit: BoxFit.cover, + Positioned( + top: height*0.68, + width: width, + child: MyApp().controller.currentUser.Spots.isEmpty? Container():Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + GestureDetector( + onTap: () { + final provider = Provider.of(context, listen: false); + provider.dislike(); + + + }, + child: Image.asset( + 'assets/images/bouton_dislike.png', + height: 70, + width: 70, + fit: BoxFit.cover, + ), ), - ), - SizedBox( - width: width*0.1, - ), - GestureDetector( - onTap: () { - final provider = Provider.of(context, listen: false); - provider.discovery(); - }, - child: Image.asset( - 'assets/images/bouton_discovery.png', - height: 70, - width: 70, - fit: BoxFit.cover, + GestureDetector( + onTap: () { + final provider = Provider.of(context, listen: false); + provider.discovery(); + }, + child: Image.asset( + 'assets/images/bouton_discovery.png', + height: 70, + width: 70, + fit: BoxFit.cover, + ), ), - ), - SizedBox( - width: width*0.1, - ), - GestureDetector( - onTap: () { - final provider = Provider.of(context, listen: false); - provider.like(); - }, - child: Image.asset( - 'assets/images/bouton_like.png', - height: 70, - width: 70, - fit: BoxFit.cover, + GestureDetector( + onTap: () { + final provider = Provider.of(context, listen: false); + provider.message(this.context); + }, + child: Image.asset( + 'assets/images/bouton_messages.png', + height: 70, + width: 70, + fit: BoxFit.cover, + ), ), - ), - ], + GestureDetector( + onTap: () { + final provider = Provider.of(context, listen: false); + provider.like(this.context); + }, + child: Image.asset( + 'assets/images/bouton_like.png', + height: 70, + width: 70, + fit: BoxFit.cover, + ), + ), + ], + ), ), - ), - Align( - child:Container( + Align( + child:Container( width: 400, height: height*0.8, margin: EdgeInsets.fromLTRB(width*0.09,height/5,width*0.09,height/3.7), @@ -136,45 +136,48 @@ class _SpotsWidgetState extends State { child: Container( child: buildCards(), ) - ) , - ), - IgnorePointer(child: Container(height: 200, - decoration: BoxDecoration( - gradient: gradiant.LinearGradient( - colors: [Colors.black, Colors.transparent], - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - ) + ) , + ), + IgnorePointer(child: Container(height: 200, + decoration: BoxDecoration( + gradient: gradiant.LinearGradient( + colors: [Colors.black.withOpacity(0.95),Colors.black.withOpacity(0.84),Colors.black.withOpacity(0.66),Colors.black.withOpacity(0.41),Colors.black.withOpacity(0)], + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + ) ),),), - Padding(padding: EdgeInsets.fromLTRB(20, 60, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text('COULEURS',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Text('Khali',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 17, fontWeight: FontWeight.w200),), - ], - ),), - ], - ), - ) + Padding(padding: EdgeInsets.fromLTRB(20, 60, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text(MyApp().controller.currentUser.Spots.isEmpty? '': + MyApp().controller.currentUser.Spots.last.name,style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), + Text(MyApp().controller.currentUser.Spots.isEmpty? '': MyApp().controller.currentUser.Spots.last.artist,style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 17, fontWeight: FontWeight.w200),), + ], + ),), + ], + ), + ) ); } Widget buildCards() { final provider = Provider.of(context); - final urlImages = provider.urlImages; + final urlImages = provider.spotsList; return Stack( children: urlImages .map((urlImage) => CardWidget( - urlImage: urlImage, - isFront: urlImages.last == urlImage, + urlImage: urlImage.linkCover, + isFront: urlImages.last == urlImage, )) .toList(), ); } + + } @@ -192,61 +195,61 @@ class DisplayInfoWidget extends StatelessWidget{ body: ListView( children: [ Container( - margin: EdgeInsets.fromLTRB(30, 10, 30, 0), - child: Column( - children: [ - Text('Pour mon mariage',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), + margin: EdgeInsets.fromLTRB(30, 10, 30, 0), + child: Column( + children: [ + Text('Pour mon mariage',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Container( - margin: EdgeInsets.fromLTRB(0, 10, 0, 0), - decoration: BoxDecoration( - color: Color(0xFF2E2C2E), - border: Border.all(width: 1, color: Colors.grey.withOpacity(0.05)), - borderRadius: BorderRadius.all(Radius.circular(20)), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.2), - blurRadius: 5, - spreadRadius: 1, - offset: Offset(2.0, 2.0), // shadow direction: bottom right - ) - ], + Container( + margin: EdgeInsets.fromLTRB(0, 10, 0, 0), + decoration: BoxDecoration( + color: Color(0xFF2E2C2E), + border: Border.all(width: 1, color: Colors.grey.withOpacity(0.05)), + borderRadius: BorderRadius.all(Radius.circular(20)), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.2), + blurRadius: 5, + spreadRadius: 1, + offset: Offset(2.0, 2.0), // shadow direction: bottom right + ) + ], - ), - width: double.infinity, - height: 100, - child: Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10),child: Row( - children: [ - Container( - height: 75, - width: 75, - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("assets/images/dadju-cover-poison.png"), - fit: BoxFit.cover, - ), - border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), - borderRadius: BorderRadius.all(Radius.circular(15)), - ),), - SizedBox( ), - Container( - margin: EdgeInsets.fromLTRB(20, 0, 0, 0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('Ma vie',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), - Text('Dadju',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), - - ], - ),), - ], - ),), - ), + width: double.infinity, + height: 100, + child: Padding(padding: EdgeInsets.fromLTRB(10, 10, 10, 10),child: Row( + children: [ + Container( + height: 75, + width: 75, + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("assets/images/dadju-cover-poison.png"), + fit: BoxFit.cover, + ), + border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), + borderRadius: BorderRadius.all(Radius.circular(15)), + ),), + SizedBox( + ), + Container( + margin: EdgeInsets.fromLTRB(20, 0, 0, 0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text('Ma vie',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 20, fontWeight: FontWeight.w800),), + Text('Dadju',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.6) ,fontSize: 16, fontWeight: FontWeight.w400),), - ], - ) + ], + ),), + ], + ),), + ), + + ], + ) ), Container( margin: EdgeInsets.fromLTRB(30, 10, 30, 0), @@ -666,13 +669,16 @@ class PreviewInfoWidget extends StatelessWidget{ decoration: BoxDecoration( color: Color(0xFF24243A).withOpacity(0.40), border: Border.all(width: 0, color: Colors.grey.withOpacity(0)), - borderRadius: BorderRadius.all(Radius.circular(15)), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), ), child: Row( mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text('Me découvrir...',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 17, fontWeight: FontWeight.w800),), - ], + children: [ + Text('Me découvrir...',style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(1) ,fontSize: 17, fontWeight: FontWeight.w800),), + ], ), ); diff --git a/Sources/dafl_project_flutter/lib/views/pages/sign_in/p_sign_in.dart b/Sources/dafl_project_flutter/lib/views/pages/sign_in/p_sign_in.dart index 3e401d1..733c779 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/sign_in/p_sign_in.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/sign_in/p_sign_in.dart @@ -1,9 +1,7 @@ - import 'dart:ui'; -import 'package:dafl_project_flutter/persistence/database_saver.dart'; +import 'package:dafl_project_flutter/model/user.dart'; import 'package:flutter/material.dart'; import 'package:page_transition/page_transition.dart'; -import '../../../controller/controller.dart'; import '../../../main.dart'; import '../sign_up/p_sign_up.dart'; @@ -16,13 +14,11 @@ class SignInPage extends StatefulWidget { class _SignInPageState extends State { var boxColor = Colors.white; - Controller ctrl = Controller(); - - TextEditingController password = new TextEditingController(); - TextEditingController username = new TextEditingController(); @override bool isChecked = false; + final userNameTextField = TextEditingController(); + final passwordTextField = TextEditingController(); Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, @@ -75,7 +71,7 @@ class _SignInPageState extends State { ), Padding(padding: EdgeInsets.fromLTRB(50, 0, 20, 0), child: TextField( - controller: username, + controller: userNameTextField, decoration: InputDecoration( border: InputBorder.none, ), @@ -119,7 +115,8 @@ class _SignInPageState extends State { ),Padding(padding: EdgeInsets.fromLTRB(50, 0, 20, 0), child: TextField( - controller: password, + controller: passwordTextField, + obscureText: true, decoration: InputDecoration( border: InputBorder.none, ), @@ -173,23 +170,15 @@ class _SignInPageState extends State { highlightColor: Colors.grey.shade100, splashColor: Color(0xFF406DE1), onTap: (){ - - ctrl.load(username.text, password.text); - - - Navigator.of(context).push( - PageTransition( - type: PageTransitionType.fade, - childCurrent: widget, - child: Splash()), - ); + checkInformations(userNameTextField.text, passwordTextField.text); }, child:Ink( child: Align( alignment: Alignment.center, - child: Image.asset( - 'assets/images/valid_logo.png', - width: 40, + child: Icon( + Icons.check, + color: Color(0xFF406DE1), + size: 60.0, ), ), padding: EdgeInsets.fromLTRB(0, 10, 0, 0), @@ -215,7 +204,7 @@ class _SignInPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text('Tu n’as pas de compte?', style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 17)), + Text('Tu n’as pas de compte ?', style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 17)), GestureDetector( onTap: () { Navigator.of(context).push( @@ -233,18 +222,37 @@ class _SignInPageState extends State { SizedBox(height: 60,), ], ), - Align( - alignment: Alignment.topRight, - child: Container( - padding: EdgeInsets.fromLTRB(0, 20, 20, 0), - child: Text("v1.0", - style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.5) ,fontSize: 17, fontWeight: FontWeight.w700), - ), - ) - ), ], ), ); } + + + void checkInformations(String username,String password) async{ + if(username ==""){ + Notify(2, context); + } + else if(password ==""){ + Notify(4, context); + } + else{ + await MyApp().controller.load(userNameTextField.text, passwordTextField.text); + + if(MyApp().controller.currentUser.usernameDafl != ""){ + Navigator.of(context).push( + PageTransition( + type: PageTransitionType.fade, + childCurrent: widget, + child: Splash()), + ); + } + else{ + Notify(2, context); + } + + + + } + } } diff --git a/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart b/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart index 3a9eba0..800c8c0 100644 --- a/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart +++ b/Sources/dafl_project_flutter/lib/views/pages/sign_up/p_sign_up.dart @@ -1,16 +1,11 @@ -import 'package:dafl_project_flutter/controller/controller.dart'; -import 'package:dafl_project_flutter/persistence/loader.dart'; +import 'package:dafl_project_flutter/main.dart'; import 'package:flutter/material.dart'; import 'package:page_transition/page_transition.dart'; -import '../../../persistence/saver.dart'; +import 'package:rive/rive.dart' as riv; +import '../../../model/user.dart'; import '../home/p_home.dart'; import '../sign_in/p_sign_in.dart'; -import '../../../persistence/database_saver.dart'; -import '../../../persistence/database_loader.dart'; import '../../../controller/controller.dart'; -import '../../../model/user.dart'; - - class SignUpPage extends StatefulWidget { const SignUpPage({Key? key}) : super(key: key); @@ -20,18 +15,14 @@ class SignUpPage extends StatefulWidget { } class _SignUpPageState extends State { - final Controller ctrl = Controller(); Color boxColor = Colors.white; bool isHovering = false; @override - TextEditingController passwordconfirm = new TextEditingController(); - - //Text field that entered the username of the user - TextEditingController username = new TextEditingController(); - - bool isChecked = false; + final userNameTextField = TextEditingController(); + final passwordTextField = TextEditingController(); + final passwordConfirmTextField = TextEditingController(); Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, @@ -84,7 +75,7 @@ class _SignUpPageState extends State { ), Padding(padding: EdgeInsets.fromLTRB(50, 0, 20, 0), child: TextField( - controller: username, + controller: userNameTextField, decoration: InputDecoration( border: InputBorder.none, ), @@ -128,6 +119,8 @@ class _SignUpPageState extends State { ),Padding(padding: EdgeInsets.fromLTRB(50, 0, 20, 0), child: TextField( + controller: passwordTextField, + obscureText: true, decoration: InputDecoration( border: InputBorder.none, ), @@ -171,7 +164,8 @@ class _SignUpPageState extends State { ),Padding(padding: EdgeInsets.fromLTRB(50, 0, 20, 0), child: TextField( - controller: passwordconfirm, + obscureText: true, + controller: passwordConfirmTextField, decoration: InputDecoration( border: InputBorder.none, ), @@ -245,26 +239,16 @@ class _SignUpPageState extends State { highlightColor: Colors.grey.shade100, splashColor: Color(0xFF406DE1), onTap: (){ - ctrl.save(User(username.text, passwordconfirm.text)); + checkInformations(userNameTextField.text, passwordTextField.text, passwordConfirmTextField.text); - setState(() { - boxColor = Colors.blue; - }); - Navigator.of(context).push( - PageTransition( - duration: Duration(milliseconds: 300), - reverseDuration: Duration(milliseconds: 300), - type: PageTransitionType.leftToRightJoined, - childCurrent: widget, - child: HomePage()), - ); }, child:Ink( child: Align( alignment: Alignment.center, - child: Image.asset( - 'assets/images/valid_logo.png', - width: 47, + child: Icon( + Icons.check, + color: Color(0xFF406DE1), + size: 60.0, ), ), padding: EdgeInsets.fromLTRB(0, 10, 0, 0), @@ -290,7 +274,7 @@ class _SignUpPageState extends State { Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text('Tu n’as déjà un compte?', style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 17)), + Text('Tu as déjà un compte ?', style: TextStyle(color: Colors.white, fontWeight: FontWeight.normal, fontSize: 17)), GestureDetector( onTap: () { Navigator.of(context).push( @@ -308,18 +292,42 @@ class _SignUpPageState extends State { SizedBox(height: 60,), ], ), - Align( - alignment: Alignment.topRight, - child: Container( - padding: EdgeInsets.fromLTRB(0, 20, 20, 0), - child: Text("v1.0", - style: TextStyle(fontFamily: 'DMSans', color: Colors.white.withOpacity(0.5) ,fontSize: 17, fontWeight: FontWeight.w700), - ), - ) - ), ], ), ); } + + + Future checkInformations(String username, String password, String confirmPassword) async { + if(username == ""){ + Notify(2, context); + } + else if(! await MyApp().controller.searchByUsername(username)){ + Notify(0, context); + } + if(password == "" || confirmPassword == ""){ + Notify(4, context); + } + else if(password.length <8){ + Notify(3, context); + } + else if(password != confirmPassword){ + Notify(1, context); + } + else{ + MyApp().controller.save(User(username, password)); + + Navigator.of(context).push( + PageTransition( + duration: Duration(milliseconds: 300), + reverseDuration: Duration(milliseconds: 300), + type: PageTransitionType.leftToRightJoined, + childCurrent: widget, + child: HomePage()),); + + } + + } + } diff --git a/Sources/dafl_project_flutter/macos/Flutter/ephemeral/Flutter-Generated.xcconfig b/Sources/dafl_project_flutter/macos/Flutter/ephemeral/Flutter-Generated.xcconfig new file mode 100644 index 0000000..63108e6 --- /dev/null +++ b/Sources/dafl_project_flutter/macos/Flutter/ephemeral/Flutter-Generated.xcconfig @@ -0,0 +1,11 @@ +// This is a generated file; do not edit or check into version control. +FLUTTER_ROOT=C:\src\flutter +FLUTTER_APPLICATION_PATH=C:\Users\delan\AndroidStudioProjects\dafl_musicv3\Sources\dafl_project_flutter +COCOAPODS_PARALLEL_CODE_SIGN=true +FLUTTER_BUILD_DIR=build +FLUTTER_BUILD_NAME=1.0.0 +FLUTTER_BUILD_NUMBER=1 +DART_OBFUSCATION=false +TRACK_WIDGET_CREATION=true +TREE_SHAKE_ICONS=false +PACKAGE_CONFIG=.dart_tool/package_config.json diff --git a/Sources/dafl_project_flutter/macos/Flutter/ephemeral/flutter_export_environment.sh b/Sources/dafl_project_flutter/macos/Flutter/ephemeral/flutter_export_environment.sh new file mode 100644 index 0000000..97f8606 --- /dev/null +++ b/Sources/dafl_project_flutter/macos/Flutter/ephemeral/flutter_export_environment.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# This is a generated file; do not edit or check into version control. +export "FLUTTER_ROOT=C:\src\flutter" +export "FLUTTER_APPLICATION_PATH=C:\Users\delan\AndroidStudioProjects\dafl_musicv3\Sources\dafl_project_flutter" +export "COCOAPODS_PARALLEL_CODE_SIGN=true" +export "FLUTTER_BUILD_DIR=build" +export "FLUTTER_BUILD_NAME=1.0.0" +export "FLUTTER_BUILD_NUMBER=1" +export "DART_OBFUSCATION=false" +export "TRACK_WIDGET_CREATION=true" +export "TREE_SHAKE_ICONS=false" +export "PACKAGE_CONFIG=.dart_tool/package_config.json" diff --git a/Sources/dafl_project_flutter/pubspec.lock b/Sources/dafl_project_flutter/pubspec.lock index f09b259..96388e7 100644 --- a/Sources/dafl_project_flutter/pubspec.lock +++ b/Sources/dafl_project_flutter/pubspec.lock @@ -14,7 +14,7 @@ packages: name: archive url: "https://pub.dartlang.org" source: hosted - version: "3.3.4" + version: "3.3.2" args: dependency: transitive description: @@ -152,7 +152,7 @@ packages: name: flutter_native_splash url: "https://pub.dartlang.org" source: hosted - version: "2.2.14" + version: "2.2.11" flutter_test: dependency: "direct dev" description: flutter @@ -177,62 +177,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "8.1.1" - font_awesome_flutter: - dependency: "direct main" - description: - name: font_awesome_flutter - url: "https://pub.dartlang.org" - source: hosted - version: "10.2.1" - geolocator: - dependency: "direct main" - description: - name: geolocator - url: "https://pub.dartlang.org" - source: hosted - version: "9.0.2" - geolocator_android: - dependency: transitive - description: - name: geolocator_android - url: "https://pub.dartlang.org" - source: hosted - version: "4.1.4" - geolocator_apple: - dependency: transitive - description: - name: geolocator_apple - url: "https://pub.dartlang.org" - source: hosted - version: "2.2.3" - geolocator_platform_interface: - dependency: transitive - description: - name: geolocator_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "4.0.7" - geolocator_web: - dependency: transitive - description: - name: geolocator_web - url: "https://pub.dartlang.org" - source: hosted - version: "2.1.6" - geolocator_windows: - dependency: transitive - description: - name: geolocator_windows - url: "https://pub.dartlang.org" - source: hosted - version: "0.1.1" graphs: dependency: transitive description: name: graphs url: "https://pub.dartlang.org" source: hosted - version: "2.2.0" + version: "2.1.0" html: dependency: transitive description: @@ -241,7 +192,7 @@ packages: source: hosted version: "0.15.1" http: - dependency: "direct main" + dependency: transitive description: name: http url: "https://pub.dartlang.org" @@ -281,7 +232,7 @@ packages: name: lints url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.0" logging: dependency: transitive description: @@ -393,7 +344,7 @@ packages: name: petitparser url: "https://pub.dartlang.org" source: hosted - version: "5.1.0" + version: "5.0.0" platform: dependency: transitive description: @@ -408,13 +359,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.3" - pointycastle: - dependency: transitive - description: - name: pointycastle - url: "https://pub.dartlang.org" - source: hosted - version: "3.6.2" postgresql2: dependency: "direct main" description: @@ -531,7 +475,7 @@ packages: name: win32 url: "https://pub.dartlang.org" source: hosted - version: "3.1.1" + version: "3.0.1" xdg_directories: dependency: transitive description: diff --git a/Sources/dafl_project_flutter/pubspec.yaml b/Sources/dafl_project_flutter/pubspec.yaml index c4470c1..f06d927 100644 --- a/Sources/dafl_project_flutter/pubspec.yaml +++ b/Sources/dafl_project_flutter/pubspec.yaml @@ -45,9 +45,6 @@ dependencies: vibration: ^1.7.6 postgresql2: ^1.0.3 path_provider: ^2.0.11 - font_awesome_flutter: ^10.2.1 - geolocator: ^9.0.2 - http: ^0.13.5 dev_dependencies: flutter_test: @@ -69,7 +66,7 @@ flutter_native_splash: color: "#141414" #background_image: "assets/images/background_blur.png" - image: "assets/images/icon_App.png" + image: "assets/images/Logo_launcher_2.png" # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -77,10 +74,9 @@ flutter_native_splash: # The following section is specific to Flutter packages. flutter_icons: - image_path_android: "assets/images/icon_App.png" - image_path_ios: "assets/images/icon_App.png" android: true ios: true + image_path: "assets/images/Logo_launcher_2.png" flutter: @@ -93,6 +89,7 @@ flutter: assets: - assets/images/ - assets/fonts/ + - assets/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware diff --git a/Sources/dafl_project_flutter/test/testFileRead.dart b/Sources/dafl_project_flutter/test/testFileRead.dart index d5b2113..5904fdd 100644 --- a/Sources/dafl_project_flutter/test/testFileRead.dart +++ b/Sources/dafl_project_flutter/test/testFileRead.dart @@ -10,6 +10,6 @@ Future main() async { DatabaseConnexion d = DatabaseConnexion(); - d.initConnexion(); + DatabaseConnexion.initConnexion(); } \ No newline at end of file