Skip to content

Commit

Permalink
Merge pull request #365 from bannzai/feature/pill_sheet_group
Browse files Browse the repository at this point in the history
Feature/pill sheet group
  • Loading branch information
bannzai authored Sep 16, 2021
2 parents 5a0988e + 426ca94 commit 6c7a91b
Show file tree
Hide file tree
Showing 19 changed files with 84 additions and 198 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import 'package:pilll/entity/weekday.dart';
class SettingPillSheetView extends StatelessWidget {
final int pageIndex;
final List<PillSheetType> pillSheetTypes;
final int selectedPillNumberPageIndex;
final int? selectedPillNumberIntoPillSheet;
final Function(int pageIndex, int pillNumberIntoPillSheet) markSelected;

Expand All @@ -22,7 +21,6 @@ class SettingPillSheetView extends StatelessWidget {
Key? key,
required this.pageIndex,
required this.pillSheetTypes,
required this.selectedPillNumberPageIndex,
required this.selectedPillNumberIntoPillSheet,
required this.markSelected,
}) : super(key: key);
Expand Down Expand Up @@ -87,10 +85,8 @@ class SettingPillSheetView extends StatelessWidget {
PillMarkType _pillMarkTypeFor({
required int pillNumberIntoPillSheet,
}) {
if (selectedPillNumberPageIndex == pageIndex) {
if (selectedPillNumberIntoPillSheet == pillNumberIntoPillSheet) {
return PillMarkType.selected;
}
if (selectedPillNumberIntoPillSheet == pillNumberIntoPillSheet) {
return PillMarkType.selected;
}

if (pillSheetType.dosingPeriod < pillNumberIntoPillSheet) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ abstract class SettingMenstruationDynamicDescriptionConstants {
}

class SettingMenstruationDynamicDescription extends StatelessWidget {
final List<PillSheetType> pillSheetTypes;
final int fromMenstruation;
final int durationMenstruation;
final PillSheetType Function() retrieveFocusedPillSheetType;
final void Function(int from) fromMenstructionDidDecide;
final void Function(int duration) durationMenstructionDidDecide;

const SettingMenstruationDynamicDescription({
Key? key,
required this.pillSheetTypes,
required this.fromMenstruation,
required this.durationMenstruation,
required this.retrieveFocusedPillSheetType,
required this.fromMenstructionDidDecide,
required this.durationMenstructionDidDecide,
}) : super(key: key);
Expand Down Expand Up @@ -120,8 +120,10 @@ class SettingMenstruationDynamicDescription extends StatelessWidget {
}

void _showFromModalSheet(BuildContext context) {
int keepSelectedFromMenstruation =
min(fromMenstruation, retrieveFocusedPillSheetType().totalCount);
final maximumCount = pillSheetTypes
.map((e) => e.totalCount)
.reduce((value, element) => value + element);
int keepSelectedFromMenstruation = min(fromMenstruation, maximumCount);
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
Expand All @@ -146,8 +148,7 @@ class SettingMenstruationDynamicDescription extends StatelessWidget {
},
child: CupertinoPicker(
itemExtent: 40,
children: List.generate(
retrieveFocusedPillSheetType().totalCount + 1, (index) {
children: List.generate(maximumCount + 1, (index) {
if (index == 0) {
return "-";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,12 @@ import 'package:pilll/entity/pill_sheet_type.dart';

class SettingMenstruationPillSheetList extends HookWidget {
final List<PillSheetType> pillSheetTypes;
final int selectedPillSheetPageIndex;
final int? Function(int pageIndex) selectedPillNumber;
final Function(int) onPageChanged;
final Function(int pageIndex, int pillNumber) markSelected;

SettingMenstruationPillSheetList({
required this.pillSheetTypes,
required this.selectedPillSheetPageIndex,
required this.selectedPillNumber,
required this.onPageChanged,
required this.markSelected,
});

Expand All @@ -25,12 +21,6 @@ class SettingMenstruationPillSheetList extends HookWidget {
final pageController = usePageController(
viewportFraction: (PillSheetViewLayout.width + 20) /
MediaQuery.of(context).size.width);
pageController.addListener(() {
final page = pageController.page;
if (page != null) {
onPageChanged(page.toInt());
}
});
return Column(
children: [
Container(
Expand All @@ -54,7 +44,6 @@ class SettingMenstruationPillSheetList extends HookWidget {
child: SettingPillSheetView(
pageIndex: pageIndex,
pillSheetTypes: pillSheetTypes,
selectedPillNumberPageIndex: selectedPillSheetPageIndex,
selectedPillNumberIntoPillSheet:
selectedPillNumber(pageIndex),
markSelected: (pageIndex, number) =>
Expand Down
29 changes: 16 additions & 13 deletions lib/domain/initial_setting/initial_setting_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,6 @@ abstract class InitialSettingState implements _$InitialSettingState {
bool isLoading,
@Default(false)
bool isAccountCooperationDidEnd,
@Default(0)
currentMenstruationPageIndex,
}) = _InitialSettingState;

DateTime? reminderTimeOrDefault(int index) {
Expand Down Expand Up @@ -129,25 +127,23 @@ abstract class InitialSettingState implements _$InitialSettingState {
return null;
}
final pillSheetType = pillSheetTypes[pageIndex];
final pillSheetBeginPillNumber = pageIndex * pillSheetType.totalCount + 1;
final pillSheetEndPillNumber =
pastedTotalCount(pillSheetTypes: pillSheetTypes, pageIndex: pageIndex) +
pillSheetType.totalCount;
if (pillSheetBeginPillNumber <= todayPillNumber.pillNumberIntoPillSheet &&
todayPillNumber.pillNumberIntoPillSheet <= pillSheetEndPillNumber) {
// Between current PillSheet
return today().subtract(Duration(days: 1));
} else if (todayPillNumber.pillNumberIntoPillSheet <
pillSheetEndPillNumber) {
if (todayPillNumber.pageIndex < pageIndex) {
// Right side PillSheet
return null;
} else {
} else if (todayPillNumber.pageIndex > pageIndex) {
// Left side PillSheet
return _beginingDate(
pageIndex: pageIndex,
todayPillNumber: todayPillNumber,
pillSheetTypes: pillSheetTypes,
).add(Duration(days: pillSheetType.totalCount - 1));
} else {
// Current PillSheet
return _beginingDate(
pageIndex: pageIndex,
todayPillNumber: todayPillNumber,
pillSheetTypes: pillSheetTypes,
).add(Duration(days: todayPillNumber.pillNumberIntoPillSheet - 2));
}
}

Expand All @@ -157,4 +153,11 @@ abstract class InitialSettingState implements _$InitialSettingState {
return DateTime(t.year, t.month, t.day, reminderTime.hour,
reminderTime.minute, t.second, t.millisecond, t.microsecond);
}

int? selectedTodayPillNumberIntoPillSheet({required int pageIndex}) {
if (todayPillNumber?.pageIndex != pageIndex) {
return null;
}
return todayPillNumber?.pillNumberIntoPillSheet;
}
}
57 changes: 14 additions & 43 deletions lib/domain/initial_setting/initial_setting_state.freezed.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 6 additions & 4 deletions lib/domain/initial_setting/initial_setting_store.dart
Original file line number Diff line number Diff line change
Expand Up @@ -136,10 +136,6 @@ class InitialSettingStateStore extends StateNotifier<InitialSettingState> {
state = state.copyWith(todayPillNumber: null);
}

setCurrentMenstruationPageIndex(int pageIndex) {
state = state.copyWith(currentMenstruationPageIndex: pageIndex);
}

void setFromMenstruation({
required int pageIndex,
required int fromMenstruation,
Expand All @@ -149,6 +145,12 @@ class InitialSettingStateStore extends StateNotifier<InitialSettingState> {
state = state.copyWith(fromMenstruation: fromMenstruation + offset);
}

void pickFromMenstruation({
required int serializedPillNumberIntoGroup,
}) {
state = state.copyWith(fromMenstruation: serializedPillNumberIntoGroup);
}

void setDurationMenstruation({
required int durationMenstruation,
}) {
Expand Down
Loading

0 comments on commit 6c7a91b

Please sign in to comment.