Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/pill sheet group #365

Merged
merged 12 commits into from
Sep 16, 2021
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