From 5d49c619b97fcff9be874c80ccad5a054a1ba0e4 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 08:47:48 +0900 Subject: [PATCH 01/49] :art: add assets of switching appearance mode --- images/switching_appearance_mode.svg | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 images/switching_appearance_mode.svg diff --git a/images/switching_appearance_mode.svg b/images/switching_appearance_mode.svg new file mode 100644 index 0000000000..ff07dafcfb --- /dev/null +++ b/images/switching_appearance_mode.svg @@ -0,0 +1,3 @@ + + + From 6fbdd05cc448aa685b5c9abca40766eac4595a2f Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:08:03 +0900 Subject: [PATCH 02/49] :art: put appearance UI --- .../components/record_page_pill_option.dart | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart b/lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart index 6317441ed0..8495c78b20 100644 --- a/lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart +++ b/lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart @@ -1,4 +1,7 @@ import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:pilll/components/atoms/font.dart'; +import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/organisms/pill_sheet/pill_sheet_view_layout.dart'; import 'package:pilll/domain/record/components/rest_duration/manual_rest_duration_button.dart'; import 'package:pilll/domain/record/record_page_store.dart'; @@ -24,6 +27,18 @@ class RecordPagePillOption extends StatelessWidget { return Container( width: PillSheetViewLayout.width, child: Row(children: [ + Row(children: [ + SvgPicture.asset("images/switching_appearance_mode.svg"), + Text( + "表示モード", + style: TextStyle( + color: TextColor.main, + fontSize: 12, + fontFamily: FontFamily.japanese, + fontWeight: FontWeight.w700, + ), + ), + ]), Spacer(), if (!pillSheetGroup.hasPillSheetRestDuration) ManualRestDurationButton( From 2c62d3da61cbb582dbd41b7198b1c44590da4800 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:09:58 +0900 Subject: [PATCH 03/49] :recyle: move to components support --- .../components => supports}/record_page_pill_option.dart | 0 lib/domain/record/record_page.dart | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename lib/domain/record/components/{pill_sheet/components => supports}/record_page_pill_option.dart (100%) diff --git a/lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart b/lib/domain/record/components/supports/record_page_pill_option.dart similarity index 100% rename from lib/domain/record/components/pill_sheet/components/record_page_pill_option.dart rename to lib/domain/record/components/supports/record_page_pill_option.dart diff --git a/lib/domain/record/record_page.dart b/lib/domain/record/record_page.dart index a6dfa34d21..e173611b6c 100644 --- a/lib/domain/record/record_page.dart +++ b/lib/domain/record/record_page.dart @@ -4,7 +4,7 @@ import 'package:pilll/domain/premium_trial/premium_trial_complete_modal.dart'; import 'package:pilll/domain/record/components/adding/record_page_adding_pill_sheet.dart'; import 'package:pilll/domain/record/components/button/record_page_button.dart'; import 'package:pilll/domain/record/components/notification_bar/notification_bar.dart'; -import 'package:pilll/domain/record/components/pill_sheet/components/record_page_pill_option.dart'; +import 'package:pilll/domain/record/components/supports/record_page_pill_option.dart'; import 'package:pilll/domain/record/components/pill_sheet/record_page_pill_sheet_list.dart'; import 'package:pilll/domain/record/record_page_state.dart'; import 'package:pilll/domain/record/record_page_store.dart'; From 2709502807c30f7e6419f5aede187ab51f9144e5 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:11:29 +0900 Subject: [PATCH 04/49] :recycle: move to components/supports/components/rest_duration --- .../rest_duration/invalid_already_taken_pill_dialog.dart | 0 .../invalid_insufficient_rest_duration_dialog.dart | 0 .../rest_duration/manual_rest_duration_button.dart | 4 ++-- .../record/components/supports/record_page_pill_option.dart | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename lib/domain/record/components/{ => supports/components}/rest_duration/invalid_already_taken_pill_dialog.dart (100%) rename lib/domain/record/components/{ => supports/components}/rest_duration/invalid_insufficient_rest_duration_dialog.dart (100%) rename lib/domain/record/components/{ => supports/components}/rest_duration/manual_rest_duration_button.dart (91%) diff --git a/lib/domain/record/components/rest_duration/invalid_already_taken_pill_dialog.dart b/lib/domain/record/components/supports/components/rest_duration/invalid_already_taken_pill_dialog.dart similarity index 100% rename from lib/domain/record/components/rest_duration/invalid_already_taken_pill_dialog.dart rename to lib/domain/record/components/supports/components/rest_duration/invalid_already_taken_pill_dialog.dart diff --git a/lib/domain/record/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart b/lib/domain/record/components/supports/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart similarity index 100% rename from lib/domain/record/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart rename to lib/domain/record/components/supports/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart diff --git a/lib/domain/record/components/rest_duration/manual_rest_duration_button.dart b/lib/domain/record/components/supports/components/rest_duration/manual_rest_duration_button.dart similarity index 91% rename from lib/domain/record/components/rest_duration/manual_rest_duration_button.dart rename to lib/domain/record/components/supports/components/rest_duration/manual_rest_duration_button.dart index c2a91aa93e..ba209a574b 100644 --- a/lib/domain/record/components/rest_duration/manual_rest_duration_button.dart +++ b/lib/domain/record/components/supports/components/rest_duration/manual_rest_duration_button.dart @@ -2,8 +2,8 @@ import 'package:flutter/material.dart'; import 'package:pilll/analytics.dart'; import 'package:pilll/components/atoms/buttons.dart'; import 'package:pilll/domain/record/components/pill_sheet/components/record_page_rest_duration_dialog.dart'; -import 'package:pilll/domain/record/components/rest_duration/invalid_already_taken_pill_dialog.dart'; -import 'package:pilll/domain/record/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart'; +import 'package:pilll/domain/record/components/supports/components/rest_duration/invalid_already_taken_pill_dialog.dart'; +import 'package:pilll/domain/record/components/supports/components/rest_duration/invalid_insufficient_rest_duration_dialog.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/pill_sheet.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; diff --git a/lib/domain/record/components/supports/record_page_pill_option.dart b/lib/domain/record/components/supports/record_page_pill_option.dart index 8495c78b20..21d26db5e4 100644 --- a/lib/domain/record/components/supports/record_page_pill_option.dart +++ b/lib/domain/record/components/supports/record_page_pill_option.dart @@ -3,7 +3,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/organisms/pill_sheet/pill_sheet_view_layout.dart'; -import 'package:pilll/domain/record/components/rest_duration/manual_rest_duration_button.dart'; +import 'package:pilll/domain/record/components/supports/components/rest_duration/manual_rest_duration_button.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/pill_sheet.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; From 12f7058f0e2856fdb825c2f685bd928047beeee4 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:12:15 +0900 Subject: [PATCH 05/49] :recycle: Rename to RecordPagePillSheetSupportActions --- ...ption.dart => record_page_pill_sheet_support_actions.dart} | 4 ++-- lib/domain/record/record_page.dart | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename lib/domain/record/components/supports/{record_page_pill_option.dart => record_page_pill_sheet_support_actions.dart} (93%) diff --git a/lib/domain/record/components/supports/record_page_pill_option.dart b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart similarity index 93% rename from lib/domain/record/components/supports/record_page_pill_option.dart rename to lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart index 21d26db5e4..ad5522d4cc 100644 --- a/lib/domain/record/components/supports/record_page_pill_option.dart +++ b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart @@ -8,12 +8,12 @@ import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/pill_sheet.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; -class RecordPagePillOption extends StatelessWidget { +class RecordPagePillSheetSupportActions extends StatelessWidget { final RecordPageStore store; final PillSheetGroup pillSheetGroup; final PillSheet activedPillSheet; - const RecordPagePillOption({ + const RecordPagePillSheetSupportActions({ Key? key, required this.store, required this.pillSheetGroup, diff --git a/lib/domain/record/record_page.dart b/lib/domain/record/record_page.dart index e173611b6c..72398aa8c3 100644 --- a/lib/domain/record/record_page.dart +++ b/lib/domain/record/record_page.dart @@ -4,7 +4,7 @@ import 'package:pilll/domain/premium_trial/premium_trial_complete_modal.dart'; import 'package:pilll/domain/record/components/adding/record_page_adding_pill_sheet.dart'; import 'package:pilll/domain/record/components/button/record_page_button.dart'; import 'package:pilll/domain/record/components/notification_bar/notification_bar.dart'; -import 'package:pilll/domain/record/components/supports/record_page_pill_option.dart'; +import 'package:pilll/domain/record/components/supports/record_page_pill_sheet_support_actions.dart'; import 'package:pilll/domain/record/components/pill_sheet/record_page_pill_sheet_list.dart'; import 'package:pilll/domain/record/record_page_state.dart'; import 'package:pilll/domain/record/record_page_store.dart'; @@ -109,7 +109,7 @@ class RecordPage extends HookWidget { return Column( mainAxisAlignment: MainAxisAlignment.start, children: [ - RecordPagePillOption( + RecordPagePillSheetSupportActions( store: store, pillSheetGroup: pillSheetGroup, activedPillSheet: activedPillSheet, From 814b4fd50484830ff7a165e04955275b346a17e9 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:13:33 +0900 Subject: [PATCH 06/49] :recycle: Extract to SwitchingAppearanceMode --- .../switching_appearance_mode.dart | 26 +++++++++++++++++++ ...ecord_page_pill_sheet_support_actions.dart | 17 ++---------- 2 files changed, 28 insertions(+), 15 deletions(-) create mode 100644 lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart diff --git a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart new file mode 100644 index 0000000000..507e478702 --- /dev/null +++ b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart @@ -0,0 +1,26 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:pilll/components/atoms/font.dart'; +import 'package:pilll/components/atoms/text_color.dart'; + +class SwitchingAppearanceMode extends StatelessWidget { + const SwitchingAppearanceMode({ + Key? key, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Row(children: [ + SvgPicture.asset("images/switching_appearance_mode.svg"), + Text( + "表示モード", + style: TextStyle( + color: TextColor.main, + fontSize: 12, + fontFamily: FontFamily.japanese, + fontWeight: FontWeight.w700, + ), + ), + ]); + } +} diff --git a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart index ad5522d4cc..45d9551768 100644 --- a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart +++ b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart @@ -1,8 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; -import 'package:pilll/components/atoms/font.dart'; -import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/organisms/pill_sheet/pill_sheet_view_layout.dart'; +import 'package:pilll/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart'; import 'package:pilll/domain/record/components/supports/components/rest_duration/manual_rest_duration_button.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/pill_sheet.dart'; @@ -27,18 +25,7 @@ class RecordPagePillSheetSupportActions extends StatelessWidget { return Container( width: PillSheetViewLayout.width, child: Row(children: [ - Row(children: [ - SvgPicture.asset("images/switching_appearance_mode.svg"), - Text( - "表示モード", - style: TextStyle( - color: TextColor.main, - fontSize: 12, - fontFamily: FontFamily.japanese, - fontWeight: FontWeight.w700, - ), - ), - ]), + SwitchingAppearanceMode(), Spacer(), if (!pillSheetGroup.hasPillSheetRestDuration) ManualRestDurationButton( From 442029c9650f84dfdde0b1864c654b9d3d44387c Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:18:22 +0900 Subject: [PATCH 07/49] :sparkles: add switching appearance mode to store --- .../switching_appearance_mode.dart | 30 ++++++++++++------- ...ecord_page_pill_sheet_support_actions.dart | 2 +- lib/domain/record/record_page_store.dart | 11 +++++++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart index 507e478702..477ba769a7 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart @@ -2,25 +2,33 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; +import 'package:pilll/domain/record/record_page_store.dart'; class SwitchingAppearanceMode extends StatelessWidget { + final RecordPageStore store; const SwitchingAppearanceMode({ Key? key, + required this.store, }) : super(key: key); @override Widget build(BuildContext context) { - return Row(children: [ - SvgPicture.asset("images/switching_appearance_mode.svg"), - Text( - "表示モード", - style: TextStyle( - color: TextColor.main, - fontSize: 12, - fontFamily: FontFamily.japanese, - fontWeight: FontWeight.w700, + return GestureDetector( + child: Row(children: [ + SvgPicture.asset("images/switching_appearance_mode.svg"), + Text( + "表示モード", + style: TextStyle( + color: TextColor.main, + fontSize: 12, + fontFamily: FontFamily.japanese, + fontWeight: FontWeight.w700, + ), ), - ), - ]); + ]), + onTap: () { + // TODO: + }, + ); } } diff --git a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart index 45d9551768..4be2edbe0d 100644 --- a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart +++ b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart @@ -25,7 +25,7 @@ class RecordPagePillSheetSupportActions extends StatelessWidget { return Container( width: PillSheetViewLayout.width, child: Row(children: [ - SwitchingAppearanceMode(), + SwitchingAppearanceMode(store: store), Spacer(), if (!pillSheetGroup.hasPillSheetRestDuration) ManualRestDurationButton( diff --git a/lib/domain/record/record_page_store.dart b/lib/domain/record/record_page_store.dart index 61a6f45037..f7965948f8 100644 --- a/lib/domain/record/record_page_store.dart +++ b/lib/domain/record/record_page_store.dart @@ -471,4 +471,15 @@ class RecordPageStore extends StateNotifier { ); await batch.commit(); } + + switchingAppearanceMode(PillSheetAppearanceMode mode) { + final setting = state.setting; + if (setting == null) { + throw FormatException("setting entity not found"); + } + final updated = setting.copyWith(pillSheetAppearanceMode: mode); + return _settingService + .update(updated) + .then((value) => state = state.copyWith(setting: value)); + } } From 9f3c74c67e18b6a04aca1dcd6bf7d886d84acac9 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 09:23:01 +0900 Subject: [PATCH 08/49] :sparkels: add modal --- .../select_appearance_mode_modal.dart | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart new file mode 100644 index 0000000000..79c6e25ff2 --- /dev/null +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -0,0 +1,30 @@ +import 'package:flutter/material.dart'; +import 'package:pilll/domain/record/record_page_store.dart'; +import 'package:pilll/entity/setting.dart'; + +class SelectAppearanceModeModal extends StatelessWidget { + final RecordPageStore store; + final PillSheetAppearanceMode mode; + + const SelectAppearanceModeModal( + {Key? key, required this.store, required this.mode}) + : super(key: key); + + @override + Widget build(BuildContext context) { + // TODO: implement build + throw UnimplementedError(); + } +} + +void showSelectAppearanceModeModal( + BuildContext context, { + required RecordPageStore store, + required PillSheetAppearanceMode mode, +}) { + showModalBottomSheet( + context: context, + builder: (context) => SelectAppearanceModeModal(store: store, mode: mode), + backgroundColor: Colors.transparent, + ); +} From 9f0f8b2e08cf1239d67718552a8bde2ed4c732a2 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 15:42:32 +0900 Subject: [PATCH 09/49] :art: add circle images --- images/circle.fill.svg | 3 +++ images/circle.line.svg | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 images/circle.fill.svg create mode 100644 images/circle.line.svg diff --git a/images/circle.fill.svg b/images/circle.fill.svg new file mode 100644 index 0000000000..a105b91a4d --- /dev/null +++ b/images/circle.fill.svg @@ -0,0 +1,3 @@ + + + diff --git a/images/circle.line.svg b/images/circle.line.svg new file mode 100644 index 0000000000..70a47a4a93 --- /dev/null +++ b/images/circle.line.svg @@ -0,0 +1,3 @@ + + + From 5e7e671a3cfdba21a51582b79c21fd552b2f3242 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:01:49 +0900 Subject: [PATCH 10/49] :sparkles: add base component of select circle --- lib/components/molecules/select_circle.dart | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 lib/components/molecules/select_circle.dart diff --git a/lib/components/molecules/select_circle.dart b/lib/components/molecules/select_circle.dart new file mode 100644 index 0000000000..6c842d6244 --- /dev/null +++ b/lib/components/molecules/select_circle.dart @@ -0,0 +1,27 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +class SelectCircle extends StatelessWidget { + final bool isSelected; + + const SelectCircle({Key? key, required this.isSelected}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + SizedBox( + width: 20, + height: 20, + child: SvgPicture.asset("images/circle.line.svg")), + if (isSelected) + Positioned( + top: 5, + left: 5, + width: 10, + height: 10, + child: SvgPicture.asset("images/circle.fill.svg")), + ], + ); + } +} From 206ee12e9c94b015838ab1077d513e5903723175 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:02:24 +0900 Subject: [PATCH 11/49] :recycle: pass setting.pillSheetAppearanceMode --- .../appearance_mode/switching_appearance_mode.dart | 6 +++++- .../supports/record_page_pill_sheet_support_actions.dart | 6 +++++- lib/domain/record/record_page.dart | 1 + 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart index 477ba769a7..06b438eff6 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart @@ -2,13 +2,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; +import 'package:pilll/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart'; import 'package:pilll/domain/record/record_page_store.dart'; +import 'package:pilll/entity/setting.dart'; class SwitchingAppearanceMode extends StatelessWidget { final RecordPageStore store; + final PillSheetAppearanceMode mode; const SwitchingAppearanceMode({ Key? key, required this.store, + required this.mode, }) : super(key: key); @override @@ -27,7 +31,7 @@ class SwitchingAppearanceMode extends StatelessWidget { ), ]), onTap: () { - // TODO: + showSelectAppearanceModeModal(context, store: store, mode: mode); }, ); } diff --git a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart index 4be2edbe0d..178d53c17d 100644 --- a/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart +++ b/lib/domain/record/components/supports/record_page_pill_sheet_support_actions.dart @@ -5,17 +5,20 @@ import 'package:pilll/domain/record/components/supports/components/rest_duration import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/pill_sheet.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; +import 'package:pilll/entity/setting.dart'; class RecordPagePillSheetSupportActions extends StatelessWidget { final RecordPageStore store; final PillSheetGroup pillSheetGroup; final PillSheet activedPillSheet; + final Setting setting; const RecordPagePillSheetSupportActions({ Key? key, required this.store, required this.pillSheetGroup, required this.activedPillSheet, + required this.setting, }) : super(key: key); @override @@ -25,7 +28,8 @@ class RecordPagePillSheetSupportActions extends StatelessWidget { return Container( width: PillSheetViewLayout.width, child: Row(children: [ - SwitchingAppearanceMode(store: store), + SwitchingAppearanceMode( + store: store, mode: setting.pillSheetAppearanceMode), Spacer(), if (!pillSheetGroup.hasPillSheetRestDuration) ManualRestDurationButton( diff --git a/lib/domain/record/record_page.dart b/lib/domain/record/record_page.dart index 72398aa8c3..b5ce05a192 100644 --- a/lib/domain/record/record_page.dart +++ b/lib/domain/record/record_page.dart @@ -113,6 +113,7 @@ class RecordPage extends HookWidget { store: store, pillSheetGroup: pillSheetGroup, activedPillSheet: activedPillSheet, + setting: settingEntity, ), SizedBox(height: 16), RecordPagePillSheetList( From aa385187948c4696923743af25febc7db1449ec2 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:02:32 +0900 Subject: [PATCH 12/49] :sparkels: implement modal --- .../select_appearance_mode_modal.dart | 86 ++++++++++++++++++- 1 file changed, 84 insertions(+), 2 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 79c6e25ff2..741cbe393e 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -1,4 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:pilll/components/atoms/font.dart'; +import 'package:pilll/components/atoms/text_color.dart'; +import 'package:pilll/components/molecules/premium_badge.dart'; +import 'package:pilll/components/molecules/select_circle.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/setting.dart'; @@ -12,8 +16,86 @@ class SelectAppearanceModeModal extends StatelessWidget { @override Widget build(BuildContext context) { - // TODO: implement build - throw UnimplementedError(); + return SafeArea( + child: Container( + color: Colors.white, + padding: + const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "表示モード", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + fontFamily: FontFamily.japanese, + color: TextColor.main, + ), + ), + SizedBox(height: 24), + Column( + children: [ + Container( + height: 48, + child: Row( + children: [ + SelectCircle(isSelected: false), + SizedBox(width: 34), + Text( + "日付表示", + style: TextStyle( + color: TextColor.main, + fontWeight: FontWeight.w500, + fontSize: 14, + ), + ), + SizedBox(width: 12), + PremiumBadge(), + ], + ), + ), + Container( + height: 48, + child: Row( + children: [ + SelectCircle(isSelected: false), + SizedBox(width: 34), + Text( + "ピル番号", + style: TextStyle( + color: TextColor.main, + fontWeight: FontWeight.w500, + fontSize: 14, + ), + ), + ], + ), + ), + Container( + height: 48, + child: Row( + children: [ + SelectCircle(isSelected: false), + SizedBox(width: 34), + Text( + "服用日数", + style: TextStyle( + color: TextColor.main, + fontWeight: FontWeight.w500, + fontSize: 14, + ), + ), + ], + ), + ) + ], + ), + ], + ), + ), + ); } } From e99cf0b90f139a8f7e17982b92d32bdac8e93cda Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:03:09 +0900 Subject: [PATCH 13/49] :recycle: fix layout --- .../appearance_mode/select_appearance_mode_modal.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 741cbe393e..cd54d6d450 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -16,11 +16,11 @@ class SelectAppearanceModeModal extends StatelessWidget { @override Widget build(BuildContext context) { - return SafeArea( - child: Container( - color: Colors.white, - padding: - const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), + return Container( + color: Colors.white, + padding: + const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), + child: SafeArea( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, From df16afdda2e58b95fc993ce5ef768846337242d4 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:13:53 +0900 Subject: [PATCH 14/49] :recycle: fix row --- .../select_appearance_mode_modal.dart | 120 ++++++++++-------- 1 file changed, 66 insertions(+), 54 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index cd54d6d450..21ed1185f2 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -6,7 +6,7 @@ import 'package:pilll/components/molecules/select_circle.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/setting.dart'; -class SelectAppearanceModeModal extends StatelessWidget { +class SelectAppearanceModeModal extends StatefulWidget { final RecordPageStore store; final PillSheetAppearanceMode mode; @@ -14,12 +14,25 @@ class SelectAppearanceModeModal extends StatelessWidget { {Key? key, required this.store, required this.mode}) : super(key: key); + @override + _SelectAppearanceModeModalState createState() => + _SelectAppearanceModeModalState(); +} + +class _SelectAppearanceModeModalState extends State { + late PillSheetAppearanceMode mode; + + @override + void initState() { + mode = widget.mode; + super.initState(); + } + @override Widget build(BuildContext context) { return Container( color: Colors.white, - padding: - const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), + padding: const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), child: SafeArea( child: Column( mainAxisSize: MainAxisSize.min, @@ -37,59 +50,24 @@ class SelectAppearanceModeModal extends StatelessWidget { SizedBox(height: 24), Column( children: [ - Container( - height: 48, - child: Row( - children: [ - SelectCircle(isSelected: false), - SizedBox(width: 34), - Text( - "日付表示", - style: TextStyle( - color: TextColor.main, - fontWeight: FontWeight.w500, - fontSize: 14, - ), - ), - SizedBox(width: 12), - PremiumBadge(), - ], - ), + _row( + context, + mode: PillSheetAppearanceMode.date, + text: "日付表示", + showsPremiumBadge: true, + ), + _row( + context, + mode: PillSheetAppearanceMode.number, + text: "ピル番号", + showsPremiumBadge: false, ), - Container( - height: 48, - child: Row( - children: [ - SelectCircle(isSelected: false), - SizedBox(width: 34), - Text( - "ピル番号", - style: TextStyle( - color: TextColor.main, - fontWeight: FontWeight.w500, - fontSize: 14, - ), - ), - ], - ), + _row( + context, + mode: PillSheetAppearanceMode.number, + text: "服用日数", + showsPremiumBadge: false, ), - Container( - height: 48, - child: Row( - children: [ - SelectCircle(isSelected: false), - SizedBox(width: 34), - Text( - "服用日数", - style: TextStyle( - color: TextColor.main, - fontWeight: FontWeight.w500, - fontSize: 14, - ), - ), - ], - ), - ) ], ), ], @@ -97,6 +75,40 @@ class SelectAppearanceModeModal extends StatelessWidget { ), ); } + + Widget _row(BuildContext context, + {required PillSheetAppearanceMode mode, + required String text, + required bool showsPremiumBadge}) { + return GestureDetector( + onTap: () { + setState(() { + this.mode = mode; + }); + }, + child: Container( + height: 48, + child: Row( + children: [ + SelectCircle(isSelected: mode == this.mode), + SizedBox(width: 34), + Text( + text, + style: TextStyle( + color: TextColor.main, + fontWeight: FontWeight.w500, + fontSize: 14, + ), + ), + if (showsPremiumBadge) ...[ + SizedBox(width: 12), + PremiumBadge(), + ] + ], + ), + ), + ); + } } void showSelectAppearanceModeModal( From 762a6d8d8ecc6ec3a1bc41c50568faa69233e28f Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:15:08 +0900 Subject: [PATCH 15/49] :sparkels: add sequential case --- .../select_appearance_mode_modal.dart | 2 +- lib/entity/setting.dart | 13 ++----------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 21ed1185f2..6d96011557 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -64,7 +64,7 @@ class _SelectAppearanceModeModalState extends State { ), _row( context, - mode: PillSheetAppearanceMode.number, + mode: PillSheetAppearanceMode.sequential, text: "服用日数", showsPremiumBadge: false, ), diff --git a/lib/entity/setting.dart b/lib/entity/setting.dart index 224faea577..ff1ddfbca6 100644 --- a/lib/entity/setting.dart +++ b/lib/entity/setting.dart @@ -35,17 +35,8 @@ enum PillSheetAppearanceMode { number, @JsonValue("date") date, -} - -extension PillSheetAppearanceModeFunctions on PillSheetAppearanceMode { - String get itemName { - switch (this) { - case PillSheetAppearanceMode.number: - return "ピル番号"; - case PillSheetAppearanceMode.date: - return "日付"; - } - } + @JsonValue("sequential") + sequential, } abstract class SettingFirestoreFieldKeys { From 4fbc1af89f2836f095cf1001aed228c947012f41 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:17:46 +0900 Subject: [PATCH 16/49] :recycle: Replace to StatelessWidget --- .../select_appearance_mode_modal.dart | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 6d96011557..a1a3152909 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -6,7 +6,7 @@ import 'package:pilll/components/molecules/select_circle.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/setting.dart'; -class SelectAppearanceModeModal extends StatefulWidget { +class SelectAppearanceModeModal extends StatelessWidget { final RecordPageStore store; final PillSheetAppearanceMode mode; @@ -14,20 +14,6 @@ class SelectAppearanceModeModal extends StatefulWidget { {Key? key, required this.store, required this.mode}) : super(key: key); - @override - _SelectAppearanceModeModalState createState() => - _SelectAppearanceModeModalState(); -} - -class _SelectAppearanceModeModalState extends State { - late PillSheetAppearanceMode mode; - - @override - void initState() { - mode = widget.mode; - super.initState(); - } - @override Widget build(BuildContext context) { return Container( @@ -82,9 +68,7 @@ class _SelectAppearanceModeModalState extends State { required bool showsPremiumBadge}) { return GestureDetector( onTap: () { - setState(() { - this.mode = mode; - }); + store.switchingAppearanceMode(mode); }, child: Container( height: 48, From 153abdbe237f3f1c724dc3e82f6658be2d4aa8b0 Mon Sep 17 00:00:00 2001 From: bannzai Date: Sun, 7 Nov 2021 16:21:07 +0900 Subject: [PATCH 17/49] :sparkles: to hook widget --- .../select_appearance_mode_modal.dart | 45 +++++++++++-------- .../switching_appearance_mode.dart | 2 +- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index a1a3152909..1d993bb0ce 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:flutter_hooks/flutter_hooks.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/molecules/premium_badge.dart'; @@ -6,16 +8,15 @@ import 'package:pilll/components/molecules/select_circle.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/setting.dart'; -class SelectAppearanceModeModal extends StatelessWidget { - final RecordPageStore store; - final PillSheetAppearanceMode mode; - - const SelectAppearanceModeModal( - {Key? key, required this.store, required this.mode}) - : super(key: key); - +class SelectAppearanceModeModal extends HookWidget { @override Widget build(BuildContext context) { + final store = useProvider(recordPageStoreProvider); + final state = useProvider(recordPageStoreProvider.state); + final setting = state.setting; + if (setting == null) { + return Container(); + } return Container( color: Colors.white, padding: const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), @@ -38,18 +39,24 @@ class SelectAppearanceModeModal extends StatelessWidget { children: [ _row( context, + store: store, + setting: setting, mode: PillSheetAppearanceMode.date, text: "日付表示", showsPremiumBadge: true, ), _row( context, + store: store, + setting: setting, mode: PillSheetAppearanceMode.number, text: "ピル番号", showsPremiumBadge: false, ), _row( context, + store: store, + setting: setting, mode: PillSheetAppearanceMode.sequential, text: "服用日数", showsPremiumBadge: false, @@ -62,10 +69,14 @@ class SelectAppearanceModeModal extends StatelessWidget { ); } - Widget _row(BuildContext context, - {required PillSheetAppearanceMode mode, - required String text, - required bool showsPremiumBadge}) { + Widget _row( + BuildContext context, { + required RecordPageStore store, + required Setting setting, + required PillSheetAppearanceMode mode, + required String text, + required bool showsPremiumBadge, + }) { return GestureDetector( onTap: () { store.switchingAppearanceMode(mode); @@ -74,7 +85,7 @@ class SelectAppearanceModeModal extends StatelessWidget { height: 48, child: Row( children: [ - SelectCircle(isSelected: mode == this.mode), + SelectCircle(isSelected: mode == setting.pillSheetAppearanceMode), SizedBox(width: 34), Text( text, @@ -96,13 +107,11 @@ class SelectAppearanceModeModal extends StatelessWidget { } void showSelectAppearanceModeModal( - BuildContext context, { - required RecordPageStore store, - required PillSheetAppearanceMode mode, -}) { + BuildContext context, +) { showModalBottomSheet( context: context, - builder: (context) => SelectAppearanceModeModal(store: store, mode: mode), + builder: (context) => SelectAppearanceModeModal(), backgroundColor: Colors.transparent, ); } diff --git a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart index 06b438eff6..a980a70be0 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart @@ -31,7 +31,7 @@ class SwitchingAppearanceMode extends StatelessWidget { ), ]), onTap: () { - showSelectAppearanceModeModal(context, store: store, mode: mode); + showSelectAppearanceModeModal(context); }, ); } From 63d57f2ef6d2e2f6944e8c98cb5235ea509504f8 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 21:25:33 +0900 Subject: [PATCH 18/49] :recycle: to static method --- .../components/pill_sheet/record_page_pill_sheet.dart | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart index 1d16dfa10d..64a7df987b 100644 --- a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart +++ b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart @@ -79,9 +79,11 @@ class RecordPagePillSheet extends StatelessWidget { return Container( width: PillSheetViewLayout.componentWidth, child: PillMarkWithNumberLayout( - textOfPillNumber: _textOfPillNumber( + textOfPillNumber: textOfPillNumber( state: state, pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + setting: setting, pillNumberIntoPillSheet: pillNumberIntoPillSheet, pageIndex: pageIndex, ), @@ -119,11 +121,13 @@ class RecordPagePillSheet extends StatelessWidget { }); } - Widget _textOfPillNumber({ + static Widget textOfPillNumber({ required RecordPageState state, required PillSheetGroup pillSheetGroup, + required PillSheet pillSheet, required int pillNumberIntoPillSheet, required int pageIndex, + required Setting setting, }) { final DateTime date = calculatedDateOfAppearancePill(pillSheet, pillNumberIntoPillSheet); From 69e0364c1de37014978496b444842e6de8c049cc Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 21:40:29 +0900 Subject: [PATCH 19/49] :sparkles: add test case --- .../record_page_pill_sheet_test.dart | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index fe9054cf81..18a5e02239 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -1,5 +1,7 @@ import 'package:mockito/mockito.dart'; +import 'package:pilll/domain/record/components/pill_sheet/components/pill_number.dart'; import 'package:pilll/domain/record/components/pill_sheet/record_page_pill_sheet.dart'; +import 'package:pilll/domain/record/record_page_state.dart'; import 'package:pilll/entity/pill_sheet.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; import 'package:pilll/entity/pill_sheet_type.dart'; @@ -15,6 +17,56 @@ void main() { TestWidgetsFlutterBinding.ensureInitialized(); SharedPreferences.setMockInitialValues({}); }); + group("#RecordPagePillSheet.textOfPillNumber", () { + group("it is not premium or trial pattern", () { + final isPremium = false; + final isTrial = false; + test("pillSheetAppearanceMode is number", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: isPremium, isTrial: isTrial); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA()); + } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA()); + } else { + expect(widget, isA()); + } + } + }); + }); + }); group("#RecordPagePillSheet.calculatedDateOfAppearancePill", () { test("it is not have rest duration", () { final originalTodayRepository = todayRepository; From 4fe2ee37e1178b2fada43ff00b6135a6ab695942 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 21:48:05 +0900 Subject: [PATCH 20/49] :sparkles: add test case but failed --- .../record_page_pill_sheet_test.dart | 68 ++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 18a5e02239..e4c5a15d23 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -18,10 +18,9 @@ void main() { SharedPreferences.setMockInitialValues({}); }); group("#RecordPagePillSheet.textOfPillNumber", () { - group("it is not premium or trial pattern", () { - final isPremium = false; - final isTrial = false; - test("pillSheetAppearanceMode is number", () { + group("pillSheetAppearanceMode is number", () { + final pillSheetAppearanceMode = PillSheetAppearanceMode.number; + test("it is not isPremium and isTrial", () { final originalTodayRepository = todayRepository; final mockTodayRepository = MockTodayService(); final today = DateTime.parse("2020-09-01"); @@ -32,7 +31,7 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: isPremium, isTrial: isTrial); + final state = RecordPageState(isPremium: false, isTrial: false); final pillSheet = PillSheet( typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); final pillSheetGroup = PillSheetGroup( @@ -42,9 +41,62 @@ void main() { final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( - pillNumberForFromMenstruation: pillNumberForFromMenstruation, - durationMenstruation: durationMenstruation, - isOnReminder: true); + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA()); + } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA()); + } else { + expect(widget, isA()); + } + } + }); + }); + group("pillSheetAppearanceMode is date", () { + final pillSheetAppearanceMode = PillSheetAppearanceMode.date; + test( + "it is not isPremium and isTrial. it is means expired trial or premium user", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: false, isTrial: false); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; From 242e01c1e53be9cc62e977c3a9a315bce9b00e86 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 22:22:58 +0900 Subject: [PATCH 21/49] :sparkles: add test case --- .../record_page_pill_sheet_test.dart | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index e4c5a15d23..b55dbb3f5f 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -47,6 +47,54 @@ void main() { pillSheetAppearanceMode: pillSheetAppearanceMode, ); + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA()); + } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA()); + } else { + expect(widget, isA()); + } + } + }); + test( + "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: false, isTrial: false); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; final widget = RecordPagePillSheet.textOfPillNumber( @@ -118,6 +166,54 @@ void main() { } }); }); + test( + "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: false, isTrial: false); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA()); + } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA()); + } else { + expect(widget, isA()); + } + } + }); }); group("#RecordPagePillSheet.calculatedDateOfAppearancePill", () { test("it is not have rest duration", () { From 0da2214db7324b40edd49ec232b419876a280939 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 22:29:10 +0900 Subject: [PATCH 22/49] :sparkles: add test case --- .../record_page_pill_sheet_test.dart | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index b55dbb3f5f..f69b10ecd6 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -165,54 +165,54 @@ void main() { } } }); - }); - test( - "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", - () { - final originalTodayRepository = todayRepository; - final mockTodayRepository = MockTodayService(); - final today = DateTime.parse("2020-09-01"); - todayRepository = mockTodayRepository; - when(mockTodayRepository.now()).thenReturn(today); - when(mockTodayRepository.today()).thenReturn(today); - addTearDown(() { - todayRepository = originalTodayRepository; - }); + test( + "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); - final state = RecordPageState(isPremium: false, isTrial: false); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); - final pillNumberForFromMenstruation = 22; - final durationMenstruation = 4; - final setting = Setting( - pillNumberForFromMenstruation: pillNumberForFromMenstruation, - durationMenstruation: durationMenstruation, - isOnReminder: true, - pillSheetAppearanceMode: pillSheetAppearanceMode, - ); + final state = RecordPageState(isPremium: false, isTrial: false); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); - for (int i = 0; i < 28; i++) { - final pillNumberIntoPillSheet = i + 1; - final widget = RecordPagePillSheet.textOfPillNumber( - state: state, - pillSheetGroup: pillSheetGroup, - pillSheet: pillSheet, - pillNumberIntoPillSheet: pillNumberIntoPillSheet, - pageIndex: 0, - setting: setting); - - if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA()); - } else if (i < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA()); - } else { - expect(widget, isA()); + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA()); + } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA()); + } else { + expect(widget, isA()); + } } - } + }); }); }); group("#RecordPagePillSheet.calculatedDateOfAppearancePill", () { From 36b9285db2a5acd671f2288a52d52227a1969573 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:04:55 +0900 Subject: [PATCH 23/49] :memo: add reasons --- .../record_page_pill_sheet_test.dart | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index f69b10ecd6..d263147268 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -58,11 +58,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (i < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } }); @@ -106,11 +109,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (i < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } }); @@ -157,11 +163,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (i < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } }); @@ -205,11 +214,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (i < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA()); + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } }); From 6a755c674089633916f77e80512309e367aab24a Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:06:45 +0900 Subject: [PATCH 24/49] :recycle: missing condition --- .../components/record_page_pill_sheet_test.dart | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index d263147268..4af22d2bdc 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -60,7 +60,8 @@ void main() { if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { @@ -111,7 +112,8 @@ void main() { if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { @@ -165,7 +167,8 @@ void main() { if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { @@ -216,7 +219,8 @@ void main() { if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (i < pillNumberForFromMenstruation + durationMenstruation) { + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { From 2f4f270c3c726aafc409707c9cd17ab5c9ac639d Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:06:52 +0900 Subject: [PATCH 25/49] :sparkels: add test case --- .../record_page_pill_sheet_test.dart | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 4af22d2bdc..0e3787d7d9 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -20,6 +20,56 @@ void main() { group("#RecordPagePillSheet.textOfPillNumber", () { group("pillSheetAppearanceMode is number", () { final pillSheetAppearanceMode = PillSheetAppearanceMode.number; + test("it is isPremium or isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: true, isTrial: true); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); test("it is not isPremium and isTrial", () { final originalTodayRepository = todayRepository; final mockTodayRepository = MockTodayService(); From 698e1ed1e1e4c9d52865a5e83ddd05aa679ad5aa Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:09:13 +0900 Subject: [PATCH 26/49] :sparkles: add test case --- .../record_page_pill_sheet_test.dart | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 0e3787d7d9..425dfc62f8 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -175,6 +175,56 @@ void main() { }); group("pillSheetAppearanceMode is date", () { final pillSheetAppearanceMode = PillSheetAppearanceMode.date; + test("it is isPremium or isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final state = RecordPageState(isPremium: true, isTrial: true); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); test( "it is not isPremium and isTrial. it is means expired trial or premium user", () { From d919b02a30f34badfb3e31d0f4f236f945a82df9 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:09:17 +0900 Subject: [PATCH 27/49] :recycle: fix test case --- .../record/components/record_page_pill_sheet_test.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 425dfc62f8..de1d2411ef 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -278,7 +278,7 @@ void main() { } }); test( - "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + "isPremium == true && (setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0)", () { final originalTodayRepository = todayRepository; final mockTodayRepository = MockTodayService(); @@ -290,7 +290,7 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: false, isTrial: false); + final state = RecordPageState(isPremium: true, isTrial: false); final pillSheet = PillSheet( typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); final pillSheetGroup = PillSheetGroup( @@ -317,14 +317,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (pillNumberIntoPillSheet < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } From 68664999eff83e3e6fcee889d5f6074265fcfe23 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:33:24 +0900 Subject: [PATCH 28/49] :recycle: inject setting to state --- .../record_page_pill_sheet_test.dart | 109 +++++++++++------- 1 file changed, 66 insertions(+), 43 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index de1d2411ef..6263492ad9 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -31,13 +31,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: true, isTrial: true); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -46,7 +39,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); - + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; final widget = RecordPagePillSheet.textOfPillNumber( @@ -81,13 +84,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: false, isTrial: false); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -96,6 +92,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; @@ -133,13 +140,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: false, isTrial: false); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -148,6 +148,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; @@ -186,13 +197,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: true, isTrial: true); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -201,6 +205,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; @@ -238,13 +253,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: false, isTrial: false); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -253,6 +261,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; @@ -290,13 +309,6 @@ void main() { todayRepository = originalTodayRepository; }); - final state = RecordPageState(isPremium: true, isTrial: false); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); final pillNumberForFromMenstruation = 22; final durationMenstruation = 4; final setting = Setting( @@ -305,6 +317,17 @@ void main() { isOnReminder: true, pillSheetAppearanceMode: pillSheetAppearanceMode, ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); for (int i = 0; i < 28; i++) { final pillNumberIntoPillSheet = i + 1; From 0b17b7b345bc41b778febc03a28835b0c24da13e Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:36:29 +0900 Subject: [PATCH 29/49] :recycle: Rename to pillNumberIntoPillSheet --- .../pill_sheet/components/pill_number.dart | 14 ++++++++------ .../pill_sheet/record_page_pill_sheet.dart | 7 ++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/domain/record/components/pill_sheet/components/pill_number.dart b/lib/domain/record/components/pill_sheet/components/pill_number.dart index 49578a672f..e7026f95e0 100644 --- a/lib/domain/record/components/pill_sheet/components/pill_number.dart +++ b/lib/domain/record/components/pill_sheet/components/pill_number.dart @@ -4,13 +4,14 @@ import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/util/formatter/date_time_formatter.dart'; class PlainPillNumber extends StatelessWidget { - final int pillNumber; + final int pillNumberIntoPillSheet; - const PlainPillNumber({Key? key, required this.pillNumber}) : super(key: key); + const PlainPillNumber({Key? key, required this.pillNumberIntoPillSheet}) + : super(key: key); @override Widget build(BuildContext context) { return Text( - "$pillNumber", + "$pillNumberIntoPillSheet", style: FontType.smallTitle.merge(TextStyle(color: PilllColors.weekday)), textScaleFactor: 1, ); @@ -32,14 +33,15 @@ class PlainPillDate extends StatelessWidget { } class MenstruationPillNumber extends StatelessWidget { - final int pillNumber; + final int pillNumberIntoPillSheet; - const MenstruationPillNumber({Key? key, required this.pillNumber}) + const MenstruationPillNumber( + {Key? key, required this.pillNumberIntoPillSheet}) : super(key: key); @override Widget build(BuildContext context) { return Text( - "$pillNumber", + "$pillNumberIntoPillSheet", style: FontType.smallTitle.merge(TextStyle(color: PilllColors.primary)), textScaleFactor: 1, ); diff --git a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart index 64a7df987b..3dd20a45f0 100644 --- a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart +++ b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart @@ -146,7 +146,7 @@ class RecordPagePillSheet extends StatelessWidget { if (isDateMode) { return PlainPillDate(date: date); } else { - return PlainPillNumber(pillNumber: pillNumberIntoPillSheet); + return PlainPillNumber(pillNumberIntoPillSheet: pillNumberIntoPillSheet); } } @@ -166,9 +166,10 @@ class RecordPagePillSheet extends StatelessWidget { } } else { if (containedMenstruationDuration && (state.isPremium || state.isTrial)) { - return MenstruationPillNumber(pillNumber: pillNumberIntoPillSheet); + return MenstruationPillNumber( + pillNumberIntoPillSheet: pillNumberIntoPillSheet); } else { - return PlainPillNumber(pillNumber: pillNumberIntoPillSheet); + return PlainPillNumber(pillNumberIntoPillSheet: pillNumberIntoPillSheet); } } } From a0ac5e4ac02b733ffb9db3b7b75c5c8d67ad7174 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:37:27 +0900 Subject: [PATCH 30/49] :sparkles: add sequential pill number widgets --- .../pill_sheet/components/pill_number.dart | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/lib/domain/record/components/pill_sheet/components/pill_number.dart b/lib/domain/record/components/pill_sheet/components/pill_number.dart index e7026f95e0..747250ca69 100644 --- a/lib/domain/record/components/pill_sheet/components/pill_number.dart +++ b/lib/domain/record/components/pill_sheet/components/pill_number.dart @@ -18,6 +18,23 @@ class PlainPillNumber extends StatelessWidget { } } +class SequentialPillNumber extends StatelessWidget { + final int offset; + final int pillNumberIntoPillSheet; + + const SequentialPillNumber( + {Key? key, required this.offset, required this.pillNumberIntoPillSheet}) + : super(key: key); + @override + Widget build(BuildContext context) { + return Text( + "${offset + pillNumberIntoPillSheet}", + style: FontType.smallTitle.merge(TextStyle(color: PilllColors.weekday)), + textScaleFactor: 1, + ); + } +} + class PlainPillDate extends StatelessWidget { final DateTime date; @@ -48,6 +65,23 @@ class MenstruationPillNumber extends StatelessWidget { } } +class MenstruationSequentialPillNumber extends StatelessWidget { + final int offset; + final int pillNumberIntoPillSheet; + + const MenstruationSequentialPillNumber( + {Key? key, required this.offset, required this.pillNumberIntoPillSheet}) + : super(key: key); + @override + Widget build(BuildContext context) { + return Text( + "${offset + pillNumberIntoPillSheet}", + style: FontType.smallTitle.merge(TextStyle(color: PilllColors.primary)), + textScaleFactor: 1, + ); + } +} + class MenstruationPillDate extends StatelessWidget { final DateTime date; const MenstruationPillDate({Key? key, required this.date}) : super(key: key); From 393f4d82a57b44bbdab6eefc07f79a897f4ff315 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:46:25 +0900 Subject: [PATCH 31/49] :recycle: fix test case --- .../record/components/pill_sheet/record_page_pill_sheet.dart | 1 - .../domain/record/components/record_page_pill_sheet_test.dart | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart index 3dd20a45f0..9a5f4ac51b 100644 --- a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart +++ b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart @@ -207,7 +207,6 @@ class RecordPagePillSheet extends StatelessWidget { return left <= pillNumberIntoPillSheet && pillNumberIntoPillSheet <= right; } - final pillSheetTypes = pillSheetGroup.pillSheets.map((e) => e.pillSheetType).toList(); final passedCount = summarizedPillSheetTypeTotalCountToPageIndex( diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 6263492ad9..a65894e0fd 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -140,8 +140,8 @@ void main() { todayRepository = originalTodayRepository; }); - final pillNumberForFromMenstruation = 22; - final durationMenstruation = 4; + final pillNumberForFromMenstruation = 0; + final durationMenstruation = 0; final setting = Setting( pillNumberForFromMenstruation: pillNumberForFromMenstruation, durationMenstruation: durationMenstruation, From 15f8fa76aaef827c3be02c32cc1021660425b666 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:46:59 +0900 Subject: [PATCH 32/49] :recycle: fix test case --- .../domain/record/components/record_page_pill_sheet_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index a65894e0fd..55ea04fbfa 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -93,8 +93,8 @@ void main() { pillSheetAppearanceMode: pillSheetAppearanceMode, ); final state = RecordPageState( - isPremium: true, - isTrial: true, + isPremium: false, + isTrial: false, setting: setting, ); final pillSheet = PillSheet( From 9fc80ea70c6dafa84ae62c0e9246aed2fc21aa32 Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:47:16 +0900 Subject: [PATCH 33/49] :recycle: Refactor decided pill number widget type --- .../pill_sheet/record_page_pill_sheet.dart | 69 +++++++++++-------- 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart index 9a5f4ac51b..daaa7d28d8 100644 --- a/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart +++ b/lib/domain/record/components/pill_sheet/record_page_pill_sheet.dart @@ -129,27 +129,7 @@ class RecordPagePillSheet extends StatelessWidget { required int pageIndex, required Setting setting, }) { - final DateTime date = - calculatedDateOfAppearancePill(pillSheet, pillNumberIntoPillSheet); - final isDateMode = () { - if (!(state.isPremium || state.isTrial)) { - return false; - } - if (state.appearanceMode != PillSheetAppearanceMode.date) { - return false; - } - return true; - }(); - - if (setting.pillNumberForFromMenstruation == 0 || - setting.durationMenstruation == 0) { - if (isDateMode) { - return PlainPillDate(date: date); - } else { - return PlainPillNumber(pillNumberIntoPillSheet: pillNumberIntoPillSheet); - } - } - + final isPremiumOrTrial = state.isPremium || state.isTrial; final containedMenstruationDuration = RecordPagePillSheet.isContainedMenstruationDuration( pillNumberIntoPillSheet: pillNumberIntoPillSheet, @@ -157,20 +137,55 @@ class RecordPagePillSheet extends StatelessWidget { setting: setting, pageIndex: pageIndex, ); + if (isPremiumOrTrial && + state.appearanceMode == PillSheetAppearanceMode.date) { + final DateTime date = + calculatedDateOfAppearancePill(pillSheet, pillNumberIntoPillSheet); + + if (setting.pillNumberForFromMenstruation == 0 || + setting.durationMenstruation == 0) { + return PlainPillDate(date: date); + } - if (isDateMode) { - if (containedMenstruationDuration && (state.isPremium || state.isTrial)) { + if (containedMenstruationDuration) { return MenstruationPillDate(date: date); } else { return PlainPillDate(date: date); } + } else if (state.appearanceMode == PillSheetAppearanceMode.sequential) { + final offset = summarizedPillSheetTypeTotalCountToPageIndex( + pillSheetTypes: + pillSheetGroup.pillSheets.map((e) => e.pillSheetType).toList(), + pageIndex: pageIndex, + ); + if (setting.pillNumberForFromMenstruation == 0 || + setting.durationMenstruation == 0) { + return SequentialPillNumber( + offset: offset, pillNumberIntoPillSheet: pillNumberIntoPillSheet); + } + + if (isPremiumOrTrial) { + if (containedMenstruationDuration) { + return MenstruationSequentialPillNumber( + offset: offset, pillNumberIntoPillSheet: pillNumberIntoPillSheet); + } + } + return SequentialPillNumber( + offset: offset, pillNumberIntoPillSheet: pillNumberIntoPillSheet); } else { - if (containedMenstruationDuration && (state.isPremium || state.isTrial)) { - return MenstruationPillNumber( + if (setting.pillNumberForFromMenstruation == 0 || + setting.durationMenstruation == 0) { + return PlainPillNumber( pillNumberIntoPillSheet: pillNumberIntoPillSheet); - } else { - return PlainPillNumber(pillNumberIntoPillSheet: pillNumberIntoPillSheet); } + + if (isPremiumOrTrial) { + if (containedMenstruationDuration) { + return MenstruationPillNumber( + pillNumberIntoPillSheet: pillNumberIntoPillSheet); + } + } + return PlainPillNumber(pillNumberIntoPillSheet: pillNumberIntoPillSheet); } } From 9109fdb63848adc704d5dbe1c66c96c6b0fa723a Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:48:24 +0900 Subject: [PATCH 34/49] :recycle: fix test case --- .../domain/record/components/record_page_pill_sheet_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 55ea04fbfa..2e9d644c5f 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -309,8 +309,8 @@ void main() { todayRepository = originalTodayRepository; }); - final pillNumberForFromMenstruation = 22; - final durationMenstruation = 4; + final pillNumberForFromMenstruation = 0; + final durationMenstruation = 0; final setting = Setting( pillNumberForFromMenstruation: pillNumberForFromMenstruation, durationMenstruation: durationMenstruation, From c30199e29b4b9962437d52a49f3fe4ded81c66bf Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:48:48 +0900 Subject: [PATCH 35/49] :recycle: fix test case --- .../domain/record/components/record_page_pill_sheet_test.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 2e9d644c5f..f642824b7a 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -262,8 +262,8 @@ void main() { pillSheetAppearanceMode: pillSheetAppearanceMode, ); final state = RecordPageState( - isPremium: true, - isTrial: true, + isPremium: false, + isTrial: false, setting: setting, ); final pillSheet = PillSheet( From 92743361bfd1ec4ccc4c6b800f79f5d6f4cf849e Mon Sep 17 00:00:00 2001 From: bannzai Date: Mon, 8 Nov 2021 23:51:19 +0900 Subject: [PATCH 36/49] :sparkels: add test group --- .../record_page_pill_sheet_test.dart | 181 +++++++++++++++++- 1 file changed, 175 insertions(+), 6 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index f642824b7a..d2e01611bd 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -73,6 +73,175 @@ void main() { } } }); + group("pillSheetAppearanceMode is sequential", () { + final pillSheetAppearanceMode = PillSheetAppearanceMode.sequential; + test("it is isPremium or isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, + beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + test("it is not isPremium and isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: false, + isTrial: false, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, + beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + test( + "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 0; + final durationMenstruation = 0; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, + beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + }); test("it is not isPremium and isTrial", () { final originalTodayRepository = todayRepository; final mockTodayRepository = MockTodayService(); @@ -115,14 +284,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (pillNumberIntoPillSheet < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } @@ -171,14 +340,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (pillNumberIntoPillSheet < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } From b2cc166d8df45061b0337265818b34af8f9ef24b Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 00:13:33 +0900 Subject: [PATCH 37/49] :recycle: fix test position --- .../record_page_pill_sheet_test.dart | 335 +++++++++--------- 1 file changed, 166 insertions(+), 169 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index d2e01611bd..60b955216c 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -73,175 +73,6 @@ void main() { } } }); - group("pillSheetAppearanceMode is sequential", () { - final pillSheetAppearanceMode = PillSheetAppearanceMode.sequential; - test("it is isPremium or isTrial", () { - final originalTodayRepository = todayRepository; - final mockTodayRepository = MockTodayService(); - final today = DateTime.parse("2020-09-01"); - todayRepository = mockTodayRepository; - when(mockTodayRepository.now()).thenReturn(today); - when(mockTodayRepository.today()).thenReturn(today); - addTearDown(() { - todayRepository = originalTodayRepository; - }); - - final pillNumberForFromMenstruation = 22; - final durationMenstruation = 4; - final setting = Setting( - pillNumberForFromMenstruation: pillNumberForFromMenstruation, - durationMenstruation: durationMenstruation, - isOnReminder: true, - pillSheetAppearanceMode: pillSheetAppearanceMode, - ); - final state = RecordPageState( - isPremium: true, - isTrial: true, - setting: setting, - ); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, - beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); - for (int i = 0; i < 28; i++) { - final pillNumberIntoPillSheet = i + 1; - final widget = RecordPagePillSheet.textOfPillNumber( - state: state, - pillSheetGroup: pillSheetGroup, - pillSheet: pillSheet, - pillNumberIntoPillSheet: pillNumberIntoPillSheet, - pageIndex: 0, - setting: setting); - - if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (pillNumberIntoPillSheet < - pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } - } - }); - test("it is not isPremium and isTrial", () { - final originalTodayRepository = todayRepository; - final mockTodayRepository = MockTodayService(); - final today = DateTime.parse("2020-09-01"); - todayRepository = mockTodayRepository; - when(mockTodayRepository.now()).thenReturn(today); - when(mockTodayRepository.today()).thenReturn(today); - addTearDown(() { - todayRepository = originalTodayRepository; - }); - - final pillNumberForFromMenstruation = 22; - final durationMenstruation = 4; - final setting = Setting( - pillNumberForFromMenstruation: pillNumberForFromMenstruation, - durationMenstruation: durationMenstruation, - isOnReminder: true, - pillSheetAppearanceMode: pillSheetAppearanceMode, - ); - final state = RecordPageState( - isPremium: false, - isTrial: false, - setting: setting, - ); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, - beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); - - for (int i = 0; i < 28; i++) { - final pillNumberIntoPillSheet = i + 1; - final widget = RecordPagePillSheet.textOfPillNumber( - state: state, - pillSheetGroup: pillSheetGroup, - pillSheet: pillSheet, - pillNumberIntoPillSheet: pillNumberIntoPillSheet, - pageIndex: 0, - setting: setting); - - if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (pillNumberIntoPillSheet < - pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } - } - }); - test( - "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", - () { - final originalTodayRepository = todayRepository; - final mockTodayRepository = MockTodayService(); - final today = DateTime.parse("2020-09-01"); - todayRepository = mockTodayRepository; - when(mockTodayRepository.now()).thenReturn(today); - when(mockTodayRepository.today()).thenReturn(today); - addTearDown(() { - todayRepository = originalTodayRepository; - }); - - final pillNumberForFromMenstruation = 0; - final durationMenstruation = 0; - final setting = Setting( - pillNumberForFromMenstruation: pillNumberForFromMenstruation, - durationMenstruation: durationMenstruation, - isOnReminder: true, - pillSheetAppearanceMode: pillSheetAppearanceMode, - ); - final state = RecordPageState( - isPremium: true, - isTrial: true, - setting: setting, - ); - final pillSheet = PillSheet( - typeInfo: PillSheetType.pillsheet_21.typeInfo, - beginingDate: today); - final pillSheetGroup = PillSheetGroup( - pillSheetIDs: ["pill_sheet_id"], - pillSheets: [pillSheet], - createdAt: today); - - for (int i = 0; i < 28; i++) { - final pillNumberIntoPillSheet = i + 1; - final widget = RecordPagePillSheet.textOfPillNumber( - state: state, - pillSheetGroup: pillSheetGroup, - pillSheet: pillSheet, - pillNumberIntoPillSheet: pillNumberIntoPillSheet, - pageIndex: 0, - setting: setting); - - if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else if (pillNumberIntoPillSheet < - pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } else { - expect(widget, isA(), - reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); - } - } - }); - }); test("it is not isPremium and isTrial", () { final originalTodayRepository = todayRepository; final mockTodayRepository = MockTodayService(); @@ -522,6 +353,172 @@ void main() { } }); }); + group("pillSheetAppearanceMode is sequential", () { + final pillSheetAppearanceMode = PillSheetAppearanceMode.sequential; + test("it is isPremium or isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + test("it is not isPremium and isTrial", () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 22; + final durationMenstruation = 4; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: false, + isTrial: false, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + test( + "setting.pillNumberForFromMenstruation == 0 || setting.durationMenstruation == 0", + () { + final originalTodayRepository = todayRepository; + final mockTodayRepository = MockTodayService(); + final today = DateTime.parse("2020-09-01"); + todayRepository = mockTodayRepository; + when(mockTodayRepository.now()).thenReturn(today); + when(mockTodayRepository.today()).thenReturn(today); + addTearDown(() { + todayRepository = originalTodayRepository; + }); + + final pillNumberForFromMenstruation = 0; + final durationMenstruation = 0; + final setting = Setting( + pillNumberForFromMenstruation: pillNumberForFromMenstruation, + durationMenstruation: durationMenstruation, + isOnReminder: true, + pillSheetAppearanceMode: pillSheetAppearanceMode, + ); + final state = RecordPageState( + isPremium: true, + isTrial: true, + setting: setting, + ); + final pillSheet = PillSheet( + typeInfo: PillSheetType.pillsheet_21.typeInfo, beginingDate: today); + final pillSheetGroup = PillSheetGroup( + pillSheetIDs: ["pill_sheet_id"], + pillSheets: [pillSheet], + createdAt: today); + + for (int i = 0; i < 28; i++) { + final pillNumberIntoPillSheet = i + 1; + final widget = RecordPagePillSheet.textOfPillNumber( + state: state, + pillSheetGroup: pillSheetGroup, + pillSheet: pillSheet, + pillNumberIntoPillSheet: pillNumberIntoPillSheet, + pageIndex: 0, + setting: setting); + + if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else if (pillNumberIntoPillSheet < + pillNumberForFromMenstruation + durationMenstruation) { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } else { + expect(widget, isA(), + reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); + } + } + }); + }); }); group("#RecordPagePillSheet.calculatedDateOfAppearancePill", () { test("it is not have rest duration", () { From bd1341afbb507b5429aabfb2aac9f6586c4aace0 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 00:14:14 +0900 Subject: [PATCH 38/49] :recycle: missing test case --- .../components/record_page_pill_sheet_test.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/domain/record/components/record_page_pill_sheet_test.dart b/test/domain/record/components/record_page_pill_sheet_test.dart index 60b955216c..11b2cc3b8d 100644 --- a/test/domain/record/components/record_page_pill_sheet_test.dart +++ b/test/domain/record/components/record_page_pill_sheet_test.dart @@ -115,14 +115,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (pillNumberIntoPillSheet < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } @@ -171,14 +171,14 @@ void main() { setting: setting); if (pillNumberIntoPillSheet < pillNumberForFromMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else if (pillNumberIntoPillSheet < pillNumberForFromMenstruation + durationMenstruation) { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } else { - expect(widget, isA(), + expect(widget, isA(), reason: "pillNumberIntoPillSheet: $pillNumberIntoPillSheet"); } } From 45f95a64f7864141487e31f8f5c7eed77adf90a8 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:02:29 +0900 Subject: [PATCH 39/49] Switching word --- .../components/header/record_page_header.dart | 5 ++++ .../header/today_taken_pill_number.dart | 28 +++++++++++++++---- lib/domain/record/record_page.dart | 1 + 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/lib/domain/record/components/header/record_page_header.dart b/lib/domain/record/components/header/record_page_header.dart index cc53018028..2d265f770d 100644 --- a/lib/domain/record/components/header/record_page_header.dart +++ b/lib/domain/record/components/header/record_page_header.dart @@ -7,6 +7,7 @@ import 'package:pilll/domain/record/components/header/today_taken_pill_number.da import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/domain/settings/today_pill_number/setting_today_pill_number_page.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; +import 'package:pilll/entity/setting.dart'; import 'package:pilll/util/formatter/date_time_formatter.dart'; import 'package:flutter/material.dart'; @@ -17,11 +18,13 @@ abstract class RecordPageInformationHeaderConst { class RecordPageInformationHeader extends StatelessWidget { final DateTime today; final PillSheetGroup? pillSheetGroup; + final Setting setting; final RecordPageStore store; const RecordPageInformationHeader({ Key? key, required this.today, required this.pillSheetGroup, + required this.setting, required this.store, }) : super(key: key); @@ -32,6 +35,7 @@ class RecordPageInformationHeader extends StatelessWidget { Widget build(BuildContext context) { final pillSheetGroup = this.pillSheetGroup; final activedPillSheet = pillSheetGroup?.activedPillSheet; + final setting = this.setting; return Container( height: RecordPageInformationHeaderConst.height, @@ -53,6 +57,7 @@ class RecordPageInformationHeader extends StatelessWidget { SizedBox(width: 28), TodayTakenPillNumber( pillSheetGroup: pillSheetGroup, + setting: setting, onPressed: () { analytics.logEvent( name: "tapped_record_information_header"); diff --git a/lib/domain/record/components/header/today_taken_pill_number.dart b/lib/domain/record/components/header/today_taken_pill_number.dart index a1c2470aa3..2c9bc97406 100644 --- a/lib/domain/record/components/header/today_taken_pill_number.dart +++ b/lib/domain/record/components/header/today_taken_pill_number.dart @@ -2,30 +2,43 @@ import 'package:flutter/cupertino.dart'; import 'package:pilll/analytics.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; +import 'package:pilll/domain/settings/components/rows/pill_sheet_appearance_mode.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; import 'package:pilll/entity/pill_sheet_type.dart'; import 'package:flutter/material.dart'; +import 'package:pilll/entity/setting.dart'; class TodayTakenPillNumber extends StatelessWidget { final PillSheetGroup? pillSheetGroup; final VoidCallback onPressed; + final Setting setting; const TodayTakenPillNumber({ Key? key, required this.pillSheetGroup, required this.onPressed, + required this.setting, }) : super(key: key); + PillSheetAppearanceMode get _appearanceMode => + setting.pillSheetAppearanceMode; + @override Widget build(BuildContext context) { return GestureDetector( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - "💊 今日飲むピル", - style: FontType.assisting.merge(TextColorStyle.noshime), - ), + if (_appearanceMode == PillSheetAppearanceMode.sequential) + Text( + "💊 今日は服用", + style: FontType.assisting.merge(TextColorStyle.noshime), + ), + if (_appearanceMode != PillSheetAppearanceMode.sequential) + Text( + "💊 今日飲むピル", + style: FontType.assisting.merge(TextColorStyle.noshime), + ), _content(), ], ), @@ -64,7 +77,12 @@ class TodayTakenPillNumber extends StatelessWidget { children: [ Text("${activedPillSheet.todayPillNumber}", style: FontType.xHugeNumber.merge(TextColorStyle.main)), - Text("番", style: FontType.assistingBold.merge(TextColorStyle.noshime)), + if (_appearanceMode == PillSheetAppearanceMode.sequential) + Text("日目", + style: FontType.assistingBold.merge(TextColorStyle.noshime)), + if (_appearanceMode != PillSheetAppearanceMode.sequential) + Text("番", + style: FontType.assistingBold.merge(TextColorStyle.noshime)), ], ); } diff --git a/lib/domain/record/record_page.dart b/lib/domain/record/record_page.dart index b5ce05a192..15ca3ece64 100644 --- a/lib/domain/record/record_page.dart +++ b/lib/domain/record/record_page.dart @@ -58,6 +58,7 @@ class RecordPage extends HookWidget { title: RecordPageInformationHeader( today: DateTime.now(), pillSheetGroup: state.pillSheetGroup, + setting: settingEntity, store: store, ), ), From 2474abefed00393ba925becf0020f526e40be8a4 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:11:04 +0900 Subject: [PATCH 40/49] :recycle: add condition of premium function --- .../header/today_taken_pill_number.dart | 1 - .../select_appearance_mode_modal.dart | 42 ++++++++++++------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/domain/record/components/header/today_taken_pill_number.dart b/lib/domain/record/components/header/today_taken_pill_number.dart index 2c9bc97406..3839663f42 100644 --- a/lib/domain/record/components/header/today_taken_pill_number.dart +++ b/lib/domain/record/components/header/today_taken_pill_number.dart @@ -2,7 +2,6 @@ import 'package:flutter/cupertino.dart'; import 'package:pilll/analytics.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; -import 'package:pilll/domain/settings/components/rows/pill_sheet_appearance_mode.dart'; import 'package:pilll/entity/pill_sheet_group.dart'; import 'package:pilll/entity/pill_sheet_type.dart'; import 'package:flutter/material.dart'; diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 1d993bb0ce..b16bf15d8b 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -5,6 +5,10 @@ import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/molecules/premium_badge.dart'; import 'package:pilll/components/molecules/select_circle.dart'; +import 'package:pilll/domain/premium_introduction/premium_introduction_sheet.dart'; +import 'package:pilll/domain/premium_trial/premium_trial_complete_modal.dart'; +import 'package:pilll/domain/premium_trial/premium_trial_modal.dart'; +import 'package:pilll/domain/record/record_page_state.dart'; import 'package:pilll/domain/record/record_page_store.dart'; import 'package:pilll/entity/setting.dart'; @@ -13,10 +17,6 @@ class SelectAppearanceModeModal extends HookWidget { Widget build(BuildContext context) { final store = useProvider(recordPageStoreProvider); final state = useProvider(recordPageStoreProvider.state); - final setting = state.setting; - if (setting == null) { - return Container(); - } return Container( color: Colors.white, padding: const EdgeInsets.only(bottom: 20, top: 24, left: 16, right: 16), @@ -40,26 +40,26 @@ class SelectAppearanceModeModal extends HookWidget { _row( context, store: store, - setting: setting, + state: state, mode: PillSheetAppearanceMode.date, text: "日付表示", - showsPremiumBadge: true, + isPremiumFunction: true, ), _row( context, store: store, - setting: setting, + state: state, mode: PillSheetAppearanceMode.number, text: "ピル番号", - showsPremiumBadge: false, + isPremiumFunction: false, ), _row( context, store: store, - setting: setting, + state: state, mode: PillSheetAppearanceMode.sequential, text: "服用日数", - showsPremiumBadge: false, + isPremiumFunction: false, ), ], ), @@ -72,20 +72,32 @@ class SelectAppearanceModeModal extends HookWidget { Widget _row( BuildContext context, { required RecordPageStore store, - required Setting setting, + required RecordPageState state, required PillSheetAppearanceMode mode, required String text, - required bool showsPremiumBadge, + required bool isPremiumFunction, }) { return GestureDetector( onTap: () { - store.switchingAppearanceMode(mode); + if (state.isPremium || state.isTrial) { + store.switchingAppearanceMode(mode); + } else if (isPremiumFunction) { + if (state.trialDeadlineDate == null) { + showPremiumTrialModal(context, () { + showPremiumTrialCompleteModalPreDialog(context); + }); + } else { + showPremiumIntroductionSheet(context); + } + } else { + store.switchingAppearanceMode(mode); + } }, child: Container( height: 48, child: Row( children: [ - SelectCircle(isSelected: mode == setting.pillSheetAppearanceMode), + SelectCircle(isSelected: mode == state.appearanceMode), SizedBox(width: 34), Text( text, @@ -95,7 +107,7 @@ class SelectAppearanceModeModal extends HookWidget { fontSize: 14, ), ), - if (showsPremiumBadge) ...[ + if (isPremiumFunction) ...[ SizedBox(width: 12), PremiumBadge(), ] From 48c1491eb84cc22fef30734fb326cbbcfc35ea09 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:11:49 +0900 Subject: [PATCH 41/49] :memo: add analytics events --- .../appearance_mode/select_appearance_mode_modal.dart | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index b16bf15d8b..f2e19d049f 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:pilll/analytics.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/components/molecules/premium_badge.dart'; @@ -79,6 +80,10 @@ class SelectAppearanceModeModal extends HookWidget { }) { return GestureDetector( onTap: () { + analytics.logEvent( + name: "did_select_pill_sheet_appearance", + parameters: {"mode": mode, "isPremiumFunction": isPremiumFunction}, + ); if (state.isPremium || state.isTrial) { store.switchingAppearanceMode(mode); } else if (isPremiumFunction) { From 2669f4c5262ea827de6e1130be31aaa6a4cfedc2 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:11:59 +0900 Subject: [PATCH 42/49] :shirt: fix indent --- .../components/appearance_mode/select_appearance_mode_modal.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index f2e19d049f..f159cf9a5f 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -84,6 +84,7 @@ class SelectAppearanceModeModal extends HookWidget { name: "did_select_pill_sheet_appearance", parameters: {"mode": mode, "isPremiumFunction": isPremiumFunction}, ); + if (state.isPremium || state.isTrial) { store.switchingAppearanceMode(mode); } else if (isPremiumFunction) { From 8da28712a6928f408e144357f6c52341729aea91 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:12:23 +0900 Subject: [PATCH 43/49] :sparkels: add analytics --- .../components/appearance_mode/select_appearance_mode_modal.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index f159cf9a5f..36fa1324be 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -127,6 +127,7 @@ class SelectAppearanceModeModal extends HookWidget { void showSelectAppearanceModeModal( BuildContext context, ) { + analytics.setCurrentScreen(screenName: "SelectAppearanceModeModal"); showModalBottomSheet( context: context, builder: (context) => SelectAppearanceModeModal(), From 0c64260baf8f834fa1ac63778a058356e74a2c7c Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:13:07 +0900 Subject: [PATCH 44/49] :sparkels: add analytics --- .../components/appearance_mode/switching_appearance_mode.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart index a980a70be0..68c8782dd3 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/switching_appearance_mode.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; +import 'package:pilll/analytics.dart'; import 'package:pilll/components/atoms/font.dart'; import 'package:pilll/components/atoms/text_color.dart'; import 'package:pilll/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart'; @@ -31,6 +32,7 @@ class SwitchingAppearanceMode extends StatelessWidget { ), ]), onTap: () { + analytics.logEvent(name: "did_tapped_record_page_appearance_mode"); showSelectAppearanceModeModal(context); }, ); From b2d278b4eab902c2d6e0751209236cef4ee891e1 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:16:42 +0900 Subject: [PATCH 45/49] :memo: using to string method --- .../appearance_mode/select_appearance_mode_modal.dart | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 36fa1324be..59d337bfd2 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -82,7 +82,10 @@ class SelectAppearanceModeModal extends HookWidget { onTap: () { analytics.logEvent( name: "did_select_pill_sheet_appearance", - parameters: {"mode": mode, "isPremiumFunction": isPremiumFunction}, + parameters: { + "mode": mode.toString(), + "isPremiumFunction": isPremiumFunction + }, ); if (state.isPremium || state.isTrial) { From 6ace82a13e2a43a0cadec5d20d923094fd3e73d1 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:18:33 +0900 Subject: [PATCH 46/49] :memo: add comment --- .../components/appearance_mode/select_appearance_mode_modal.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart index 59d337bfd2..f907cc13fa 100644 --- a/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart +++ b/lib/domain/record/components/supports/components/appearance_mode/select_appearance_mode_modal.dart @@ -99,6 +99,7 @@ class SelectAppearanceModeModal extends HookWidget { showPremiumIntroductionSheet(context); } } else { + // User selected non premium function mode store.switchingAppearanceMode(mode); } }, From 0ac131b90389d2d18e2f6e1ddbf838aeed3d3e1e Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:19:05 +0900 Subject: [PATCH 47/49] :recycle: Remove unnecessary method --- lib/domain/settings/setting_page_store.dart | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/lib/domain/settings/setting_page_store.dart b/lib/domain/settings/setting_page_store.dart index 8b47722715..6c86877e55 100644 --- a/lib/domain/settings/setting_page_store.dart +++ b/lib/domain/settings/setting_page_store.dart @@ -190,17 +190,6 @@ class SettingStateStore extends StateNotifier { return batch.commit(); } - Future modifyPillSheetAppearanceMode(PillSheetAppearanceMode mode) { - final entity = state.entity; - if (entity == null) { - throw FormatException("setting entity not found"); - } - final updated = entity.copyWith(pillSheetAppearanceMode: mode); - return _service - .update(updated) - .then((value) => state = state.copyWith(entity: value)); - } - Future modifiyIsAutomaticallyCreatePillSheet(bool isOn) { final entity = state.entity; if (entity == null) { From 64b8b76bd7eaae77db3d2461c7fa69bdbbc25156 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:19:26 +0900 Subject: [PATCH 48/49] :recycle: remove unused file --- .../rows/pill_sheet_appearance_mode.dart | 83 ------------------- 1 file changed, 83 deletions(-) delete mode 100644 lib/domain/settings/components/rows/pill_sheet_appearance_mode.dart diff --git a/lib/domain/settings/components/rows/pill_sheet_appearance_mode.dart b/lib/domain/settings/components/rows/pill_sheet_appearance_mode.dart deleted file mode 100644 index 56290a9a27..0000000000 --- a/lib/domain/settings/components/rows/pill_sheet_appearance_mode.dart +++ /dev/null @@ -1,83 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_hooks/flutter_hooks.dart'; -import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:pilll/analytics.dart'; -import 'package:pilll/components/atoms/font.dart'; -import 'package:pilll/components/molecules/premium_badge.dart'; -import 'package:pilll/domain/premium_introduction/premium_introduction_sheet.dart'; -import 'package:pilll/domain/premium_trial/premium_trial_complete_modal.dart'; -import 'package:pilll/domain/premium_trial/premium_trial_modal.dart'; -import 'package:pilll/domain/settings/setting_page_store.dart'; -import 'package:pilll/entity/setting.dart'; - -class PillSheetAppearanceModeRow extends HookWidget { - final bool isPremium; - final bool isTrial; - final DateTime? trialDeadlineDate; - final Setting setting; - - const PillSheetAppearanceModeRow({ - Key? key, - required this.isTrial, - required this.isPremium, - required this.trialDeadlineDate, - required this.setting, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - final store = useProvider(settingStoreProvider); - final state = useProvider(settingStoreProvider.state); - final isOn = - setting.pillSheetAppearanceMode == PillSheetAppearanceMode.date; - return ListTile( - title: Row( - children: [ - Text("日付表示モード", style: FontType.listRow), - if (!state.isPremium) ...[ - SizedBox(width: 8), - PremiumBadge(), - ] - ], - ), - trailing: Switch( - value: (isOn && (isPremium || isTrial)), - onChanged: (value) => _onChanged(context, value, store), - ), - onTap: () => _onChanged(context, !isOn, store), - ); - } - - _onChanged( - BuildContext context, - bool isOn, - SettingStateStore store, - ) async { - analytics.logEvent( - name: "did_select_pill_sheet_appearance", - ); - if (isPremium || isTrial) { - final pillSheetAppearanceMode = - isOn ? PillSheetAppearanceMode.date : PillSheetAppearanceMode.number; - await store.modifyPillSheetAppearanceMode(pillSheetAppearanceMode); - ScaffoldMessenger.of(context).hideCurrentSnackBar(); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - duration: Duration(seconds: 2), - content: Text( - "日付表示モードを${isOn ? "有効" : "無効"}にしました", - ), - ), - ); - } else { - if (trialDeadlineDate == null) { - showPremiumTrialModal(context, () { - showPremiumTrialCompleteModalPreDialog(context); - }); - } else { - showPremiumIntroductionSheet(context); - } - } - } -} From 990782f376467c657f55738649c761ebd72b04b1 Mon Sep 17 00:00:00 2001 From: bannzai Date: Tue, 9 Nov 2021 12:19:45 +0900 Subject: [PATCH 49/49] :recycle: avoid compile error --- lib/domain/settings/setting_page.dart | 8 -------- 1 file changed, 8 deletions(-) diff --git a/lib/domain/settings/setting_page.dart b/lib/domain/settings/setting_page.dart index dc137d2d91..f63aa3aea2 100644 --- a/lib/domain/settings/setting_page.dart +++ b/lib/domain/settings/setting_page.dart @@ -8,7 +8,6 @@ import 'package:pilll/domain/settings/components/rows/account_link.dart'; import 'package:pilll/domain/settings/components/rows/list_explain.dart'; import 'package:pilll/domain/settings/components/rows/notification_in_rest_duration.dart'; import 'package:pilll/domain/settings/components/rows/notification_time.dart'; -import 'package:pilll/domain/settings/components/rows/pill_sheet_appearance_mode.dart'; import 'package:pilll/domain/settings/components/rows/pill_sheet_remove.dart'; import 'package:pilll/domain/settings/components/rows/premium_introduction.dart'; import 'package:pilll/domain/settings/components/rows/quick_record.dart'; @@ -101,13 +100,6 @@ class SettingPage extends HookWidget { return SettingSectionTitle( text: "ピルシート", children: [ - PillSheetAppearanceModeRow( - setting: setting, - isPremium: state.isPremium, - isTrial: state.isTrial, - trialDeadlineDate: state.trialDeadlineDate, - ), - _separator(), if (activedPillSheet != null && pillSheetGroup != null && !pillSheetGroup.isDeactived) ...[