diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml
index 7f7c6f9..8cb1ec7 100644
--- a/.idea/libraries/Dart_Packages.xml
+++ b/.idea/libraries/Dart_Packages.xml
@@ -114,6 +114,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -352,6 +373,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -667,6 +702,13 @@
+
+
+
+
+
+
+
@@ -758,6 +800,13 @@
+
+
+
+
+
+
+
@@ -786,6 +835,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -945,6 +1008,9 @@
+
+
+
@@ -978,6 +1044,8 @@
+
+
@@ -1021,6 +1089,7 @@
+
@@ -1034,9 +1103,12 @@
+
+
+
diff --git a/Sources/justMUSIC/lib/components/comment_component.dart b/Sources/justMUSIC/lib/components/comment_component.dart
index 7743f8c..c129839 100644
--- a/Sources/justMUSIC/lib/components/comment_component.dart
+++ b/Sources/justMUSIC/lib/components/comment_component.dart
@@ -1,3 +1,4 @@
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
@@ -18,9 +19,7 @@ class CommentComponent extends StatelessWidget {
return Container(
width: double.infinity,
- decoration: BoxDecoration(
- color: bgComment.withOpacity(0.6),
- borderRadius: BorderRadius.circular(15)),
+ 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(
@@ -28,11 +27,17 @@ class CommentComponent extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start,
children: [
ClipOval(
- child: SizedBox.fromSize(
+ child: SizedBox(
+ height: 40,
+ width: 40,
// Image radius
- child: Image(
- image: NetworkImage(comment.user.pp),
- width: 40,
+ child: CachedNetworkImage(
+ imageUrl: comment.user.pp,
+ fadeInDuration: const Duration(milliseconds: 200),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
@@ -49,17 +54,14 @@ class CommentComponent extends StatelessWidget {
),
Text(
comment.user.pseudo,
- style: GoogleFonts.plusJakartaSans(
- color: Colors.white, fontWeight: FontWeight.w600),
+ 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),
+ color: Colors.white.withOpacity(0.6), fontWeight: FontWeight.w400, fontSize: 10),
),
),
],
@@ -71,10 +73,7 @@ class CommentComponent extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Text(
comment.text,
- style: GoogleFonts.plusJakartaSans(
- color: Colors.white,
- fontWeight: FontWeight.w400,
- fontSize: 15),
+ style: GoogleFonts.plusJakartaSans(color: Colors.white, fontWeight: FontWeight.w400, fontSize: 15),
),
),
],
diff --git a/Sources/justMUSIC/lib/components/editable_post_component.dart b/Sources/justMUSIC/lib/components/editable_post_component.dart
index 82e0d30..5246e54 100644
--- a/Sources/justMUSIC/lib/components/editable_post_component.dart
+++ b/Sources/justMUSIC/lib/components/editable_post_component.dart
@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:animated_appear/animated_appear.dart';
import 'package:auto_size_text/auto_size_text.dart';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/Material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
@@ -150,10 +151,10 @@ class _EditablePostComponentState extends State with Tick
),
),
)
- : Image(
- image: NetworkImage(widget.music?.cover ?? ""),
- fit: BoxFit.cover,
- width: double.infinity,
+ : CachedNetworkImage(
+ imageUrl: widget.music!.cover!,
+ fadeInDuration: const Duration(milliseconds: 100),
+ errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
diff --git a/Sources/justMUSIC/lib/components/music_list_component.dart b/Sources/justMUSIC/lib/components/music_list_component.dart
index c38608d..393c938 100644
--- a/Sources/justMUSIC/lib/components/music_list_component.dart
+++ b/Sources/justMUSIC/lib/components/music_list_component.dart
@@ -1,3 +1,4 @@
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/Material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:justmusic/components/play_button_component.dart';
@@ -28,12 +29,19 @@ class MusicListComponent extends StatelessWidget {
return ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(5)),
child: music.cover != null
- ? FadeInImage.assetNetwork(
+ ? SizedBox(
height: 60,
width: 60,
- fit: BoxFit.cover,
- placeholder: "assets/images/loadingPlaceholder.gif",
- image: music.cover!)
+ // Image radius
+ child: CachedNetworkImage(
+ imageUrl: music.cover!,
+ fadeInDuration: const Duration(milliseconds: 200),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
+ ),
+ )
: Container(
height: 60,
width: 60,
@@ -41,8 +49,8 @@ class MusicListComponent extends StatelessWidget {
),
);
} else {
- return Image(
- image: AssetImage("assets/images/exemple_cover.png"),
+ return const Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
height: 60,
width: 60,
);
diff --git a/Sources/justMUSIC/lib/components/post_component.dart b/Sources/justMUSIC/lib/components/post_component.dart
index 2d0535c..5aa63e2 100644
--- a/Sources/justMUSIC/lib/components/post_component.dart
+++ b/Sources/justMUSIC/lib/components/post_component.dart
@@ -1,4 +1,5 @@
import 'package:auto_size_text/auto_size_text.dart';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:google_fonts/google_fonts.dart';
@@ -127,10 +128,16 @@ class _PostComponentState extends State with TickerProviderStateM
child: Stack(
alignment: Alignment.bottomCenter,
children: [
- Image(
- image: NetworkImage(widget.post.music.cover!),
- fit: BoxFit.cover,
+ SizedBox(
width: double.infinity,
+ child: CachedNetworkImage(
+ imageUrl: widget.post.music.cover!,
+ fadeInDuration: const Duration(milliseconds: 200),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
+ ),
),
Image(
image: AssetImage("assets/images/shadow_post.png"),
@@ -170,9 +177,14 @@ class _PostComponentState extends State with TickerProviderStateM
child: ClipRRect(
borderRadius: BorderRadius.circular(13),
// implement image
- child: Image(
- image: NetworkImage(widget.post.selfie!),
+ child: CachedNetworkImage(
+ imageUrl: widget.post.selfie!,
fit: BoxFit.cover,
+ fadeInDuration: const Duration(milliseconds: 200),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
diff --git a/Sources/justMUSIC/lib/components/profil_picture_component.dart b/Sources/justMUSIC/lib/components/profil_picture_component.dart
index cd0ad72..fbdc84d 100644
--- a/Sources/justMUSIC/lib/components/profil_picture_component.dart
+++ b/Sources/justMUSIC/lib/components/profil_picture_component.dart
@@ -1,6 +1,5 @@
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/Material.dart';
-import 'package:justmusic/screens/user_screen.dart';
-
import '../config/routes.dart';
import '../model/User.dart';
@@ -20,11 +19,17 @@ class ProfilPictureComponent extends StatelessWidget {
_openDetail(context);
},
child: ClipOval(
- child: SizedBox.fromSize(
+ child: SizedBox(
+ height: 40,
+ width: 40,
// Image radius
- child: Image(
- image: NetworkImage(user.pp),
- width: 40,
+ child: CachedNetworkImage(
+ imageUrl: user.pp,
+ fadeInDuration: const Duration(milliseconds: 300),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
diff --git a/Sources/justMUSIC/lib/components/profile_component.dart b/Sources/justMUSIC/lib/components/profile_component.dart
index 9b18d1b..86b9f9a 100644
--- a/Sources/justMUSIC/lib/components/profile_component.dart
+++ b/Sources/justMUSIC/lib/components/profile_component.dart
@@ -1,4 +1,5 @@
import 'package:auto_size_text/auto_size_text.dart';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
@@ -18,13 +19,19 @@ class ProfileComponent extends StatelessWidget {
children: [
ClipOval(
child: ConstrainedBox(
- constraints: BoxConstraints(maxWidth: 200, maxHeight: 200),
- child: Image(
- image: NetworkImage(user.pp),
- height: 100.w,
- width: 100.w,
- ),
- ),
+ constraints: BoxConstraints(maxWidth: 200, maxHeight: 200),
+ child: SizedBox(
+ width: 100.w,
+ height: 100.w,
+ child: CachedNetworkImage(
+ imageUrl: user.pp,
+ fadeInDuration: const Duration(milliseconds: 300),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
+ ),
+ )),
),
SizedBox(
height: 10,
diff --git a/Sources/justMUSIC/lib/components/top_nav_bar_component.dart b/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
index d258f68..d47357a 100644
--- a/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
+++ b/Sources/justMUSIC/lib/components/top_nav_bar_component.dart
@@ -1,5 +1,6 @@
import 'package:another_flushbar/flushbar.dart';
import 'package:auto_size_text/auto_size_text.dart';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_countdown_timer/flutter_countdown_timer.dart';
@@ -262,13 +263,18 @@ class _TopNavBarComponentState extends State with TickerProv
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,
+ child: SizedBox(
width: 30,
- )),
+ // Image radius
+ child: CachedNetworkImage(
+ imageUrl: MyApp.userViewModel.userCurrent.pp,
+ fadeInDuration: const Duration(milliseconds: 300),
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
+ ),
+ ),
),
),
)
diff --git a/Sources/justMUSIC/lib/main.dart b/Sources/justMUSIC/lib/main.dart
index 391db40..bcba65c 100644
--- a/Sources/justMUSIC/lib/main.dart
+++ b/Sources/justMUSIC/lib/main.dart
@@ -11,13 +11,11 @@ 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/user_screen.dart';
import 'package:justmusic/screens/welcome_screen.dart';
import 'package:justmusic/view_model/CommentViewModel.dart';
import 'package:justmusic/view_model/MusicViewModel.dart';
@@ -45,6 +43,7 @@ class MyApp extends StatefulWidget {
static PostViewModel postViewModel = PostViewModel();
static AudioPlayer audioPlayer = AudioPlayer();
static CommentViewModel commentViewModel = CommentViewModel();
+ static const keyManager = 'customCacheKey';
const MyApp({super.key});
diff --git a/Sources/justMUSIC/lib/screens/detail_post_screen.dart b/Sources/justMUSIC/lib/screens/detail_post_screen.dart
index a99e540..677a7de 100644
--- a/Sources/justMUSIC/lib/screens/detail_post_screen.dart
+++ b/Sources/justMUSIC/lib/screens/detail_post_screen.dart
@@ -1,4 +1,5 @@
import 'dart:async';
+import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/Material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
@@ -89,11 +90,14 @@ class _DetailPostScreenState extends State {
child: Container(
height: 400,
width: double.infinity,
- child: FadeInImage.assetNetwork(
- placeholder: "assets/images/loadingPlaceholder.gif",
- image: choice ? widget.post.selfie! : widget.post.music.cover!,
- width: double.infinity,
+ child: CachedNetworkImage(
+ imageUrl: choice ? widget.post.selfie! : widget.post.music.cover!,
+ fadeInDuration: const Duration(milliseconds: 300),
fit: BoxFit.cover,
+ placeholder: (context, url) => Image(
+ image: AssetImage("assets/images/loadingPlaceholder.gif"),
+ ),
+ errorWidget: (context, url, error) => Icon(Icons.error),
),
),
),
diff --git a/Sources/justMUSIC/lib/services/cacheManager.dart b/Sources/justMUSIC/lib/services/cacheManager.dart
new file mode 100644
index 0000000..1d92571
--- /dev/null
+++ b/Sources/justMUSIC/lib/services/cacheManager.dart
@@ -0,0 +1,14 @@
+import 'package:flutter_cache_manager/flutter_cache_manager.dart';
+
+class CustomCacheManager {
+ static const key = 'customCacheKey';
+ static CacheManager instance = CacheManager(
+ Config(
+ key,
+ stalePeriod: const Duration(days: 2),
+ maxNrOfCacheObjects: 40,
+ repo: JsonCacheInfoRepository(databaseName: key),
+ fileService: HttpFileService(),
+ ),
+ );
+}
diff --git a/Sources/justMUSIC/pubspec.lock b/Sources/justMUSIC/pubspec.lock
index 8268097..ef6e363 100644
--- a/Sources/justMUSIC/pubspec.lock
+++ b/Sources/justMUSIC/pubspec.lock
@@ -129,6 +129,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.1"
+ cached_network_image:
+ dependency: "direct main"
+ description:
+ name: cached_network_image
+ sha256: fd3d0dc1d451f9a252b32d95d3f0c3c487bc41a75eba2e6097cb0b9c71491b15
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.2.3"
+ cached_network_image_platform_interface:
+ dependency: transitive
+ description:
+ name: cached_network_image_platform_interface
+ sha256: bb2b8403b4ccdc60ef5f25c70dead1f3d32d24b9d6117cfc087f496b178594a7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.0"
+ cached_network_image_web:
+ dependency: transitive
+ description:
+ name: cached_network_image_web
+ sha256: b8eb814ebfcb4dea049680f8c1ffb2df399e4d03bf7a352c775e26fa06e02fa0
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
characters:
dependency: transitive
description:
@@ -398,6 +422,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.3.0"
+ flutter_blurhash:
+ dependency: transitive
+ description:
+ name: flutter_blurhash
+ sha256: "05001537bd3fac7644fa6558b09ec8c0a3f2eba78c0765f88912882b1331a5c6"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.7.0"
+ flutter_cache_manager:
+ dependency: transitive
+ description:
+ name: flutter_cache_manager
+ sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba"
+ url: "https://pub.dev"
+ source: hosted
+ version: "3.3.1"
flutter_countdown_timer:
dependency: "direct main"
description:
@@ -752,6 +792,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.2"
+ octo_image:
+ dependency: transitive
+ description:
+ name: octo_image
+ sha256: "107f3ed1330006a3bea63615e81cf637433f5135a52466c7caa0e7152bca9143"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.2"
path:
dependency: transitive
description:
@@ -856,6 +904,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.7.3"
+ rxdart:
+ dependency: transitive
+ description:
+ name: rxdart
+ sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.27.7"
sky_engine:
dependency: transitive
description: flutter
@@ -885,6 +941,22 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.9.1"
+ sqflite:
+ dependency: transitive
+ description:
+ name: sqflite
+ sha256: "591f1602816e9c31377d5f008c2d9ef7b8aca8941c3f89cc5fd9d84da0c38a9a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.3.0"
+ sqflite_common:
+ dependency: transitive
+ description:
+ name: sqflite_common
+ sha256: "1b92f368f44b0dee2425bb861cfa17b6f6cf3961f762ff6f941d20b33355660a"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.5.0"
stack_trace:
dependency: transitive
description:
diff --git a/Sources/justMUSIC/pubspec.yaml b/Sources/justMUSIC/pubspec.yaml
index ae178c7..872339f 100644
--- a/Sources/justMUSIC/pubspec.yaml
+++ b/Sources/justMUSIC/pubspec.yaml
@@ -74,6 +74,7 @@ dependencies:
flutter_keyboard_visibility: ^5.4.1
timezone: ^0.9.2
firebase_messaging: ^14.6.5
+ cached_network_image: ^3.2.3
dev_dependencies:
flutter_test: