change text artist and title
continuous-integration/drone/push Build is passing Details

MANAGE_COMMENTS_LDE
Lucas Delanier 2 years ago
parent eece9357ec
commit 929f090464

@ -2,17 +2,24 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/model/Comment.dart';
import '../values/constants.dart';
class CommentComponent extends StatelessWidget {
const CommentComponent({Key? key}) : super(key: key);
final Comment comment;
const CommentComponent({Key? key, required this.comment}) : super(key: key);
@override
Widget build(BuildContext context) {
final now = DateTime.now();
final difference = now.difference(comment.date);
return Container(
width: double.infinity,
decoration: BoxDecoration(color: bgComment, borderRadius: BorderRadius.circular(20)),
padding: EdgeInsets.all(20),
margin: EdgeInsets.only(bottom: 20),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@ -20,28 +27,30 @@ class CommentComponent extends StatelessWidget {
child: SizedBox.fromSize(
// Image radius
child: Image(
image: AssetImage("assets/images/exemple_profile.png"),
image: NetworkImage(comment.user.pp),
width: 40,
),
),
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.start,
children: [
SizedBox(
width: 10,
),
Text(
"Melina",
comment.user.pseudo,
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w600),
),
Padding(
padding: EdgeInsets.only(top: 6, left: 10),
child: Text(
"Il y a 2 min(s)",
"il y a ${difference.inHours}h",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.6), fontWeight: FontWeight.w400, fontSize: 10),
),
@ -54,8 +63,8 @@ class CommentComponent extends StatelessWidget {
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text(
"Jadore ce son aussi, je trouve quil avait vraiment une plume de fou.",
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w300, fontSize: 11),
comment.text,
style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 12),
),
),
],

