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