# Conflicts: # .idea/libraries/Dart_Packages.xml # .idea/libraries/Dart_SDK.xml # Sources/dafl_project_flutter/lib/main.dart # Sources/dafl_project_flutter/macos/Flutter/GeneratedPluginRegistrant.swift # Sources/dafl_project_flutter/pubspec.lock # Sources/dafl_project_flutter/pubspec.yaml # Sources/dafl_project_flutter/windows/flutter/generated_plugin_registrant.cc # Sources/dafl_project_flutter/windows/flutter/generated_plugins.cmakemessagerie_lucas_test
commit
d38bc526c4
@ -1,4 +1,54 @@
|
||||
<p align="center">
|
||||
<img src="https://codefirst.iut.uca.fr/git/DAFLDev/DAFLMusic/raw/branch/master/Documentation/Images/banner.png" />
|
||||
</p>
|
||||
|
||||
[](https://codefirst.iut.uca.fr/DAFLDev/DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
[](https://codefirst.iut.uca.fr/sonar/dashboard?id=DAFLMusic)
|
||||
|
||||
# <div align="center">Le contexte du projet</div>
|
||||
|
||||
Ce projet est un travail universitaire pour la deuxième année du B.U.T Informatique de Clermont-Ferrand. Il correspond au travail demandé pour la SAE 3.01, nous disposons de 480 heures théoriques pour le réaliser.
|
||||
|
||||
<br>
|
||||
|
||||
# <div align="center">L'application</div>
|
||||
|
||||

|
||||
|
||||
* Notre projet est un réseau social destiné aux appareils mobiles Android
|
||||
et iOS focalisé sur la musique.
|
||||
|
||||
* Chaque utilisateur voit défiler les profils des autres personnes utilisant
|
||||
notre application et se trouvant dans un périmètre restreint (environ une
|
||||
cinquantaine de mètres).
|
||||
|
||||
* Un profil peut être "liké" et si les deux personnes se "likent" mutuellement, un "match" a alors lieu, et une conversation est créée pour qu'elles puissent entrer en contact. Après un "like", le profil suivant est affiché. Si ce profil ne l'intéresse pas il peut le "passer", et l'application propose un autre profil, etc.
|
||||
|
||||
* Pour chaque profil affiché, il est possible d'envoyer un message, ce qui
|
||||
créera une conversation en attente chez l'autre personne. Elle pourra
|
||||
ensuite choisir de répondre ou de le supprimer si elle n'est pas intéressée.
|
||||
|
||||
* Un profil affiché est anonyme. Seulement la musique écoutée en temps
|
||||
réel par la personne possédant le compte est renseignée.
|
||||
|
||||
* En cliquant sur un bouton, il est aussi possible de voir des informations
|
||||
complémentaires toujours sur les goûts musicaux du profil. Ces
|
||||
informations sont remplies préalablement par chaque utilisateur, cela
|
||||
peut être par exemple : "Quelle est la musique que je passerais à mon
|
||||
mariage ?".
|
||||
|
||||
# DAFLMusic
|
||||
* Les informations complémentaires de tous les utilisateurs sont aussi
|
||||
utilisées pour établir des statistiques dans une page à part. Il y sera
|
||||
indiqué, pour chaque catégorie, quelle est la musique la plus choisie parmi
|
||||
tous les utilisateurs.
|
||||
|
||||
* Si l'utilisateur est consentant, après un "Match", il peut accepter de
|
||||
révéler quelques informations personnelles (nom, âge, sexe).
|
||||
Le but est qu'une mise en contact entre 2 personnes se base uniquement
|
||||
sur des critères musicaux et non personnels.
|
@ -0,0 +1,2 @@
|
||||
FROM httpd:2.4
|
||||
COPY ./public-html/ /usr/local/apache2/htdocs/
|
@ -0,0 +1,14 @@
|
||||
[
|
||||
{
|
||||
"relation": [
|
||||
"delegate_permission/common.handle_all_urls"
|
||||
],
|
||||
"target": {
|
||||
"namespace": "android_app",
|
||||
"package_name": "com.example.dafl_project_flutter",
|
||||
"sha256_cert_fingerprints": [
|
||||
"63:51:EF:20:82:10:B9:34:F7:C7:4E:F6:55:D3:41:84:C6:81:30:23:02:50:E9:A3:EB:BB:F7:CF:43:79:A1:6E"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1 @@
|
||||
Hello world Dafl !
|
@ -1,46 +1 @@
|
||||
# dafl_project_flutter
|
||||
|
||||
*```dafl_project_flutter``` est le nom de notre projet Flutter.*
|
||||
|
||||
## Gestion de Git
|
||||
|
||||
* Ceci est un **ordre** !
|
||||
|
||||
Faire les commit en ligne de commande car Android Studio déclare des erreurs factices dans des fichiers créés pour les plateformes.
|
||||
|
||||
1. Ajout de tous les fichiers modifiés / ou créés dans la staging area (fichers locaux prêts à être commit)
|
||||
|
||||
```shell
|
||||
git add -A
|
||||
```
|
||||
|
||||
2. Validation des fichiers destinées à être envoyé sur le repo
|
||||
|
||||
```shell
|
||||
git commit -m "Message corresponding to modifications done in my commmit"
|
||||
```
|
||||
|
||||
*Insérer un message entre les doubles quotes après le ```-m```*
|
||||
|
||||
3. Envoi des commit
|
||||
|
||||
```shell
|
||||
git push origin my_branch
|
||||
```
|
||||
|
||||
*Remplacer ```my_branch``` par la branche sur laquelle on a voulu trailler*
|
||||
|
||||
## Convention de nommage des répertoires
|
||||
|
||||
```
|
||||
mon_repertoire
|
||||
```
|
||||
|
||||
*Penser à ajouter un ```.gitkeep``` pour que Git conserve le repertoire.*
|
||||
|
||||
## Convention de nommage des fichiers
|
||||
|
||||
| Contenu du fichier | Convention |
|
||||
| :- | :- |
|
||||
| Page de vue | ```p_ma_page.dart``` |
|
||||
| Page de widget | ```w_mon_widget.dart``` |
|
||||
|
@ -0,0 +1,35 @@
|
||||
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/saver.dart';
|
||||
import '../persistence/loader.dart';
|
||||
import '../model/user.dart';
|
||||
|
||||
|
||||
class Controller{
|
||||
static Controller? _this;
|
||||
|
||||
static Saver? saver = DatabaseSaver();
|
||||
static Loader? loader = DatabaseLoader();
|
||||
|
||||
Future<User?>? currentUser;
|
||||
|
||||
factory Controller(){
|
||||
if (_this == null) _this = Controller._();
|
||||
return _this!;
|
||||
}
|
||||
|
||||
Controller._();
|
||||
|
||||
void save(User userToSave){
|
||||
saver?.save(userToSave);
|
||||
}
|
||||
|
||||
void load(String username, String password) async{
|
||||
currentUser = loader?.load(username, password);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
import 'message.dart';
|
||||
import 'user.dart';
|
||||
|
||||
class Conversation{
|
||||
User firstUser;
|
||||
User secondUser;
|
||||
List<Message> messages=[];
|
||||
|
||||
Conversation(this.firstUser,this.secondUser);
|
||||
|
||||
void addMessage(User sender,String content){
|
||||
messages.add(Message(sender, content));
|
||||
}
|
||||
|
||||
void displayMessages(){
|
||||
print("-----Conversation entre $firstUser et $secondUser-----");
|
||||
for (var element in messages) {
|
||||
print(element);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
import 'user.dart';
|
||||
|
||||
class Message{
|
||||
User sender;
|
||||
String content;
|
||||
|
||||
Message(this.sender,this.content);
|
||||
|
||||
@override
|
||||
String toString() => "$sender : $content";
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
import 'conversation.dart';
|
||||
|
||||
class User{
|
||||
//attributes from DAFL
|
||||
int? idDafl;
|
||||
String? usernameDafl;
|
||||
String? passwDafl;
|
||||
//attributes to link with API
|
||||
String? usernameAPI;
|
||||
String? passwAPI;
|
||||
|
||||
//constructors
|
||||
User(this.usernameDafl, this.passwDafl);
|
||||
|
||||
User.name(this.usernameDafl);
|
||||
|
||||
User.fromDatabase(this.idDafl, this.usernameDafl);
|
||||
|
||||
|
||||
//lists
|
||||
Set<User> likedUsers={};
|
||||
Map<User,Conversation> conversations={};
|
||||
|
||||
|
||||
void like(User liked){
|
||||
likedUsers.add(liked);
|
||||
Conversation? conv = liked.conversations[this];
|
||||
if(conv==null) {
|
||||
conversations[liked]= Conversation(this, liked);
|
||||
} else {
|
||||
conversations[liked]= conv;
|
||||
}
|
||||
}
|
||||
|
||||
void chat(User recipient,String content){
|
||||
Conversation? conv = conversations[recipient];
|
||||
if(conv != null) conv.addMessage(this, content);
|
||||
}
|
||||
|
||||
void displayConversations(){
|
||||
conversations.forEach((k,v) => v.displayMessages());
|
||||
}
|
||||
|
||||
@override
|
||||
String toString() => "$usernameDafl ($idDafl)";
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
import 'user.dart';
|
||||
|
||||
class UserCreator{
|
||||
|
||||
User? createUser(int id, String username){
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
postgres
|
||||
mdpDaflBd
|
||||
89.83.54.48
|
||||
BD-DaflMusic
|
||||
|
@ -0,0 +1,46 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
|
||||
import '../model/user.dart';
|
||||
import 'package:postgresql2/constants.dart';
|
||||
import 'package:postgresql2/pool.dart';
|
||||
import 'package:postgresql2/postgresql.dart';
|
||||
|
||||
class DatabaseConnexion{
|
||||
final String filePath = 'assets/logs.txt';
|
||||
|
||||
String? _psqlUser;
|
||||
String? _psqlPswd;
|
||||
String? _psqlHost;
|
||||
String? _psqlDataBase;
|
||||
|
||||
|
||||
Future<void> _loadLogs() async{
|
||||
try{
|
||||
final _loadedData = await rootBundle.loadString(filePath);
|
||||
|
||||
final _logs = LineSplitter.split(_loadedData).toList();
|
||||
|
||||
_psqlUser = _logs[0];
|
||||
_psqlPswd = _logs[1];
|
||||
_psqlHost = _logs[2];
|
||||
_psqlDataBase = _logs[3];
|
||||
}
|
||||
catch(e){
|
||||
throw Exception('Logs file Not Found');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Initialise connexion to the database
|
||||
Future<Connection> initConnexion() async{
|
||||
await _loadLogs();
|
||||
|
||||
var uri = 'postgres://$_psqlUser:$_psqlPswd@$_psqlHost:5442/$_psqlDataBase';
|
||||
|
||||
return connect(uri);
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
import '../persistence/loader.dart';
|
||||
import '../model/user.dart';
|
||||
import 'database_connexion.dart';
|
||||
|
||||
class DatabaseLoader extends Loader{
|
||||
DatabaseConnexion dbConnexion = DatabaseConnexion();
|
||||
|
||||
|
||||
@override
|
||||
Future<User?> load(String? username, String? password) async {
|
||||
final connection = await dbConnexion.initConnexion();
|
||||
|
||||
connection.query('select * from utilisateur where username = @username AND password = @password',
|
||||
{'username': username,
|
||||
'password': password}).toList()
|
||||
.then((result) {
|
||||
print(result); });
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
import 'dart:io';
|
||||
import 'database_connexion.dart';
|
||||
import 'saver.dart';
|
||||
import '../model/user.dart';
|
||||
|
||||
|
||||
class DatabaseSaver extends Saver{
|
||||
DatabaseConnexion dbConnexion = DatabaseConnexion();
|
||||
|
||||
@override
|
||||
void save(User userToSave) async{
|
||||
final connection = await dbConnexion.initConnexion();
|
||||
|
||||
connection.execute('insert into utilisateur (username, password) values (@username, @password)',
|
||||
{ 'id' : '',
|
||||
'username': userToSave.usernameDafl,
|
||||
'password' : userToSave.passwDafl}).then((_) {});
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
import '../model/user.dart';
|
||||
|
||||
abstract class Loader{
|
||||
Future<User?> load(String? username, String? password);
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
import '../model/user.dart';
|
||||
|
||||
abstract class Saver{
|
||||
void save(User userToSave);
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
import '../model/user.dart';
|
||||
|
||||
abstract class Search{
|
||||
bool searchUser(String? username, String? password);
|
||||
bool searchUsername(String? username);
|
||||
}
|
@ -1,150 +0,0 @@
|
||||
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<ConversationPage> createState() => _ConversationPageState();
|
||||
}
|
||||
|
||||
class _ConversationPageState extends State<ConversationPage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
double height = MediaQuery.of(context).size.height;
|
||||
double width = MediaQuery.of(context).size.width;
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: true,
|
||||
backgroundColor: Color(0xFF141414),
|
||||
appBar: AppBar(
|
||||
toolbarHeight: 100,
|
||||
title: Row(
|
||||
children: [
|
||||
Container(
|
||||
height: 60,
|
||||
width: 60,
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(40),
|
||||
color: Colors.blue,
|
||||
),
|
||||
),
|
||||
SizedBox(width: 20,),
|
||||
Text("Max"),
|
||||
|
||||
],
|
||||
),
|
||||
|
||||
backgroundColor: Color(0xFF141414),
|
||||
elevation: 0,
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
color: Color(0xFF141414),
|
||||
height: height*0.76,
|
||||
width: double.infinity,
|
||||
child: ListView(
|
||||
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),
|
||||
],
|
||||
),
|
||||
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
|
||||
children: [
|
||||
Container(
|
||||
height: height*0.08,
|
||||
color: Color(0xFF141414),
|
||||
width: width*0.8,
|
||||
child: Container(
|
||||
margin: EdgeInsets.fromLTRB(20, 10, 0, 10),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
color: Colors.white,
|
||||
|
||||
),
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(10, 0, 10, 0),
|
||||
child: TextField(
|
||||
decoration: InputDecoration(
|
||||
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(20, 20, 20, 20),
|
||||
child: Text(message,style: TextStyle(fontFamily: 'DMSans', color: Colors.white ,fontSize: 19, 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(20, 20, 20, 20),
|
||||
child: Text(message,style: TextStyle(fontFamily: 'DMSans', color: Colors.white ,fontSize: 19, fontWeight: FontWeight.w400),
|
||||
)),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -1,3 +0,0 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
|
@ -1,228 +0,0 @@
|
||||
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<MessagesWidget> createState() => _MessagesWidgetState();
|
||||
}
|
||||
|
||||
class _MessagesWidgetState extends State<MessagesWidget> {
|
||||
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, 5, 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(),
|
||||
),
|
||||
|
||||
],
|
||||
);
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
import 'package:dafl_project_flutter/main.dart';
|
||||
import 'package:dafl_project_flutter/persistence/database_connexion.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
|
||||
Future<void> main() async {
|
||||
MyApp mainApp = MyApp();
|
||||
|
||||
runApp(mainApp);
|
||||
|
||||
DatabaseConnexion d = DatabaseConnexion();
|
||||
|
||||
d.initConnexion();
|
||||
|
||||
}
|
Loading…
Reference in new issue