@ -17,6 +17,7 @@ import 'package:justmusic/screens/profile_screen.dart';
import 'package:justmusic/screens/registration_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart';
import 'package:justmusic/values/constants.dart';
import 'package:justmusic/view_model/CommentViewModel.dart';
import 'package:justmusic/view_model/MusicViewModel.dart';
import 'package:justmusic/view_model/PostViewModel.dart';
import 'package:justmusic/view_model/UserViewModel.dart';
@ -38,6 +39,7 @@ class MyApp extends StatefulWidget {
static MusicViewModel musicViewModel = MusicViewModel();
static PostViewModel postViewModel = PostViewModel();
static AudioPlayer audioPlayer = AudioPlayer();
static CommentViewModel commentViewModel = CommentViewModel();
const MyApp({super.key});

@ -8,10 +8,6 @@ class CommentMapper {
static Future<Comment> toModel(DocumentSnapshot<Map<String, dynamic>> snapshot) async {
final data = snapshot.data();
User? user = await MyApp.userViewModel.getUser(data?['user_id']);
return Comment(
snapshot.id,
user!,
data?["text"],
data?["date"]);
return Comment(snapshot.id, user!, data?["text"] ?? "", data?["date"].toDate());
}
}

@ -1,6 +1,7 @@
import 'dart:async';
import 'package:flutter/Material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:flutter_keyboard_visibility/flutter_keyboard_visibility.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
@ -15,6 +16,7 @@ import '../components/comment_component.dart';
import '../main.dart';
import '../model/Post.dart';
import '../model/Comment.dart';
import '../values/constants.dart';
class DetailPostScreen extends StatefulWidget {
@ -106,7 +108,8 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
width: double.infinity,
fit: BoxFit.cover,
),
)),
),
),
Column(
children: [
Container(
@ -118,7 +121,8 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Colors.transparent, bgModal],
stops: [0, 0.8]),
stops: [0, 0.8],
),
),
child: Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 20, 10),
@ -157,31 +161,37 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
child: ScrollConfiguration(
behavior: ScrollBehavior().copyWith(scrollbars: false),
child: TextScroll(
choice
? widget.post.user.pseudo
: widget.post.music.title!,
choice ? widget.post.user.pseudo : widget.post.music.title!,
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w800,
fontSize: 22),
fontSize: 22,
),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
))),
),
),
),
Padding(
padding: const EdgeInsets.only(left: 20.0),
child: choice
? DateTime(today.year, today.month, today.day)
.isAtSameMomentAs(DateTime(widget.post.date.year,
widget.post.date.month, widget.post.date.day))
? DateTime(today.year, today.month, today.day).isAtSameMomentAs(
DateTime(
widget.post.date.year,
widget.post.date.month,
widget.post.date.day,
),
)
? Text(
"Aujourd'hui, ${widget.post.date.hour}:${widget.post.date.minute}",
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w900,
fontSize: 18),
fontSize: 18,
),
)
: Text(
"hier, ${widget.post.date.hour}:${widget.post.date.minute}",
@ -189,7 +199,8 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
height: 1,
color: Colors.white,
fontWeight: FontWeight.w900,
fontSize: 18),
fontSize: 18,
),
)
: Text(
widget.post.music.date.toString(),
@ -197,9 +208,10 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
height: 1,
color: Colors.white,
fontWeight: FontWeight.w900,
fontSize: 18),
fontSize: 18,
),
),
),
)
],
),
),
@ -210,27 +222,32 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.5),
fontWeight: FontWeight.w400,
fontSize: 15),
fontSize: 15,
),
)
: Text(
"",
style: GoogleFonts.plusJakartaSans(
color: Colors.white.withOpacity(0.4),
fontWeight: FontWeight.w300,
fontSize: 13),
fontSize: 13,
),
)
: ScrollConfiguration(
behavior: ScrollBehavior().copyWith(scrollbars: false),
child: TextScroll(widget.post.music.artists.first.name!,
child: TextScroll(
widget.post.music.artists.first.name!,
style: GoogleFonts.plusJakartaSans(
height: 1,
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: 17),
fontSize: 17,
),
mode: TextScrollMode.endless,
pauseBetween: Duration(milliseconds: 500),
velocity: Velocity(pixelsPerSecond: Offset(20, 0))),
)
velocity: Velocity(pixelsPerSecond: Offset(20, 0)),
),
),
],
),
),
@ -250,7 +267,8 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
height: 1,
color: Colors.white,
fontWeight: FontWeight.w400,
fontSize: 14),
fontSize: 14,
),
),
),
)
@ -263,8 +281,8 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
color: bgAppBar,
border: Border(
top: BorderSide(
color: Color(0xFF262626), // Couleur de la bordure
width: 1.0, // Épaisseur de la bordure
color: Color(0xFF262626),
width: 1.0,
),
),
),
@ -280,42 +298,72 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
onTap: () {
myFocusNode.requestFocus();
},
child: SvgPicture.asset("assets/images/chat.svg",
semanticsLabel: 'Chat Logo')),
child:
SvgPicture.asset("assets/images/chat.svg", semanticsLabel: 'Chat Logo'),
),
SvgPicture.asset("assets/images/add.svg",
semanticsLabel: 'Add playlist Logo'),
SvgPicture.asset("assets/images/save.svg", semanticsLabel: 'Save Logo'),
SvgPicture.asset("assets/images/report.svg",
semanticsLabel: 'Report Logo'),
SvgPicture.asset("assets/images/report.svg", semanticsLabel: 'Report Logo'),
],
),
),
Padding(
FutureBuilder<List<Comment>>(
future: MyApp.commentViewModel.getCommentsByPostId(widget.post.id),
builder: (BuildContext context, AsyncSnapshot<List<Comment>> snapshot) {
if (snapshot.hasData) {
print("test:");
return Column(
children: [
snapshot.data!.length > 0
? Padding(
padding: const EdgeInsets.all(15.0),
child: RichText(
text: TextSpan(
text: "3",
text: snapshot.data!.length.toString(),
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w800),
color: Colors.white,
fontWeight: FontWeight.w800,
),
children: [
TextSpan(
text: " commentaires",
text: snapshot.data!.length > 1
? " commentaires"
: " commentaire",
style: GoogleFonts.plusJakartaSans(
color: Colors.white, fontWeight: FontWeight.w400),
)
])),
color: Colors.white,
fontWeight: FontWeight.w400,
),
),
Padding(
padding: EdgeInsets.fromLTRB(20, 0, 20, 20),
child: Wrap(
runSpacing: 13,
children: [
CommentComponent(),
CommentComponent(),
CommentComponent(),
],
),
),
)
: Container(),
snapshot.data!.length > 0
? Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 20, 20),
child: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: snapshot.data?.length,
itemBuilder: (BuildContext context, int index) {
return CommentComponent(comment: snapshot.data![index]);
},
),
)
: Container(),
],
);
} else {
return Container(
child: Center(
child: CupertinoActivityIndicator(),
),
);
}
},
),
],
),
),
@ -344,22 +392,24 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
height: 120,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
border: Border.all(width: 4, color: Colors.white)),
border: Border.all(width: 4, color: Colors.white),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(15),
// implement image
// implementer l'image
child: Image(
image: NetworkImage(
choice ? widget.post.music.cover! : widget.post.selfie!),
image: NetworkImage(choice ? widget.post.music.cover! : widget.post.selfie!),
fit: BoxFit.cover,
)),
),
),
),
),
)
: Container()
: Container(),
],
),
)),
),
),
Align(
alignment: Alignment.topCenter,
child: Container(
@ -373,7 +423,10 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
width: 60,
height: 5,
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.6), borderRadius: BorderRadius.circular(20))),
color: Colors.white.withOpacity(0.6),
borderRadius: BorderRadius.circular(20),
),
),
),
),
),
@ -386,7 +439,9 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
height: 70,
width: double.infinity,
decoration: BoxDecoration(
border: Border(top: BorderSide(color: grayColor, width: 2)), color: textFieldMessage),
border: Border(top: BorderSide(color: grayColor, width: 2)),
color: textFieldMessage,
),
child: Center(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 20),
@ -394,16 +449,14 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
children: [
ClipOval(
child: SizedBox.fromSize(
// Image radius
// Rayon de l'image
child: Image.network(
MyApp.userViewModel.userCurrent.pp,
width: 45,
),
),
),
SizedBox(
width: 10,
),
SizedBox(width: 10),
Expanded(
child: TextField(
keyboardAppearance: Brightness.dark,
@ -420,26 +473,31 @@ class _DetailPostScreenState extends State<DetailPostScreen> {
),
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(width: 1, color: grayText),
borderRadius: BorderRadius.all(Radius.circular(100))),
borderRadius: BorderRadius.all(Radius.circular(100)),
),
contentPadding: EdgeInsets.only(top: 0, bottom: 0, left: 20, right: 20),
fillColor: bgModal,
filled: true,
focusColor: Color.fromRGBO(255, 255, 255, 0.30),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(width: 1, color: grayText),
borderRadius: BorderRadius.all(Radius.circular(100))),
borderRadius: BorderRadius.all(Radius.circular(100)),
),
hintText: 'Ajoutez une réponse...',
hintStyle: GoogleFonts.plusJakartaSans(color: grayText)),
hintStyle: GoogleFonts.plusJakartaSans(color: grayText),
),
),
),
)
],
),
),
)),
),
),
),
],
),
));
),
);
}
}

@ -13,8 +13,8 @@ class CommentViewModel {
// Methods
addComment(String text, String idPost) async {
try {
await _commentService.createComment(text,idPost);
} catch(e) {
await _commentService.createComment(text, idPost);
} catch (e) {
print(e);
rethrow;
}
@ -23,12 +23,15 @@ class CommentViewModel {
Future<List<Comment>> getCommentsByPostId(String id) async {
try {
var responseData = await _commentService.getCommentsByPostId(id);
print(responseData.length);
var commentsFutures = responseData.map((value) async {
return await CommentMapper.toModel(value);
}).toList();
_comments = await Future.wait(commentsFutures);
print("ccccccc");
_comments.map((e) => print(e.text));
return _comments;
} catch(e) {
} catch (e) {
print(e);
_comments = [];
return [];

Loading…
Cancel
Save