Feature/bugfix 02 past time progresses (#5)
* Replaced startedTimeProgressSelectors with currentTimeProgressSelector. * Added pastTimeProgressSelector. * Fixed ProgressDetailScreen for PastProgresses. * Fixed ProgressDashBoard for PastProgresses. * Fixed AppDrawer for PastProgresses. * Increased Version Number Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
parent
319f539b48
commit
58bc713227
@ -43,8 +43,8 @@ class ProgressDashboardScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
List<Widget> startedProgressesTileList = List<Widget>();
|
||||
if (vm.hasStartedProgresses) {
|
||||
for (TimeProgress tp in vm.startedTimeProgreses) {
|
||||
if (vm.hasCurrentProgresses) {
|
||||
for (TimeProgress tp in vm.currentTimeProgresses) {
|
||||
startedProgressesTileList.add(
|
||||
Card(
|
||||
child: ListTile(
|
||||
@ -87,44 +87,78 @@ class ProgressDashboardScreen extends StatelessWidget {
|
||||
}
|
||||
}
|
||||
|
||||
List<Widget> pastProgressesTileList = List<Widget>();
|
||||
if (vm.pastTimeProgresses.length > 0) {
|
||||
for (TimeProgress tp in vm.pastTimeProgresses) {
|
||||
pastProgressesTileList.add(
|
||||
Card(
|
||||
child: ListTile(
|
||||
title: Text(tp.name),
|
||||
subtitle: Text(
|
||||
"Ended ${DateTime.now().difference(tp.endTime).inDays} Days ago."),
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, ProgressDetailScreen.routeName,
|
||||
arguments: ProgressDetailScreenArguments(tp.id));
|
||||
},
|
||||
)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
double dividerHeight = 1;
|
||||
double screenHeight = MediaQuery.of(context).size.height -
|
||||
appBar.preferredSize.height -
|
||||
24 -
|
||||
dividerHeight; //Divider
|
||||
dividerHeight -
|
||||
1; //Divider
|
||||
|
||||
List<Widget> columnChildren = List<Widget>();
|
||||
int tpCount =
|
||||
vm.startedTimeProgreses.length + vm.futureTimeProgresses.length;
|
||||
if (vm.hasStartedProgresses) {
|
||||
int tpCount = vm.currentTimeProgresses.length +
|
||||
vm.futureTimeProgresses.length +
|
||||
vm.pastTimeProgresses.length;
|
||||
if (vm.hasCurrentProgresses) {
|
||||
columnChildren.add(Container(
|
||||
height: vm.hasFutureProgresses
|
||||
? (screenHeight / tpCount) * vm.startedTimeProgreses.length
|
||||
: screenHeight,
|
||||
height:
|
||||
(screenHeight / tpCount) * vm.currentTimeProgresses.length,
|
||||
child: ListView(
|
||||
padding: EdgeInsets.all(8),
|
||||
children: startedProgressesTileList,
|
||||
),
|
||||
));
|
||||
}
|
||||
if (vm.hasStartedProgresses && vm.hasFutureProgresses) {
|
||||
if (vm.hasCurrentProgresses && vm.hasFutureProgresses) {
|
||||
columnChildren.add(Divider(
|
||||
height: dividerHeight,
|
||||
));
|
||||
}
|
||||
if (vm.hasFutureProgresses) {
|
||||
columnChildren.add(Container(
|
||||
height: vm.hasStartedProgresses
|
||||
? (screenHeight / tpCount) * vm.futureTimeProgresses.length
|
||||
: screenHeight,
|
||||
height: (screenHeight / tpCount) * vm.futureTimeProgresses.length,
|
||||
child: ListView(
|
||||
padding: EdgeInsets.all(8),
|
||||
children: futureProgressesTileList,
|
||||
),
|
||||
));
|
||||
}
|
||||
if ((vm.hasCurrentProgresses || vm.hasFutureProgresses) &&
|
||||
vm.pastTimeProgresses.length > 0) {
|
||||
columnChildren.add(Divider(
|
||||
height: dividerHeight,
|
||||
));
|
||||
}
|
||||
if (vm.pastTimeProgresses.length > 0) {
|
||||
columnChildren.add(Container(
|
||||
height: (screenHeight / tpCount) * vm.pastTimeProgresses.length,
|
||||
child: ListView(
|
||||
padding: EdgeInsets.all(8),
|
||||
children: pastProgressesTileList,
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
if (!vm.hasStartedProgresses && !vm.hasFutureProgresses) {
|
||||
if (!vm.hasCurrentProgresses &&
|
||||
!vm.hasFutureProgresses &&
|
||||
vm.pastTimeProgresses.length < 1) {
|
||||
columnChildren.add(Container(
|
||||
margin: EdgeInsets.all(16),
|
||||
child: Center(
|
||||
@ -151,30 +185,31 @@ class ProgressDashboardScreen extends StatelessWidget {
|
||||
}
|
||||
|
||||
class _ViewModel {
|
||||
final List<TimeProgress> startedTimeProgreses;
|
||||
final bool hasStartedProgresses;
|
||||
final List<TimeProgress> currentTimeProgresses;
|
||||
final bool hasCurrentProgresses;
|
||||
final List<TimeProgress> futureTimeProgresses;
|
||||
final bool hasFutureProgresses;
|
||||
final List<TimeProgress> pastTimeProgresses;
|
||||
final bool hasLoaded;
|
||||
|
||||
_ViewModel({
|
||||
@required this.startedTimeProgreses,
|
||||
@required this.hasStartedProgresses,
|
||||
@required this.currentTimeProgresses,
|
||||
@required this.hasCurrentProgresses,
|
||||
@required this.futureTimeProgresses,
|
||||
@required this.hasFutureProgresses,
|
||||
@required this.pastTimeProgresses,
|
||||
@required this.hasLoaded,
|
||||
});
|
||||
|
||||
static _ViewModel fromStore(Store<AppState> store) {
|
||||
List<TimeProgress> startedTPList =
|
||||
startedTimeProgressesSelector(store.state);
|
||||
List<TimeProgress> furtureTPList =
|
||||
futureTimeProgressesSelector(store.state);
|
||||
List<TimeProgress> currentTPList = currentTimeProgressSelector(store.state);
|
||||
List<TimeProgress> futureTPList = futureTimeProgressesSelector(store.state);
|
||||
return _ViewModel(
|
||||
startedTimeProgreses: startedTPList,
|
||||
hasStartedProgresses: startedTPList.length > 0,
|
||||
futureTimeProgresses: furtureTPList,
|
||||
hasFutureProgresses: furtureTPList.length > 0,
|
||||
currentTimeProgresses: currentTPList,
|
||||
hasCurrentProgresses: currentTPList.length > 0,
|
||||
futureTimeProgresses: futureTPList,
|
||||
hasFutureProgresses: futureTPList.length > 0,
|
||||
pastTimeProgresses: pastTimeProgressesSelector(store.state),
|
||||
hasLoaded: store.state.hasLoaded,
|
||||
);
|
||||
}
|
||||
|
@ -179,7 +179,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
: "The Name of the Time Progress has to be set.",
|
||||
),
|
||||
)
|
||||
: vm.hasProgressStarted
|
||||
: (vm.hasProgressStarted && !vm.hasEnded)
|
||||
? FittedBox(
|
||||
fit: BoxFit.fitWidth,
|
||||
child: Text(
|
||||
@ -205,7 +205,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
),
|
||||
),
|
||||
),
|
||||
vm.hasProgressStarted
|
||||
(vm.hasProgressStarted && !vm.hasEnded)
|
||||
? Expanded(
|
||||
flex: 2,
|
||||
child: ProgressDetailCircularPercent(
|
||||
@ -216,10 +216,13 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
)
|
||||
: Expanded(
|
||||
flex: 2,
|
||||
child: Text(
|
||||
"Starts in ${vm.timeProgress.startTime.difference(DateTime.now()).inDays} Days."),
|
||||
child: !vm.hasEnded
|
||||
? Text(
|
||||
"Starts in ${vm.timeProgress.startTime.difference(DateTime.now()).inDays} Days.")
|
||||
: Text(
|
||||
"Ended ${DateTime.now().difference(vm.timeProgress.endTime).inDays} Days ago."),
|
||||
),
|
||||
vm.hasProgressStarted
|
||||
(vm.hasProgressStarted && !vm.hasEnded)
|
||||
? Expanded(
|
||||
flex: 1,
|
||||
child: ProgressDetailLinearPercent(
|
||||
@ -278,18 +281,21 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
|
||||
class _ViewModel {
|
||||
final TimeProgress timeProgress;
|
||||
final bool hasProgressStarted;
|
||||
final bool hasEnded;
|
||||
|
||||
_ViewModel({
|
||||
@required this.timeProgress,
|
||||
@required this.hasProgressStarted,
|
||||
@required this.hasEnded,
|
||||
});
|
||||
|
||||
static _ViewModel fromStoreAndArg(
|
||||
Store<AppState> store, ProgressDetailScreenArguments args) {
|
||||
int currentTime = DateTime.now().millisecondsSinceEpoch;
|
||||
TimeProgress tp = timeProgressByIdSelector(store.state, args.id);
|
||||
return _ViewModel(
|
||||
timeProgress: tp,
|
||||
hasProgressStarted: DateTime.now().millisecondsSinceEpoch >
|
||||
tp.startTime.millisecondsSinceEpoch);
|
||||
hasProgressStarted: currentTime > tp.startTime.millisecondsSinceEpoch,
|
||||
hasEnded: tp.endTime.millisecondsSinceEpoch < currentTime);
|
||||
}
|
||||
}
|
||||
|
@ -4,12 +4,14 @@ import 'package:time_progress_tracker/models/time_progress.dart';
|
||||
List<TimeProgress> timeProgressListSelector(AppState state) =>
|
||||
state.timeProgressList;
|
||||
|
||||
List<TimeProgress> startedTimeProgressesSelector(AppState state) =>
|
||||
state.timeProgressList
|
||||
.where((timeProgress) =>
|
||||
DateTime.now().millisecondsSinceEpoch >=
|
||||
timeProgress.startTime.millisecondsSinceEpoch)
|
||||
List<TimeProgress> currentTimeProgressSelector(AppState state) {
|
||||
int currentTime = DateTime.now().millisecondsSinceEpoch;
|
||||
return state.timeProgressList
|
||||
.where((tp) =>
|
||||
currentTime >= tp.startTime.millisecondsSinceEpoch &&
|
||||
tp.endTime.millisecondsSinceEpoch >= currentTime)
|
||||
.toList();
|
||||
}
|
||||
|
||||
List<TimeProgress> futureTimeProgressesSelector(AppState state) =>
|
||||
state.timeProgressList
|
||||
@ -18,6 +20,13 @@ List<TimeProgress> futureTimeProgressesSelector(AppState state) =>
|
||||
timeProgress.startTime.millisecondsSinceEpoch)
|
||||
.toList();
|
||||
|
||||
List<TimeProgress> pastTimeProgressesSelector(AppState state) =>
|
||||
state.timeProgressList
|
||||
.where((tp) =>
|
||||
tp.endTime.millisecondsSinceEpoch <
|
||||
DateTime.now().millisecondsSinceEpoch)
|
||||
.toList();
|
||||
|
||||
TimeProgress timeProgressByIdSelector(AppState state, String id) {
|
||||
if (state.timeProgressList.length < 1) return null;
|
||||
return state.timeProgressList
|
||||
|
@ -49,8 +49,8 @@ class AppDrawer extends StatelessWidget {
|
||||
},
|
||||
),
|
||||
));
|
||||
if (vm.startedTimeProgresses.length > 0) {
|
||||
for (TimeProgress tp in vm.startedTimeProgresses) {
|
||||
if (vm.currentTimeProgresses.length > 0) {
|
||||
for (TimeProgress tp in vm.currentTimeProgresses) {
|
||||
drawerTileList.add(ListTile(
|
||||
title: Text(tp.name),
|
||||
trailing: CircularPercentIndicator(
|
||||
@ -73,7 +73,7 @@ class AppDrawer extends StatelessWidget {
|
||||
);
|
||||
},
|
||||
));
|
||||
if (vm.startedTimeProgresses.last != tp) {
|
||||
if (vm.currentTimeProgresses.last != tp) {
|
||||
drawerTileList.add(Divider(
|
||||
color: Colors.black12,
|
||||
));
|
||||
@ -110,17 +110,17 @@ class AppDrawer extends StatelessWidget {
|
||||
}
|
||||
|
||||
class _ViewModel {
|
||||
final List<TimeProgress> startedTimeProgresses;
|
||||
final List<TimeProgress> currentTimeProgresses;
|
||||
final bool hasLoaded;
|
||||
|
||||
_ViewModel({
|
||||
@required this.startedTimeProgresses,
|
||||
@required this.currentTimeProgresses,
|
||||
@required this.hasLoaded,
|
||||
});
|
||||
|
||||
static _ViewModel fromStore(Store<AppState> store) {
|
||||
return _ViewModel(
|
||||
startedTimeProgresses: startedTimeProgressesSelector(store.state),
|
||||
currentTimeProgresses: currentTimeProgressSelector(store.state),
|
||||
hasLoaded: store.state.hasLoaded,
|
||||
);
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
version: 0.0.3+3
|
||||
version: 0.0.4+4
|
||||
|
||||
environment:
|
||||
sdk: ">=2.7.0 <3.0.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user