Skip to content

生理期間の選択肢拡張と長期間表示不具合の修正 - #1379

Merged
bannzai merged 6 commits into
mainfrom
fix/logic/ui_menstruation_duration
Jul 17, 2025
Merged

生理期間の選択肢拡張と長期間表示不具合の修正#1379
bannzai merged 6 commits into
mainfrom
fix/logic/ui_menstruation_duration

Conversation

@bannzai

@bannzai bannzai commented Jul 17, 2025

Copy link
Copy Markdown
Owner

概要

ユーザーから報告された2つの問題を修正しました:

  1. 生理期間の選択肢が7日までしかない問題
  2. 13日間など長期間の生理期間で、週をまたぐ場合に真ん中の週のピンク色の帯が表示されない不具合

問題の詳細

ユーザーからの報告内容

生理の日数についてなのですが、7日以上の選択肢を増やすことは難しいでしょうか?
今回13日あったのですがデフォルトの4日で一旦入力してしまい、後から編集で日数を増やしたところ、何故か真ん中の一週間が生理のピンクの帯が表示されませんでした。

修正内容

1. 生理期間の選択肢を30日まで拡張

  • SettingMenstruationDynamicDescriptionConstants.durationListを7日から30日に変更
  • 30日という値は医学的根拠ではなく、十分な選択肢を提供するための適当な値としてコメントに明記

2. 長期間の生理期間表示不具合を修正

問題の原因

CalendarWeekLine_containsメソッドが、生理期間の開始日または終了日が週に含まれるかのみをチェックしていたため、週全体が生理期間内にある場合(例:第2週)が判定されない

修正内容

週の期間と生理期間が重なるかどうかを判定するロジックに変更:

final isOverlapping = dateRange.begin.isBefore(calendarBandModel.end.add(const Duration(days: 1))) &&
                     dateRange.end.isAfter(calendarBandModel.begin.subtract(const Duration(days: 1)));

動作確認方法

生理期間の設定

  1. 設定画面から「生理について」を選択
  2. 「生理は何日間続きますか?」の数値をタップ
  3. 1日から30日までの選択肢が表示されることを確認
  4. 任意の日数(例:13日)を選択して保存

長期間の生理記録

  1. 生理タブから「生理を記録」をタップ
  2. 開始日を選択(デフォルトは4日の場合)
  3. 記録後、カレンダータブで表示を確認
  4. 生理期間のピンク色の帯をタップして編集
  5. 期間を延長(例:13日間に変更)
  6. カレンダー上で全期間が正しく表示されることを確認
    • 特に週をまたぐ場合、すべての週でピンク色の帯が表示されること

テスト

以下のテストケースを追加し、すべてパスすることを確認しました:

  • calendar_menstruation_band_test.dart: 13日間の生理期間、月をまたぐケース、編集後の表示
  • calendar_band_function_test.dart: バンド表示関数のロジックテスト
  • week_calendar_menstruation_test.dart: 週ごとの表示テスト
  • date_range_contains_test.dart: 期間の重なり判定ロジックのテスト
# テスト実行
flutter test test/components/organisms/calendar/band/
flutter test test/components/organisms/calendar/week/week_calendar_menstruation_test.dart

🤖 Generated with Claude Code

bannzai and others added 6 commits July 17, 2025 20:56
ユーザーから13日間の生理期間を記録したいという要望があったため、
設定可能な生理期間の上限を7日から30日に拡張しました。

- SettingMenstruationDynamicDescriptionConstants.durationListを変更
- 30日という値は医学的根拠ではなく、十分な選択肢を提供するための値

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
13日間など長期間の生理期間で、真ん中の週のピンク色の帯が
表示されない不具合を修正しました。

問題の原因:
- _containsメソッドが生理期間の開始日または終了日が週に含まれるかのみチェック
- 週全体が生理期間内にある場合(例:第2週)が判定されない

修正内容:
- 週の期間と生理期間が重なるかどうかを判定するロジックに変更
- dateRange.begin < calendarBandModel.end かつ dateRange.end > calendarBandModel.begin

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
以下のテストケースを追加しました:

1. calendar_menstruation_band_test.dart
   - 13日間の生理期間が正しく表示されるテスト
   - 月をまたぐ生理期間の表示テスト
   - 4日から13日に編集された場合のテスト

2. calendar_band_function_test.dart
   - bandLength関数のテスト(週をまたぐケース)
   - isNecessaryLineBreak関数のテスト
   - offsetForStartPositionAtLine関数のテスト

3. week_calendar_menstruation_test.dart
   - CalendarWeekLineでの生理期間表示テスト

4. date_range_contains_test.dart
   - 期間の重なり判定ロジックのテスト

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
カレンダーのバンド表示で期間の重なりを判定する際の注意点を追記しました。
今回の不具合の教訓として、開始日/終了日の包含チェックだけでなく、
期間全体の重なりをチェックする必要があることを明記。

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
@bannzai
bannzai merged commit 7796d7e into main Jul 17, 2025
5 checks passed
@bannzai
bannzai deleted the fix/logic/ui_menstruation_duration branch July 17, 2025 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant