From be58807e15628a6dba888ed84fffec8dca281b54 Mon Sep 17 00:00:00 2001 From: Crosbydev Date: Fri, 16 Feb 2024 17:52:22 +0700 Subject: [PATCH] fixing show live data after addreview --- .../bloc/restaurant/restaurant_bloc.dart | 4 + .../bloc/restaurant/restaurant_event.dart | 4 +- .../components/form_review_component.dart | 90 ++++++++++--------- .../screens/detail_restaurant_screen.dart | 8 ++ 4 files changed, 61 insertions(+), 45 deletions(-) diff --git a/lib/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart b/lib/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart index c35b6aa..df32dfb 100644 --- a/lib/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart +++ b/lib/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart @@ -102,7 +102,11 @@ class RestaurantBloc extends Bloc { dataReview: response, error: null, ); + emit(ReviewSuccessState(stateData)); + + // add(RestaurantShowDetailEvent(id: event.id)); + // emit(RestaurantDetailSuccessState(stateData)); }, ); } diff --git a/lib/src/restaurant/presentation/bloc/restaurant/restaurant_event.dart b/lib/src/restaurant/presentation/bloc/restaurant/restaurant_event.dart index 1a30255..c74389a 100644 --- a/lib/src/restaurant/presentation/bloc/restaurant/restaurant_event.dart +++ b/lib/src/restaurant/presentation/bloc/restaurant/restaurant_event.dart @@ -15,9 +15,9 @@ class RestaurantShowListEvent extends RestaurantEvent { } class RestaurantShowDetailEvent extends RestaurantEvent { - final String id; + final String? id; - const RestaurantShowDetailEvent({required this.id}); + const RestaurantShowDetailEvent({this.id}); @override List get props => [id]; diff --git a/lib/src/restaurant/presentation/components/form_review_component.dart b/lib/src/restaurant/presentation/components/form_review_component.dart index 519d77d..4e018b5 100644 --- a/lib/src/restaurant/presentation/components/form_review_component.dart +++ b/lib/src/restaurant/presentation/components/form_review_component.dart @@ -1,50 +1,48 @@ -import 'package:flutter_hooks/flutter_hooks.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter/material.dart'; +import 'package:gap/gap.dart'; +import 'package:get_it/get_it.dart'; import 'package:go_router/go_router.dart'; -import 'package:restaurant_app/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart'; + +import 'package:restaurant_app/resources/styles/typograph.dart'; +import 'package:restaurant_app/resources/widgets/common_button.dart'; import 'package:restaurant_app/resources/widgets/common_snackbar.dart'; import 'package:restaurant_app/resources/widgets/common_textformfield.dart'; -import 'package:restaurant_app/resources/widgets/common_button.dart'; -import 'package:restaurant_app/resources/styles/typograph.dart'; -import 'package:gap/gap.dart'; +import 'package:restaurant_app/src/restaurant/presentation/bloc/restaurant/restaurant_bloc.dart'; -class FormReviewComponent extends HookWidget { +class FormReviewComponent extends StatefulWidget { const FormReviewComponent({super.key, required this.id}); final String id; @override - Widget build(BuildContext context) { - final nameInput = useTextEditingController(); - final reviewInput = useTextEditingController(); - final formKey = useMemoized(() => GlobalKey()); + State createState() => _FormReviewComponentState(); +} - bool isSubmitDisabled = nameInput.text.isEmpty || reviewInput.text.isEmpty; +class _FormReviewComponentState extends State { + final TextEditingController nameInput = TextEditingController(); + final TextEditingController reviewInput = TextEditingController(); - useEffect(() { - final subscription = - context.read().stream.listen((state) { - if (state is ReviewSuccessState) { - CommonSnackbar.showSuccessSnackbar( - context: context, - title: 'Success', - message: 'Successfully adding review', - ); - context.pop(); // Kembali ke halaman sebelumnya - } - }); - // Membersihkan langganan saat komponen di-unmount - return subscription.cancel; - }, []); + final _formKey = GlobalKey(); + late RestaurantBloc bloc; + @override + void initState() { + bloc = RestaurantBloc( + detailUsecase: GetIt.instance(), + usecase: GetIt.instance(), + reviewUsecase: GetIt.instance(), + ); + super.initState(); + } + + @override + Widget build(BuildContext context) { return Container( - height: MediaQuery.of(context).size.height * 0.45, + height: MediaQuery.sizeOf(context).height * 0.45, width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 24, vertical: 20), child: Form( - key: formKey, - autovalidateMode: AutovalidateMode.onUserInteraction, + key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -52,31 +50,37 @@ class FormReviewComponent extends HookWidget { 'Add Your Review', style: StyleTypograph.heading3.bold, ), - const Gap(20), + Gap(20), CommonTextForm( controller: nameInput, obscured: false, hint: 'Your name', ), - const Gap(12), + Gap(12), CommonTextForm( controller: reviewInput, obscured: false, - hint: 'Message review', + hint: 'Add Review', ), Spacer(), Container( child: CommonButton.normalButton( - disabled: isSubmitDisabled, - onPressed: () { - if (formKey.currentState!.validate()) { - context.read().add( - AddReviewEvent( - id: id, - name: nameInput.text, - review: reviewInput.text, - ), - ); + onPressed: () async { + if (_formKey.currentState!.validate() == true) { + bloc.add( + AddReviewEvent( + id: widget.id, + name: nameInput.text, + review: reviewInput.text, + ), + ); + CommonSnackbar.showSuccessSnackbar( + context: context, + title: 'Success', + message: 'Successfully adding review', + ); + + context.pop(true); } }, text: 'Submit', diff --git a/lib/src/restaurant/presentation/screens/detail_restaurant_screen.dart b/lib/src/restaurant/presentation/screens/detail_restaurant_screen.dart index e96569b..03d64bb 100644 --- a/lib/src/restaurant/presentation/screens/detail_restaurant_screen.dart +++ b/lib/src/restaurant/presentation/screens/detail_restaurant_screen.dart @@ -40,6 +40,12 @@ class _DetailRestaurantScreenState extends State { return boxBookmark; } + void refreshData() { + setState(() { + bloc.add(RestaurantShowDetailEvent(id: widget.id!)); + }); + } + @override Widget build(BuildContext context) { return BlocConsumer( @@ -159,6 +165,8 @@ class _DetailRestaurantScreenState extends State { ), ); }, + ).then( + (value) => refreshData(), ); }, ),