diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml
index 2328905..2795ffb 100644
--- a/.idea/libraries/Dart_Packages.xml
+++ b/.idea/libraries/Dart_Packages.xml
@@ -814,6 +814,13 @@
+
+
+
+
+
+
+
@@ -1013,6 +1020,7 @@
+
diff --git a/Sources/justMUSIC/lib/components/comment_component.dart b/Sources/justMUSIC/lib/components/comment_component.dart
index 31878e6..7743f8c 100644
--- a/Sources/justMUSIC/lib/components/comment_component.dart
+++ b/Sources/justMUSIC/lib/components/comment_component.dart
@@ -1,68 +1,87 @@
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:google_fonts/google_fonts.dart';
-
-import '../values/constants.dart';
-
-class CommentComponent extends StatelessWidget {
- const CommentComponent({Key? key}) : super(key: key);
-
- @override
- Widget build(BuildContext context) {
- return Container(
- width: double.infinity,
- decoration: BoxDecoration(color: bgComment, borderRadius: BorderRadius.circular(20)),
- padding: EdgeInsets.all(20),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- ClipOval(
- child: SizedBox.fromSize(
- // Image radius
- child: Image(
- image: AssetImage("assets/images/exemple_profile.png"),
- width: 40,
- ),
- ),
- ),
- Expanded(
- child: Column(
- children: [
- Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- SizedBox(
- width: 10,
- ),
- Text(
- "Melina",
- 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)",
- style: GoogleFonts.plusJakartaSans(
- color: Colors.white.withOpacity(0.6), fontWeight: FontWeight.w400, fontSize: 10),
- ),
- ),
- ],
- ),
- SizedBox(
- height: 8,
- ),
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 10),
- child: Text(
- "J’adore ce son aussi, je trouve qu’il avait vraiment une plume de fou.",
- style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w300, fontSize: 11),
- ),
- ),
- ],
- ),
- )
- ],
- ),
- );
- }
-}
+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 {
+ 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.withOpacity(0.6),
+ borderRadius: BorderRadius.circular(15)),
+ padding: EdgeInsets.fromLTRB(20, 10, 20, 10),
+ margin: EdgeInsets.only(bottom: 13),
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ ClipOval(
+ child: SizedBox.fromSize(
+ // Image radius
+ child: Image(
+ 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(
+ 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 ${difference.inHours > 0 ? difference.inHours : difference.inMinutes}${difference.inHours > 0 ? "h" : "m"}",
+ style: GoogleFonts.plusJakartaSans(
+ color: Colors.white.withOpacity(0.6),
+ fontWeight: FontWeight.w400,
+ fontSize: 10),
+ ),
+ ),
+ ],
+ ),
+ SizedBox(
+ height: 4,
+ ),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 10),
+ child: Text(
+ comment.text,
+ style: GoogleFonts.plusJakartaSans(
+ color: Colors.white,
+ fontWeight: FontWeight.w400,
+ fontSize: 15),
+ ),
+ ),
+ ],
+ ),
+ )
+ ],
+ ),
+ );
+ }
+}
diff --git a/Sources/justMUSIC/lib/components/top_nav_bar_component.dart b/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
index 7a63204..950d0ee 100644
--- a/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
+++ b/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
@@ -1,269 +1,299 @@
-import 'package:another_flushbar/flushbar.dart';
-import 'package:auto_size_text/auto_size_text.dart';
-import 'package:flutter/cupertino.dart';
-import 'package:flutter/material.dart';
-import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
-import 'package:google_fonts/google_fonts.dart';
-import 'package:ionicons/ionicons.dart';
-import 'package:lottie/lottie.dart';
-import 'package:zoom_tap_animation/zoom_tap_animation.dart';
-
-import '../config/routes.dart';
-import '../main.dart';
-import '../values/constants.dart';
-
-class TopNavBarComponent extends StatefulWidget {
- final Function(bool) callback;
- const TopNavBarComponent({Key? key, required this.callback}) : super(key: key);
-
- @override
- State createState() => _TopNavBarComponentState();
-}
-
-class _TopNavBarComponentState extends State with TickerProviderStateMixin {
- bool choice = true;
- late AnimationController _controller;
- bool isDismissed = true;
-
- final DateTime midnight = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day + 1);
-
- void actionSurBouton() async {
- widget.callback(choice);
- await MyApp.postViewModel.getBestPosts();
- await MyApp.postViewModel.getPostsFriends();
- }
-
- @override
- void initState() {
- _controller = AnimationController(
- vsync: this,
- duration: Duration(seconds: 3),
- );
- super.initState();
- }
-
- void showCapsuleDot(bool isAvailable) {
- isAvailable
- ? Flushbar(
- maxWidth: 210,
- animationDuration: Duration(seconds: 1),
- forwardAnimationCurve: Curves.easeOutCirc,
- margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
- icon: Icon(
- Ionicons.sparkles,
- color: Colors.white,
- size: 18,
- ),
- padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
- messageText: Align(
- alignment: Alignment.centerLeft,
- child: Text(
- "Capsule disponible",
- style: GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
- ),
- ),
- flushbarStyle: FlushbarStyle.FLOATING,
- flushbarPosition: FlushbarPosition.BOTTOM,
- textDirection: Directionality.of(context),
- borderRadius: BorderRadius.circular(1000),
- borderWidth: 1,
- borderColor: Colors.white.withOpacity(0.04),
- duration: const Duration(minutes: 100),
- leftBarIndicatorColor: Colors.transparent,
- positionOffset: 20,
- onTap: (_) {
- Navigator.pop(context);
- Navigator.pushNamed(context, '/post');
- },
- ).show(context)
- : Flushbar(
- maxWidth: 155,
- animationDuration: Duration(seconds: 1),
- forwardAnimationCurve: Curves.easeOutCirc,
- margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
- icon: Lottie.asset(
- 'assets/animations/LottieHourGlass.json',
- width: 26,
- fit: BoxFit.fill,
- ),
- padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
- messageText: Align(
- alignment: Alignment.centerLeft,
- child: CountdownTimer(
- endTime: midnight.millisecondsSinceEpoch - 2 * 60 * 60 * 1000,
- textStyle: GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
- ),
- ),
- flushbarStyle: FlushbarStyle.FLOATING,
- flushbarPosition: FlushbarPosition.BOTTOM,
- textDirection: Directionality.of(context),
- borderRadius: BorderRadius.circular(1000),
- borderWidth: 1,
- borderColor: Colors.white.withOpacity(0.04),
- duration: const Duration(minutes: 100),
- leftBarIndicatorColor: Colors.transparent,
- positionOffset: 20,
- onTap: (_) {
- Navigator.pop(context);
- },
- ).show(context);
- }
-
- void checkAvailable() async {
- print("test");
- var res = await MyApp.postViewModel.getAvailable();
- print(res);
- ModalRoute? route = ModalRoute.of(context);
- if (route != null) {
- if (route.settings.name != '/flushbarRoute') {
- print("yes");
- showCapsuleDot(res);
- }
- }
- }
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: const EdgeInsets.only(top: defaultPadding),
- child: Container(
- padding: EdgeInsets.symmetric(horizontal: defaultPadding),
- width: double.infinity,
- height: 100,
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
- children: [
- Flexible(
- flex: 1,
- child: GestureDetector(
- behavior: HitTestBehavior.translucent,
- onTap: () async {
- Navigator.of(context).push(routeAddFriend());
- },
- child: const Icon(
- Icons.person_add_alt_1_rounded,
- color: Colors.white,
- size: 30,
- ),
- ),
- ),
- ConstrainedBox(
- constraints: BoxConstraints(maxWidth: 200),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.start,
- children: [
- ZoomTapAnimation(
- enableLongTapRepeatEvent: false,
- longTapRepeatDuration: const Duration(milliseconds: 100),
- begin: 1.0,
- onTap: () {
- checkAvailable();
- },
- end: 0.97,
- beginDuration: const Duration(milliseconds: 70),
- endDuration: const Duration(milliseconds: 100),
- beginCurve: Curves.decelerate,
- endCurve: Curves.easeInOutSine,
- child: Image(
- image: AssetImage("assets/images/logo.png"),
- height: 30,
- )),
- Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- GestureDetector(
- behavior: HitTestBehavior.translucent,
- onTap: () {
- if (!choice) {
- setState(() {
- choice = !choice;
- actionSurBouton();
- });
- }
- },
- child: LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) {
- if (choice) {
- return Padding(
- padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
- child: AutoSizeText(
- "Mes amis",
- style: GoogleFonts.plusJakartaSans(
- fontWeight: FontWeight.w500, fontSize: 16, color: Colors.white),
- ),
- );
- } else {
- return Padding(
- padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
- child: AutoSizeText(
- "Mes amis",
- style: GoogleFonts.plusJakartaSans(
- fontWeight: FontWeight.w300, fontSize: 16, color: unactiveFeed),
- ));
- }
- },
- ),
- ),
- GestureDetector(
- behavior: HitTestBehavior.translucent,
- onTap: () {
- if (choice) {
- setState(() {
- choice = !choice;
- actionSurBouton();
- });
- }
- },
- child: LayoutBuilder(
- builder: (BuildContext context, BoxConstraints constraints) {
- if (choice) {
- return Padding(
- padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
- child: AutoSizeText(
- "Discovery",
- style: GoogleFonts.plusJakartaSans(
- fontWeight: FontWeight.w300, fontSize: 16, color: unactiveFeed),
- ));
- } else {
- return Padding(
- padding: const EdgeInsets.only(left: 8, top: 0, right: 8, bottom: 6),
- child: AutoSizeText(
- "Discovery",
- style: GoogleFonts.plusJakartaSans(
- fontWeight: FontWeight.w500, fontSize: 16, color: Colors.white),
- ));
- }
- },
- ),
- ),
- ],
- ),
- ],
- ),
- ),
- Flexible(
- flex: 1,
- child: GestureDetector(
- onTap: () async {
- await MyApp.userViewModel.updateUserCurrent();
- Navigator.of(context).push(routeProfile());
- },
- child: ClipOval(
- child: SizedBox.fromSize(
- // Image radius
- child: FadeInImage.assetNetwork(
- placeholder: 'assets/images/loadingPlaceholder.gif',
- image: MyApp.userViewModel.userCurrent.pp,
- width: 30,
- )),
- ),
- ),
- )
- ],
- ),
- ),
- );
- }
-}
+import 'package:another_flushbar/flushbar.dart';
+import 'package:auto_size_text/auto_size_text.dart';
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
+import 'package:google_fonts/google_fonts.dart';
+import 'package:ionicons/ionicons.dart';
+import 'package:lottie/lottie.dart';
+import 'package:zoom_tap_animation/zoom_tap_animation.dart';
+
+import '../config/routes.dart';
+import 'package:timezone/timezone.dart' as tz;
+import '../main.dart';
+import '../values/constants.dart';
+
+class TopNavBarComponent extends StatefulWidget {
+ final Function(bool) callback;
+
+ const TopNavBarComponent({Key? key, required this.callback})
+ : super(key: key);
+
+ @override
+ State createState() => _TopNavBarComponentState();
+}
+
+class _TopNavBarComponentState extends State
+ with TickerProviderStateMixin {
+ bool choice = true;
+
+ bool isDismissed = true;
+
+ final DateTime midnight = DateTime(
+ DateTime.now().year, DateTime.now().month, DateTime.now().day + 1);
+
+ void actionSurBouton(bool choice) async {
+ widget.callback(choice);
+ }
+
+ @override
+ void initState() {
+ super.initState();
+ }
+
+ Future showCapsuleDot() async {
+ // Get the timezone for France
+ final franceTimeZone = tz.getLocation('Europe/Paris');
+
+ // Get the current date and time in France timezone
+ var now = tz.TZDateTime.now(franceTimeZone);
+
+ // Calculate the midnight time for the next day in France timezone
+ var midnight =
+ tz.TZDateTime(franceTimeZone, now.year, now.month, now.day + 1);
+
+ bool res = await MyApp.postViewModel.getAvailable();
+ if (res) {
+ Flushbar(
+ maxWidth: 210,
+ animationDuration: Duration(seconds: 1),
+ forwardAnimationCurve: Curves.easeOutCirc,
+ margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
+ icon: Icon(
+ Ionicons.sparkles,
+ color: Colors.white,
+ size: 18,
+ ),
+ padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
+ messageText: Align(
+ alignment: Alignment.centerLeft,
+ child: Text(
+ "Capsule disponible",
+ style:
+ GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
+ ),
+ ),
+ flushbarStyle: FlushbarStyle.FLOATING,
+ flushbarPosition: FlushbarPosition.BOTTOM,
+ textDirection: Directionality.of(context),
+ borderRadius: BorderRadius.circular(1000),
+ borderWidth: 1,
+ borderColor: Colors.white.withOpacity(0.04),
+ duration: const Duration(minutes: 100),
+ leftBarIndicatorColor: Colors.transparent,
+ positionOffset: 20,
+ onTap: (_) {
+ Navigator.pop(context);
+ Navigator.pushNamed(context, '/post');
+ },
+ ).show(context).then((value) {
+ setState(() {
+ isDismissed = !isDismissed;
+ });
+ });
+ } else {
+ Flushbar(
+ maxWidth: 155,
+ animationDuration: Duration(seconds: 1),
+ forwardAnimationCurve: Curves.easeOutCirc,
+ margin: EdgeInsets.fromLTRB(0, 0, 0, 0),
+ icon: Lottie.asset(
+ 'assets/animations/LottieHourGlass.json',
+ width: 26,
+ fit: BoxFit.fill,
+ ),
+ padding: EdgeInsets.fromLTRB(8, 8, 8, 8),
+ messageText: Align(
+ alignment: Alignment.centerLeft,
+ child: CountdownTimer(
+ endTime: midnight.millisecondsSinceEpoch,
+ textStyle:
+ GoogleFonts.plusJakartaSans(color: Colors.grey, fontSize: 15),
+ ),
+ ),
+ flushbarStyle: FlushbarStyle.FLOATING,
+ flushbarPosition: FlushbarPosition.BOTTOM,
+ textDirection: Directionality.of(context),
+ borderRadius: BorderRadius.circular(1000),
+ borderWidth: 1,
+ borderColor: Colors.white.withOpacity(0.04),
+ duration: const Duration(minutes: 100),
+ leftBarIndicatorColor: Colors.transparent,
+ positionOffset: 20,
+ onTap: (_) {},
+ ).show(context).then((value) {
+ setState(() {
+ isDismissed = !isDismissed;
+ });
+ });
+ }
+ }
+
+ void checkAvailable() async {
+ if (isDismissed) {
+ showCapsuleDot();
+ setState(() {
+ isDismissed = !isDismissed;
+ });
+ }
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Padding(
+ padding: const EdgeInsets.only(top: defaultPadding),
+ child: Container(
+ padding: EdgeInsets.symmetric(horizontal: defaultPadding),
+ width: double.infinity,
+ height: 100,
+ child: Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ Flexible(
+ flex: 1,
+ child: GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTap: () async {
+ Navigator.of(context).push(routeAddFriend());
+ },
+ child: const Icon(
+ Icons.person_add_alt_1_rounded,
+ color: Colors.white,
+ size: 30,
+ ),
+ ),
+ ),
+ ConstrainedBox(
+ constraints: BoxConstraints(maxWidth: 200),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ ZoomTapAnimation(
+ enableLongTapRepeatEvent: false,
+ longTapRepeatDuration: const Duration(milliseconds: 100),
+ begin: 1.0,
+ onTap: () {
+ checkAvailable();
+ },
+ end: 0.97,
+ beginDuration: const Duration(milliseconds: 70),
+ endDuration: const Duration(milliseconds: 100),
+ beginCurve: Curves.decelerate,
+ endCurve: Curves.easeInOutSine,
+ child: Image(
+ image: AssetImage("assets/images/logo.png"),
+ height: 30,
+ )),
+ Row(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTap: () {
+ if (!choice) {
+ setState(() {
+ choice = !choice;
+ actionSurBouton(false);
+ });
+ }
+ },
+ child: LayoutBuilder(
+ builder: (BuildContext context,
+ BoxConstraints constraints) {
+ if (choice) {
+ return Padding(
+ padding: const EdgeInsets.only(
+ left: 8, top: 0, right: 8, bottom: 6),
+ child: AutoSizeText(
+ "Mes amis",
+ style: GoogleFonts.plusJakartaSans(
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ color: Colors.white),
+ ),
+ );
+ } else {
+ return Padding(
+ padding: const EdgeInsets.only(
+ left: 8, top: 0, right: 8, bottom: 6),
+ child: AutoSizeText(
+ "Mes amis",
+ style: GoogleFonts.plusJakartaSans(
+ fontWeight: FontWeight.w300,
+ fontSize: 16,
+ color: unactiveFeed),
+ ));
+ }
+ },
+ ),
+ ),
+ GestureDetector(
+ behavior: HitTestBehavior.translucent,
+ onTap: () {
+ if (choice) {
+ setState(() {
+ choice = !choice;
+ actionSurBouton(true);
+ });
+ }
+ },
+ child: LayoutBuilder(
+ builder: (BuildContext context,
+ BoxConstraints constraints) {
+ if (choice) {
+ return Padding(
+ padding: const EdgeInsets.only(
+ left: 8, top: 0, right: 8, bottom: 6),
+ child: AutoSizeText(
+ "Discovery",
+ style: GoogleFonts.plusJakartaSans(
+ fontWeight: FontWeight.w300,
+ fontSize: 16,
+ color: unactiveFeed),
+ ));
+ } else {
+ return Padding(
+ padding: const EdgeInsets.only(
+ left: 8, top: 0, right: 8, bottom: 6),
+ child: AutoSizeText(
+ "Discovery",
+ style: GoogleFonts.plusJakartaSans(
+ fontWeight: FontWeight.w500,
+ fontSize: 16,
+ color: Colors.white),
+ ));
+ }
+ },
+ ),
+ ),
+ ],
+ ),
+ ],
+ ),
+ ),
+ Flexible(
+ flex: 1,
+ child: GestureDetector(
+ onTap: () async {
+ await MyApp.userViewModel.updateUserCurrent();
+ Navigator.of(context).push(routeProfile());
+ },
+ child: ClipOval(
+ child: SizedBox.fromSize(
+ // Image radius
+ child: FadeInImage.assetNetwork(
+ placeholder: 'assets/images/loadingPlaceholder.gif',
+ image: MyApp.userViewModel.userCurrent.pp,
+ width: 30,
+ )),
+ ),
+ ),
+ )
+ ],
+ ),
+ ),
+ );
+ }
+}
diff --git a/Sources/justMUSIC/lib/main.dart b/Sources/justMUSIC/lib/main.dart
index 577a1d4..83fabcd 100644
--- a/Sources/justMUSIC/lib/main.dart
+++ b/Sources/justMUSIC/lib/main.dart
@@ -11,20 +11,23 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:justmusic/screens/add_friend_screen.dart';
import 'package:justmusic/screens/explanations_screen.dart';
import 'package:justmusic/screens/feed_screen.dart';
+import 'package:justmusic/screens/loading_screen.dart';
import 'package:justmusic/screens/login_screen.dart';
import 'package:justmusic/screens/launching_rocker_screen.dart';
import 'package:justmusic/screens/post_screen.dart';
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';
import 'package:justmusic/model/User.dart' as userJustMusic;
import 'firebase_options.dart';
+import 'package:timezone/data/latest.dart' as tz;
Future main() async {
+ tz.initializeTimeZones();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
@@ -40,6 +43,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});
@@ -64,7 +68,7 @@ class _MyAppState extends State {
return null;
} else {
MyApp.userViewModel.userCurrent =
- (await (MyApp.userViewModel.getUser(user.uid)))!;
+ (await (MyApp.userViewModel.getUser(user.uid)))!;
userCurrent = Stream.value(MyApp.userViewModel.userCurrent);
print('User is signed in!');
}
@@ -100,46 +104,40 @@ class _MyAppState extends State {
},
debugShowCheckedModeBanner: false,
theme: ThemeData(
- // This is the theme of your application.
- //
- // Try running your application with "flutter run". You'll see the
- // application has a blue toolbar. Then, without quitting the app, try
- // changing the primarySwatch below to Colors.green and then invoke
- // "hot reload" (press "r" in the console where you ran "flutter run",
- // or simply save your changes to "hot reload" in a Flutter IDE).
- // Notice that the counter didn't reset back to zero; the application
- // is not restarted.
primarySwatch: Colors.blue,
),
- home: FirebaseAuth.instance.currentUser != null
- ? StreamBuilder(
- stream: userCurrent,
- initialData: null,
- builder: (context, snapshot) {
- if (snapshot.hasData) {
- print("hasdata");
-
- return AnimatedSwitcher(
- duration: Duration(milliseconds: 1000),
- transitionBuilder: (child, animation) {
- return FadeTransition(
- opacity: animation, child: child);
- },
- child: FeedScreen(),
- );
- } else {
- return Scaffold(
- backgroundColor: bgColor,
- body: Center(
- child: Image(
- image: AssetImage("assets/images/logo.png"),
- width: 130,
- ),
- ),
- );
- }
- })
- : WellcomeScreen());
+ home: StreamBuilder(
+ stream: FirebaseAuth.instance.authStateChanges(),
+ builder: (context, snapshot) {
+ if (snapshot.connectionState == ConnectionState.waiting) {
+ return LoadingScreen();
+ } else if (snapshot.hasData) {
+ return FutureBuilder(
+ future: MyApp.userViewModel.getUser(snapshot.data!.uid),
+ builder: (context, userSnapshot) {
+ if (userSnapshot.connectionState ==
+ ConnectionState.waiting) {
+ return LoadingScreen();
+ } else if (userSnapshot.hasData) {
+ MyApp.userViewModel.userCurrent = userSnapshot.data!;
+ return AnimatedSwitcher(
+ duration: Duration(milliseconds: 1000),
+ transitionBuilder: (child, animation) {
+ return FadeTransition(
+ opacity: animation, child: child);
+ },
+ child: FeedScreen(),
+ );
+ } else {
+ return WellcomeScreen();
+ }
+ },
+ );
+ } else {
+ return WellcomeScreen();
+ }
+ },
+ ));
},
designSize: Size(390, 844),
);
diff --git a/Sources/justMUSIC/lib/model/mapper/CommentMapper.dart b/Sources/justMUSIC/lib/model/mapper/CommentMapper.dart
index cfa69f7..ae4b96b 100644
--- a/Sources/justMUSIC/lib/model/mapper/CommentMapper.dart
+++ b/Sources/justMUSIC/lib/model/mapper/CommentMapper.dart
@@ -5,13 +5,10 @@ import '../Comment.dart';
import '../User.dart';
class CommentMapper {
- static Future toModel(DocumentSnapshot