diff --git a/frontend/ui/lib/widgets/place_block_widget.dart b/frontend/ui/lib/widgets/place_block_widget.dart index f8c58e52..0a49325e 100644 --- a/frontend/ui/lib/widgets/place_block_widget.dart +++ b/frontend/ui/lib/widgets/place_block_widget.dart @@ -2,26 +2,29 @@ import 'package:flutter/material.dart'; import 'package:tripmeout/model/place.dart'; import 'package:tripmeout/model/place_visit.dart'; import 'package:tripmeout/widgets/place_details_widget.dart'; -import 'package:tripmeout/widgets/user_status_widget.dart'; +import 'package:tripmeout/widgets/trip_view_user_status_widget.dart'; +import 'package:tripmeout/widgets/recommended_user_status_widget.dart'; import 'package:tripmeout/services/place_visit_service.dart'; class PlaceBlockWidget extends StatefulWidget { final PlaceVisit placeVisit; final PlaceVisitService placeVisitService; final PlaceWrapper details; + final bool showTripViewUserStatus; - PlaceBlockWidget(this.placeVisitService, this.placeVisit, this.details); + PlaceBlockWidget(this.placeVisitService, this.placeVisit, this.details, this.showTripViewUserStatus); @override State createState() => - _PlaceBlockWidgetState(placeVisit, placeVisitService, details); + _PlaceBlockWidgetState(placeVisit, placeVisitService, details, showTripViewUserStatus); } class _PlaceBlockWidgetState extends State { final PlaceVisit placeVisit; final PlaceVisitService placeVisitService; final PlaceWrapper details; - _PlaceBlockWidgetState(this.placeVisit, this.placeVisitService, this.details); + final bool showTripViewUserStatus; + _PlaceBlockWidgetState(this.placeVisit, this.placeVisitService, this.details, this.showTripViewUserStatus); @override Widget build(BuildContext context) { @@ -30,7 +33,7 @@ class _PlaceBlockWidgetState extends State { title: Text(placeVisit.name), trailing: Container( width: 100.0, - child: UserStatusWidget(placeVisitService, placeVisit), + child: showTripViewUserStatus ? UserStatusWidget(placeVisitService, placeVisit) : RecommendedUserStatusWidget(placeVisitService, placeVisit), ), children: [PlaceDetailsWidget(details)]); } diff --git a/frontend/ui/lib/widgets/recommended_user_status_widget.dart b/frontend/ui/lib/widgets/recommended_user_status_widget.dart new file mode 100644 index 00000000..86b9cd47 --- /dev/null +++ b/frontend/ui/lib/widgets/recommended_user_status_widget.dart @@ -0,0 +1,93 @@ +import 'package:flutter/material.dart'; +import 'package:tripmeout/model/place_visit.dart'; +import 'package:tripmeout/services/place_visit_service.dart'; +import 'package:tripmeout/widgets/alert_banner_widget.dart'; +import 'package:tripmeout/router/router.dart'; + +class RecommendedUserStatusWidget extends StatefulWidget { + PlaceVisitService placeVisitService; + PlaceVisit placeVisit; + + RecommendedUserStatusWidget(this.placeVisitService, this.placeVisit); + + @override + _RecommendedUserStatusState createState() => + _RecommendedUserStatusState(this.placeVisitService, this.placeVisit); +} + +class _RecommendedUserStatusState extends State { + + PlaceVisitService placeVisitService; + PlaceVisit placeVisit; + PlaceVisit _placeVisit; + + _RecommendedUserStatusState(this.placeVisitService, this.placeVisit) + : _placeVisit = placeVisit; + + bool _must_selected = false; + bool _maybe_selected = false; + Icon _must_icon = Icon(Icons.favorite_border); + Icon _maybe_icon = Icon(Icons.bookmark_border); + Color _must_color = Colors.black; + Color _maybe_color = Colors.black; + + @override + Widget build(BuildContext build) { + return Row( + children: [ + IconButton( + icon: _must_icon, + onPressed: () { + setState(() async { + if (_must_selected == true) { + _must_selected = false; + _must_icon = Icon(Icons.favorite_border); + _must_color = Colors.black; + placeVisitService.deletePlaceVisit(_placeVisit.tripid, _placeVisit.id); + } else { + _must_selected = true; + _must_icon = Icon(Icons.favorite); + _must_color = Colors.pink; + + _maybe_selected = false; + _maybe_icon = Icon(Icons.bookmark_border); + _maybe_color = Colors.black; + _placeVisit = + PlaceVisit.from(_placeVisit, userMark: UserMark.YES); + _placeVisit = await placeVisitService.updatePlaceVisitUserMark(_placeVisit); + } + }); + }, + color: _must_color, + tooltip: "Must Go", + ), + IconButton( + icon: _maybe_icon, + onPressed: () { + setState(() async { + if (_maybe_selected == true) { + _maybe_selected = false; + _maybe_icon = Icon(Icons.bookmark_border); + _maybe_color = Colors.black; + placeVisitService.deletePlaceVisit(_placeVisit.tripid, _placeVisit.id); + } else { + _maybe_selected = true; + _maybe_icon = Icon(Icons.bookmark); + _maybe_color = Colors.red; + + _must_selected = false; + _must_icon = Icon(Icons.favorite_border); + _must_color = Colors.black; + _placeVisit = + PlaceVisit.from(_placeVisit, userMark: UserMark.MAYBE); + _placeVisit = await placeVisitService.updatePlaceVisitUserMark(_placeVisit); + } + }); + }, + color: _maybe_color, + tooltip: "Save Place", + ), + ], + ); + } +} diff --git a/frontend/ui/lib/widgets/recommended_widget.dart b/frontend/ui/lib/widgets/recommended_widget.dart index e35b20ed..03c2bd9e 100644 --- a/frontend/ui/lib/widgets/recommended_widget.dart +++ b/frontend/ui/lib/widgets/recommended_widget.dart @@ -67,7 +67,7 @@ class RecommendedWidget extends StatelessWidget { List placeBlocks = []; for (int i = 0; i < placeWrappers.length; i++) { placeBlocks.add(PlaceBlockWidget( - placeVisitService, placeVisits[i], placeWrappers[i])); + placeVisitService, placeVisits[i], placeWrappers[i], false)); } return placeBlocks; diff --git a/frontend/ui/lib/widgets/user_status_widget.dart b/frontend/ui/lib/widgets/trip_view_user_status_widget.dart similarity index 100% rename from frontend/ui/lib/widgets/user_status_widget.dart rename to frontend/ui/lib/widgets/trip_view_user_status_widget.dart diff --git a/frontend/ui/lib/widgets/trip_view_widget.dart b/frontend/ui/lib/widgets/trip_view_widget.dart index f962f27e..b3faadaa 100644 --- a/frontend/ui/lib/widgets/trip_view_widget.dart +++ b/frontend/ui/lib/widgets/trip_view_widget.dart @@ -28,7 +28,7 @@ class TripViewWidgetFromService extends StatelessWidget { PlaceWrapper placeDetails = await placesApiServices.getPlaceDetails(placeVisit.placesApiPlaceId); placeBlockWidgets - .add(PlaceBlockWidget(placeVisitService, placeVisit, placeDetails)); + .add(PlaceBlockWidget(placeVisitService, placeVisit, placeDetails, true)); } return placeBlockWidgets; } diff --git a/frontend/ui/pubspec.lock b/frontend/ui/pubspec.lock index e31135be..f1d7cf33 100644 --- a/frontend/ui/pubspec.lock +++ b/frontend/ui/pubspec.lock @@ -7,7 +7,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.4.2" boolean_selector: dependency: transitive description: @@ -15,6 +15,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.0" + characters: + dependency: transitive + description: + name: characters + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" charcode: dependency: transitive description: @@ -35,7 +42,7 @@ packages: name: collection url: "https://pub.dartlang.org" source: hosted - version: "1.14.12" + version: "1.14.13" convert: dependency: transitive description: @@ -127,7 +134,7 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.6" + version: "0.12.8" meta: dependency: transitive description: @@ -195,7 +202,7 @@ packages: name: stack_trace url: "https://pub.dartlang.org" source: hosted - version: "1.9.3" + version: "1.9.5" stream_channel: dependency: transitive description: @@ -223,14 +230,14 @@ packages: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.2.16" + version: "0.2.17" typed_data: dependency: transitive description: name: typed_data url: "https://pub.dartlang.org" source: hosted - version: "1.1.6" + version: "1.2.0" url_launcher: dependency: "direct main" description: @@ -281,5 +288,5 @@ packages: source: hosted version: "2.0.8" sdks: - dart: ">=2.7.0 <3.0.0" + dart: ">=2.9.0-14.0.dev <3.0.0" flutter: ">=1.12.13+hotfix.6 <2.0.0"