Skip to content

Commit de306db

Browse files
committed
feat: integrates Feedback API
1 parent 4d549c9 commit de306db

File tree

7 files changed

+67
-21
lines changed

7 files changed

+67
-21
lines changed

lib/domain/models/feedback/appetizer_feedback.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@ part 'appetizer_feedback.g.dart';
55
@JsonSerializable(fieldRename: FieldRename.snake)
66
class AppetizerFeedback {
77
int id;
8-
String type;
98
String title;
109
String message;
1110
int timestamp;
1211
dynamic mealId;
1312
dynamic imageUrl;
1413
int dateIssue;
1514
dynamic response;
15+
List<Map<String, dynamic>> ratings;
1616

1717
AppetizerFeedback({
1818
required this.id,
19-
required this.type,
2019
required this.title,
2120
required this.message,
2221
required this.timestamp,
2322
required this.mealId,
2423
required this.imageUrl,
2524
required this.dateIssue,
2625
required this.response,
26+
required this.ratings,
2727
});
2828

2929
factory AppetizerFeedback.fromJson(Map<String, dynamic> json) =>

lib/domain/repositories/feedback_repository.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,12 @@ class FeedbackRepository {
3030

3131
Future<AppetizerFeedback> newFeedback(AppetizerFeedback feedback) async {
3232
Map<String, dynamic> map = {
33-
'type': feedback.type,
3433
'title': feedback.title,
3534
'message': feedback.message,
3635
'date_issue': feedback.dateIssue,
36+
'meal_id': feedback.mealId,
37+
'ratings': feedback.ratings,
38+
'image_url': feedback.imageUrl,
3739
};
3840
try {
3941
return await _apiService.newFeedback(map);

lib/presentation/feedback/bloc/feedback_page_bloc.dart

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:appetizer/domain/models/feedback/appetizer_feedback.dart';
12
import 'package:appetizer/domain/repositories/feedback_repository.dart';
23
import 'package:bloc/bloc.dart';
34
import 'package:equatable/equatable.dart';
@@ -10,26 +11,57 @@ class FeedbackPageBloc extends Bloc<FeedbackPageEvent, FeedbackPageState> {
1011
FeedbackPageBloc({
1112
required this.repo,
1213
}) : super(
13-
const FeedbackPageState.initial(),
14+
FeedbackPageState.initial(),
1415
) {
1516
on<FeedbackPageSubmitEvent>(_onSubmit);
1617
on<FeedbackPageDescriptionChangedEvent>(_onDescriptionChange);
1718
}
1819

1920
void _onSubmit(
20-
FeedbackPageSubmitEvent event, Emitter<FeedbackPageState> emit) {
21-
// TODO: implement repository call
22-
bool submissionSuccessful = true;
23-
if (submissionSuccessful) {
21+
FeedbackPageSubmitEvent event, Emitter<FeedbackPageState> emit) async {
22+
try {
23+
List<Map<String, dynamic>> ratings = [
24+
{"type": "am", "stars": event.rating[0]},
25+
{"type": "hc", "stars": event.rating[1]},
26+
{"type": "wm", "stars": event.rating[2]},
27+
{"type": "ws", "stars": event.rating[3]},
28+
{"type": "dn", "stars": event.rating[4]}
29+
];
30+
AppetizerFeedback feedback = AppetizerFeedback(
31+
id: 0,
32+
title: 'Feedback',
33+
message: event.description,
34+
timestamp: DateTime.now().millisecondsSinceEpoch,
35+
mealId: event.mealId,
36+
imageUrl: null,
37+
dateIssue: DateTime.now().millisecondsSinceEpoch,
38+
response: null,
39+
ratings: ratings,
40+
);
41+
await repo.newFeedback(feedback);
2442
emit(
2543
FeedbackPageState(
2644
rating: event.rating,
2745
description: event.description,
2846
submitted: true,
2947
error: false,
48+
mealId: event.mealId,
49+
),
50+
);
51+
} catch (e) {
52+
emit(
53+
FeedbackPageState(
54+
rating: event.rating,
55+
description: event.description,
56+
submitted: false,
57+
error: true,
58+
mealId: event.mealId,
3059
),
3160
);
3261
}
62+
63+
// bool submissionSuccessful = true;
64+
// if (submissionSuccessful) {}
3365
// else {
3466
// emit(
3567
// FeedbackPageState(
@@ -51,6 +83,7 @@ class FeedbackPageBloc extends Bloc<FeedbackPageEvent, FeedbackPageState> {
5183
description: event.description,
5284
submitted: state.submitted,
5385
error: state.error,
86+
mealId: state.mealId,
5487
),
5588
);
5689
}

lib/presentation/feedback/bloc/feedback_page_event.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ class FeedbackPageSubmitEvent extends FeedbackPageEvent {
1111
const FeedbackPageSubmitEvent({
1212
required this.rating,
1313
required this.description,
14+
required this.mealId,
1415
});
1516
final List<int> rating;
1617
final String description;
18+
final int mealId;
1719

1820
@override
19-
List<Object> get props => [rating, description];
21+
List<Object> get props => [rating, description, mealId];
2022
}
2123

2224
class FeedbackPageDescriptionChangedEvent extends FeedbackPageEvent {
Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
part of 'feedback_page_bloc.dart';
22

3+
// ignore: must_be_immutable
34
class FeedbackPageState extends Equatable {
4-
const FeedbackPageState({
5+
FeedbackPageState({
56
required this.rating,
67
required this.description,
8+
required this.mealId,
79
required this.submitted,
810
required this.error,
911
});
1012

11-
const FeedbackPageState.initial()
12-
: rating = const [0, 0, 0, 0, 0],
13+
FeedbackPageState.initial()
14+
: rating = [0, 0, 0, 0, 0],
1315
description = '',
16+
mealId = 0,
1417
submitted = false,
1518
error = false;
1619

17-
final List<int> rating;
20+
List<int> rating;
1821
final String description;
22+
final int mealId;
1923
final bool submitted;
2024
final bool error;
2125

2226
@override
23-
List<Object> get props => [rating, description, error];
27+
List<Object> get props => [rating, description, mealId, error];
2428
}

lib/presentation/feedback/feedback_view.dart

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ import 'package:flutter_bloc/flutter_bloc.dart';
1212

1313
@RoutePage()
1414
class FeedbackScreen extends StatelessWidget {
15-
FeedbackScreen({super.key});
15+
FeedbackScreen({required this.mealId, super.key});
1616
final TextEditingController textController = TextEditingController();
17+
final int mealId;
1718
static const List<String> feedbackHeadings = [
1819
"Ambience",
1920
"Hygiene and Cleanliness",
@@ -100,11 +101,15 @@ class FeedbackScreen extends StatelessWidget {
100101
Align(
101102
alignment: Alignment.bottomRight,
102103
child: BlackIconButton(
103-
onTap: context.router.pop,
104-
// onTap: () => context.read<FeedbackPageBloc>().add(
105-
// FeedbackPageSubmitEvent(
106-
// rating: state.rating,
107-
// description: state.description)),
104+
// onTap: context.router.pop,
105+
onTap: () {
106+
context.read<FeedbackPageBloc>().add(
107+
FeedbackPageSubmitEvent(
108+
mealId: mealId,
109+
rating: state.rating,
110+
description: state.description));
111+
context.router.pop();
112+
},
108113
title: "SUBMIT",
109114
width: 102.toAutoScaledWidth,
110115
icon: Icons.keyboard_double_arrow_right_sharp,

lib/presentation/week_menu/components/DayMenu/menu_card.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class FeedbackOrCouponButton extends StatelessWidget {
128128
if (meal.isOutdated) {
129129
return GestureDetector(
130130
onTap: () {
131-
context.router.navigate(FeedbackRoute());
131+
context.router.navigate(FeedbackRoute(mealId: meal.id));
132132
},
133133
child: const FeedbackAndCouponWidget(taken: false, coupon: false),
134134
);

0 commit comments

Comments
 (0)