Starting get capsules 🔨

GET_CAPSULES_LDE-EKA
Emre KARTAL 2 years ago
parent 271cefff0c
commit 44b6477101

@ -7,9 +7,12 @@ import 'package:gradient_borders/box_borders/gradient_box_border.dart';
import 'package:text_scroll/text_scroll.dart'; import 'package:text_scroll/text_scroll.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart'; import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../model/Post.dart';
class PostComponent extends StatefulWidget { class PostComponent extends StatefulWidget {
final VoidCallback? callback; final VoidCallback? callback;
PostComponent({Key? key, required this.callback}) : super(key: key); final Post post;
PostComponent({Key? key, required this.callback, required this.post}) : super(key: key);
@override @override
State<PostComponent> createState() => _PostComponentState(); State<PostComponent> createState() => _PostComponentState();

@ -7,6 +7,7 @@ import 'package:ionicons/ionicons.dart';
import 'package:zoom_tap_animation/zoom_tap_animation.dart'; import 'package:zoom_tap_animation/zoom_tap_animation.dart';
import '../config/routes.dart'; import '../config/routes.dart';
import '../main.dart';
import '../values/constants.dart'; import '../values/constants.dart';
class TopNavBarComponent extends StatefulWidget { class TopNavBarComponent extends StatefulWidget {
@ -23,6 +24,7 @@ class _TopNavBarComponentState extends State<TopNavBarComponent> with TickerProv
void actionSurBouton() { void actionSurBouton() {
widget.callback(choice); widget.callback(choice);
MyApp.postViewModel.getBestPosts();
} }
@override @override

@ -1,9 +1,11 @@
import 'package:tuple/tuple.dart';
class Post { class Post {
final int _id; final String _id;
final int _idUser; final String _idUser;
String? _description; String? _description;
String _idMusic; String _idMusic;
String _location; Tuple2<String,String> _location;
int _nblikes; int _nblikes;
String? _selfie; String? _selfie;
DateTime _date; DateTime _date;
@ -13,9 +15,9 @@ class Post {
this._nblikes, this._selfie, this._date); this._nblikes, this._selfie, this._date);
//Getters and setters //Getters and setters
int get id => _id; String get id => _id;
int get idUser => _idUser; String get idUser => _idUser;
String? get description => _description; String? get description => _description;
@ -29,9 +31,9 @@ class Post {
_idMusic = value; _idMusic = value;
} }
String get location => _location; Tuple2<String, String> get location => _location;
set location(String value) { set location(Tuple2<String, String> value) {
_location = value; _location = value;
} }

@ -1,15 +1,19 @@
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:tuple/tuple.dart';
import '../Post.dart'; import '../Post.dart';
class PostMapper { class PostMapper {
static Map<String, dynamic> toFirebase(Post post) { static Post toModel(DocumentSnapshot<Map<String, dynamic>> snapshot) {
return { final data = snapshot.data();
"user_id": post.idUser, return Post(
"description": post.description ?? "", snapshot.id,
"date": post.date, data?["user_id"],
"place": post.location ?? "", data?["description"],
"selfie": post.selfie ?? "", data?["song_id"],
"song_id": post.idMusic, Tuple2(data?["place"][0], data?["place"][1]),
"likes": post.nblikes data?["likes"],
}; data?["selfie"],
data?["date"].toDate());
} }
} }

@ -8,6 +8,8 @@ import 'package:google_fonts/google_fonts.dart';
import '../components/comment_component.dart'; import '../components/comment_component.dart';
import '../components/post_component.dart'; import '../components/post_component.dart';
import '../components/top_nav_bar_component.dart'; import '../components/top_nav_bar_component.dart';
import '../main.dart';
import '../model/Post.dart';
import '../values/constants.dart'; import '../values/constants.dart';
class FeedScreen extends StatefulWidget { class FeedScreen extends StatefulWidget {
@ -20,27 +22,15 @@ class FeedScreen extends StatefulWidget {
class _FeedScreenState extends State<FeedScreen> with TickerProviderStateMixin { class _FeedScreenState extends State<FeedScreen> with TickerProviderStateMixin {
late AnimationController animationController; late AnimationController animationController;
late Animation<double> animation; late Animation<double> animation;
late List<PostComponent> friendFeed; late List<Post> friendFeed;
late List<PostComponent> discoveryFeed; late List<Post> discoveryFeed;
late List<PostComponent> displayFeed; late List<Post> displayFeed;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
friendFeed = [ friendFeed = [];
PostComponent( discoveryFeed = MyApp.postViewModel.bestPosts;
callback: openDetailPost,
),
PostComponent(
callback: openDetailPost,
),
PostComponent(
callback: openDetailPost,
),
];
discoveryFeed = [
PostComponent(callback: openDetailPost),
];
displayFeed = friendFeed; displayFeed = friendFeed;
animationController = AnimationController( animationController = AnimationController(
vsync: this, vsync: this,
@ -161,7 +151,10 @@ class _FeedScreenState extends State<FeedScreen> with TickerProviderStateMixin {
), ),
Padding( Padding(
padding: EdgeInsets.only( padding: EdgeInsets.only(
bottom: MediaQuery.of(context).viewInsets.bottom), bottom: MediaQuery
.of(context)
.viewInsets
.bottom),
child: Container( child: Container(
height: 70, height: 70,
width: double.infinity, width: double.infinity,
@ -263,9 +256,12 @@ class _FeedScreenState extends State<FeedScreen> with TickerProviderStateMixin {
child: Padding( child: Padding(
padding: EdgeInsets.only(top: 100.h), padding: EdgeInsets.only(top: 100.h),
child: SingleChildScrollView( child: SingleChildScrollView(
child: Wrap( child: ListView.builder(
runSpacing: 60, itemBuilder: (BuildContext context,
children: displayFeed, int index) {
return PostComponent(callback: openDetailPost,);
},
), ),
)), )),
), ),

@ -19,7 +19,8 @@ class AuthService {
"unique_id": uniqueId, "unique_id": uniqueId,
"picture": "picture":
"https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/defaultImage.png?alt=media&token=cff5ae0a-e29e-4845-91f7-817597962f6b", "https://firebasestorage.googleapis.com/v0/b/justmusic-435d5.appspot.com/o/defaultImage.png?alt=media&token=cff5ae0a-e29e-4845-91f7-817597962f6b",
"friends": [] "friends": [],
"comments": []
}; };
MyApp.db MyApp.db

@ -1,5 +1,7 @@
import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
import 'package:firebase_storage/firebase_storage.dart'; import 'package:firebase_storage/firebase_storage.dart';
@ -30,4 +32,14 @@ class PostService {
deletePost() {} deletePost() {}
getPostsById(String id) {} getPostsById(String id) {}
Future<List<QueryDocumentSnapshot<Map<String, dynamic>>>> getPopularPosts(
{int limit = 10, int offset = 0}) async {
QuerySnapshot<Map<String, dynamic>> response = await FirebaseFirestore.instance
.collection("posts")
.limit(limit)
.orderBy("likes").get();
return response.docs;
}
} }

@ -4,6 +4,8 @@ import 'package:justmusic/model/Post.dart';
import 'package:justmusic/services/PostService.dart'; import 'package:justmusic/services/PostService.dart';
import 'package:tuple/tuple.dart'; import 'package:tuple/tuple.dart';
import '../model/mapper/PostMapper.dart';
class PostViewModel { class PostViewModel {
List<Post> _postsFriends = []; List<Post> _postsFriends = [];
List<Post> _bestPosts = []; List<Post> _bestPosts = [];
@ -31,8 +33,15 @@ class PostViewModel {
throw new Error(); throw new Error();
} }
List<Post> getBestPosts() { getBestPosts() async {
throw new Error(); try {
var responseData = await _postService.getPopularPosts();
_bestPosts =
responseData.map((value) => PostMapper.toModel(value)).toList();
} catch (e) {
print(e);
}
} }
List<Post> getMoreBestPosts() { List<Post> getMoreBestPosts() {

Loading…
Cancel
Save