Skip to content

Commit c35ca94

Browse files
committed
Added models
1 parent d168b92 commit c35ca94

File tree

3 files changed

+158
-0
lines changed

3 files changed

+158
-0
lines changed

dataconnect/lib/models/movie.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Movie {
2+
Movie({required this.id, required this.title, required this.imageUrl});
3+
String id;
4+
String title;
5+
String imageUrl;
6+
}

dataconnect/lib/movie_state.dart

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import 'package:dataconnect/movies_connector/movies.dart';
2+
import 'package:firebase_data_connect/firebase_data_connect.dart';
3+
4+
import 'models/movie.dart';
5+
6+
class MovieState {
7+
static void triggerUpdateFavorite() {
8+
MoviesConnector.instance.getCurrentUser().execute();
9+
}
10+
11+
static Future<QueryResult<ListMoviesData, ListMoviesVariables>>
12+
getTopTenMovies() {
13+
return MoviesConnector.instance
14+
.listMovies()
15+
.orderByRating(OrderDirection.DESC)
16+
.limit(10)
17+
.execute();
18+
}
19+
20+
static Future<QueryResult<ListMoviesData, ListMoviesVariables>>
21+
getLatestMovies() {
22+
return MoviesConnector.instance
23+
.listMovies()
24+
.orderByReleaseYear(OrderDirection.DESC)
25+
.execute();
26+
}
27+
28+
static Stream<QueryResult<GetMovieByIdData, GetMovieByIdVariables>>
29+
subscribeToMovieById(String id) {
30+
return MoviesConnector.instance.getMovieById(id: id).ref().subscribe();
31+
}
32+
33+
static void refreshMovieDetail(String id) {
34+
MoviesConnector.instance.getMovieById(id: id).execute();
35+
MoviesConnector.instance.getMovieInfoForUser(movieId: id).execute();
36+
}
37+
38+
static Stream<
39+
QueryResult<GetMovieInfoForUserData, GetMovieInfoForUserVariables>>
40+
subscribeToGetMovieInfo(String id) {
41+
return MoviesConnector.instance
42+
.getMovieInfoForUser(movieId: id)
43+
.ref()
44+
.subscribe();
45+
}
46+
47+
static Future<QueryResult<GetActorByIdData, GetActorByIdVariables>>
48+
getActorById(String actorId) {
49+
return MoviesConnector.instance.getActorById(id: actorId).execute();
50+
}
51+
52+
static List<Movie> convertMainActorDetail(
53+
List<GetActorByIdActorMainActors> actors) {
54+
return actors
55+
.map(
56+
(e) => Movie(imageUrl: e.imageUrl, id: e.id, title: e.title),
57+
)
58+
.toList();
59+
}
60+
61+
static List<Movie> convertSupportingActorDetail(
62+
List<GetActorByIdActorSupportingActors> actors) {
63+
return actors
64+
.map(
65+
(e) => Movie(imageUrl: e.imageUrl, id: e.id, title: e.title),
66+
)
67+
.toList();
68+
}
69+
70+
static Stream<QueryResult<GetCurrentUserData, void>>
71+
subscribeToCurrentUser() {
72+
return MoviesConnector.instance.getCurrentUser().ref().subscribe();
73+
}
74+
75+
static Future<void> toggleFavorite(String id, bool favorited) async {
76+
if (favorited) {
77+
await MoviesConnector.instance
78+
.deleteFavoritedMovie(movieId: id)
79+
.execute();
80+
} else {
81+
await MoviesConnector.instance.addFavoritedMovie(movieId: id).execute();
82+
}
83+
triggerUpdateFavorite();
84+
}
85+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:intl/intl.dart';
3+
4+
class Review {
5+
Review(
6+
{required this.reviewText,
7+
required this.rating,
8+
required this.username,
9+
required this.date});
10+
String reviewText;
11+
int rating;
12+
String username;
13+
DateTime date;
14+
}
15+
16+
class ListReviews extends StatefulWidget {
17+
const ListReviews({super.key, required this.reviews, required this.title});
18+
final List<Review> reviews;
19+
final String title;
20+
@override
21+
State<ListReviews> createState() => _ListReviewsState();
22+
}
23+
24+
class _ListReviewsState extends State<ListReviews> {
25+
Widget _buildRatingList() {
26+
List<Review> reviews = widget.reviews;
27+
return SizedBox(
28+
height: 125,
29+
child: ListView.builder(
30+
scrollDirection: Axis.horizontal,
31+
itemBuilder: (context, index) {
32+
var rating = reviews[index];
33+
return Card(
34+
child: Padding(
35+
padding: const EdgeInsets.all(20.0),
36+
child: Column(
37+
mainAxisAlignment: MainAxisAlignment.start,
38+
crossAxisAlignment: CrossAxisAlignment.start,
39+
children: [
40+
Text(rating.username),
41+
Row(
42+
children: [
43+
Text(DateFormat.yMMMd().format(rating.date)),
44+
const SizedBox(
45+
width: 10,
46+
),
47+
Text("Rating ${rating.rating}")
48+
],
49+
),
50+
Text(rating.reviewText!)
51+
],
52+
)),
53+
);
54+
},
55+
itemCount: reviews.length,
56+
));
57+
58+
// return Expanded(child: Text('abc'));
59+
}
60+
61+
@override
62+
Widget build(BuildContext context) {
63+
return Column(
64+
children: [Text(widget.title), _buildRatingList()],
65+
);
66+
}
67+
}

0 commit comments

Comments
 (0)