Fixed Remaining Problems

This commit is contained in:
Andreas Fahrecker 2024-03-15 21:09:16 +01:00
parent 3085a295e5
commit 421d19f91f
27 changed files with 120 additions and 112 deletions

View File

@ -12,9 +12,9 @@ class TimeProgressTrackerApp extends StatelessWidget {
final Store<AppState> store; final Store<AppState> store;
const TimeProgressTrackerApp({ const TimeProgressTrackerApp({
Key key, super.key,
this.store, required this.store,
}) : super(key: key); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -23,15 +23,17 @@ class TimeProgressTrackerApp extends StatelessWidget {
child: MaterialApp( child: MaterialApp(
title: name, title: name,
theme: ThemeData( theme: ThemeData(
primarySwatch: Colors.indigo,
colorScheme: ColorScheme.fromSwatch(
primarySwatch: Colors.indigo, primarySwatch: Colors.indigo,
accentColor: Colors.indigoAccent, accentColor: Colors.indigoAccent,
),
brightness: Brightness.light, brightness: Brightness.light,
visualDensity: VisualDensity.adaptivePlatformDensity, visualDensity: VisualDensity.adaptivePlatformDensity,
), ),
initialRoute: HomeScreen.routeName, initialRoute: HomeScreen.routeName,
routes: { routes: {
HomeScreen.routeName: (BuildContext context) => HomeScreen.routeName: (BuildContext context) => const HomeScreen(),
const HomeScreen(),
ProgressDetailScreen.routeName: (BuildContext context) => ProgressDetailScreen.routeName: (BuildContext context) =>
const ProgressDetailScreen(), const ProgressDetailScreen(),
ProgressCreationScreen.routeName: (BuildContext context) => ProgressCreationScreen.routeName: (BuildContext context) =>

View File

@ -3,7 +3,7 @@ import 'dart:ui';
import 'package:time_progress_tracker/models/time_progress.dart'; import 'package:time_progress_tracker/models/time_progress.dart';
TimeProgress selectProgressById(List<TimeProgress> tpList, String id) => TimeProgress selectProgressById(List<TimeProgress> tpList, String id) =>
tpList.firstWhere((tp) => tp.id == id, orElse: null); tpList.firstWhere((tp) => tp.id == id, orElse: () => TimeProgress.initialDefault());
List<TimeProgress> selectActiveProgresses(List<TimeProgress> tpList) => List<TimeProgress> selectActiveProgresses(List<TimeProgress> tpList) =>
tpList.where((tp) => tp.hasStarted() && !tp.hasEnded()).toList(); tpList.where((tp) => tp.hasStarted() && !tp.hasEnded()).toList();

View File

@ -45,9 +45,6 @@ Middleware<AppState> _createLoadTimeProgressList(
repository.loadTimeProgressList().then((timeProgresses) { repository.loadTimeProgressList().then((timeProgresses) {
List<TimeProgress> timeProgressList = List<TimeProgress> timeProgressList =
timeProgresses.map<TimeProgress>(TimeProgress.fromEntity).toList(); timeProgresses.map<TimeProgress>(TimeProgress.fromEntity).toList();
if (timeProgressList == null) {
timeProgressList = [];
}
store.dispatch(TimeProgressListLoadedAction( store.dispatch(TimeProgressListLoadedAction(
timeProgressList, timeProgressList,
)); ));

View File

@ -1,5 +1,5 @@
class TimeProgressInvalidNameException implements Exception { class TimeProgressInvalidNameException implements Exception {
final invalidName; final String invalidName;
TimeProgressInvalidNameException(this.invalidName); TimeProgressInvalidNameException(this.invalidName);
@ -7,8 +7,8 @@ class TimeProgressInvalidNameException implements Exception {
} }
class TimeProgressStartTimeIsNotBeforeEndTimeException implements Exception { class TimeProgressStartTimeIsNotBeforeEndTimeException implements Exception {
final startTime; final DateTime startTime;
final endTime; final DateTime endTime;
TimeProgressStartTimeIsNotBeforeEndTimeException( TimeProgressStartTimeIsNotBeforeEndTimeException(
this.startTime, this.endTime); this.startTime, this.endTime);

View File

@ -8,9 +8,9 @@ class AppSettings {
final Duration duration; final Duration duration;
const AppSettings({ const AppSettings({
this.doneColor, required this.doneColor,
this.leftColor, required this.leftColor,
this.duration, required this.duration,
}); });
factory AppSettings.defaults() => const AppSettings( factory AppSettings.defaults() => const AppSettings(
@ -20,9 +20,9 @@ class AppSettings {
); );
AppSettings copyWith({ AppSettings copyWith({
Color doneColor, Color? doneColor,
Color leftColor, Color? leftColor,
Duration duration, Duration? duration,
}) => }) =>
AppSettings( AppSettings(
doneColor: doneColor ?? this.doneColor, doneColor: doneColor ?? this.doneColor,

View File

@ -12,18 +12,20 @@ class AppState {
{this.hasProgressesLoaded = false, {this.hasProgressesLoaded = false,
this.hasSettingsLoaded = false, this.hasSettingsLoaded = false,
this.timeProgressList = const [], this.timeProgressList = const [],
this.appSettings}); required this.appSettings});
factory AppState.initial() => factory AppState.initial() =>
AppState(hasProgressesLoaded: false, appSettings: AppSettings.defaults()); AppState(hasProgressesLoaded: false, appSettings: AppSettings.defaults());
AppState copyWith({ AppState copyWith({
bool hasLoaded, bool? hasLoaded,
List<TimeProgress> timeProgressList, List<TimeProgress>? timeProgressList,
AppSettings? appSettings,
}) { }) {
return AppState( return AppState(
hasProgressesLoaded: hasLoaded ?? hasProgressesLoaded, hasProgressesLoaded: hasLoaded ?? hasProgressesLoaded,
timeProgressList: timeProgressList ?? this.timeProgressList, timeProgressList: timeProgressList ?? this.timeProgressList,
appSettings: appSettings ?? this.appSettings,
); );
} }

View File

@ -10,7 +10,7 @@ class TimeProgress {
final DateTime startTime; final DateTime startTime;
final DateTime endTime; final DateTime endTime;
TimeProgress(this.name, this.startTime, this.endTime, {String id}) TimeProgress(this.name, this.startTime, this.endTime, {String? id})
: id = id ?? Uuid().generateV4(); : id = id ?? Uuid().generateV4();
factory TimeProgress.initialDefault() { factory TimeProgress.initialDefault() {
@ -23,7 +23,7 @@ class TimeProgress {
TimeProgress("", DateTime.now(), DateTime.now().add(duration)); TimeProgress("", DateTime.now(), DateTime.now().add(duration));
TimeProgress copyWith( TimeProgress copyWith(
{String id, String name, DateTime startTime, DateTime endTime}) => {String? id, String? name, DateTime? startTime, DateTime? endTime}) =>
TimeProgress( TimeProgress(
name ?? this.name, name ?? this.name,
startTime ?? this.startTime, startTime ?? this.startTime,
@ -83,21 +83,22 @@ class TimeProgress {
throw TimeProgressInvalidNameException(name); throw TimeProgressInvalidNameException(name);
} }
if (!TimeProgress.areTimesValid(startTime, endTime)) { if (!TimeProgress.areTimesValid(startTime, endTime)) {
throw TimeProgressStartTimeIsNotBeforeEndTimeException(startTime, endTime); throw TimeProgressStartTimeIsNotBeforeEndTimeException(
startTime, endTime);
} }
return TimeProgressEntity(id, name, startTime, endTime); return TimeProgressEntity(id, name, startTime, endTime);
} }
static TimeProgress fromEntity(TimeProgressEntity entity) => static TimeProgress fromEntity(TimeProgressEntity entity) =>
TimeProgress(entity.name, entity.startTime, entity.endTime, TimeProgress(entity.name, entity.startTime, entity.endTime,
id: entity.id ?? Uuid().generateV4()); id: entity.id);
static bool isValid(TimeProgress tp) => static bool isValid(TimeProgress tp) =>
TimeProgress.isNameValid(tp.name) && TimeProgress.isNameValid(tp.name) &&
TimeProgress.areTimesValid(tp.startTime, tp.endTime); TimeProgress.areTimesValid(tp.startTime, tp.endTime);
static bool isNameValid(String name) => static bool isNameValid(String name) =>
name != null && name != "" && name.length > 2 && name.length < 21; name != "" && name.length > 2 && name.length < 21;
static bool areTimesValid(DateTime startTime, DateTime endTime) => static bool areTimesValid(DateTime startTime, DateTime endTime) =>
startTime.isBefore(endTime); startTime.isBefore(endTime);

View File

@ -53,8 +53,8 @@ class AppSettingsEntity {
static AppSettingsEntity fromJson(Map<String, Object> json) => static AppSettingsEntity fromJson(Map<String, Object> json) =>
AppSettingsEntity( AppSettingsEntity(
json[_doneKey], json[_doneKey] as int,
json[_leftKey], json[_leftKey] as int,
json[_durationDaysKey], json[_durationDaysKey] as int,
); );
} }

View File

@ -54,7 +54,8 @@ class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
builder: (context, _ViewModel viewModel) { builder: (context, _ViewModel viewModel) {
initTimeProgress(viewModel.defaultDurationProgress); initTimeProgress(viewModel.defaultDurationProgress);
return ProgressEditorWidget( return ProgressEditorWidget(
timeProgress: timeProgressToCreate, timeProgress:
timeProgressToCreate ?? viewModel.defaultDurationProgress,
onTimeProgressChanged: onTimeProgressChanged, onTimeProgressChanged: onTimeProgressChanged,
); );
}), }),
@ -70,7 +71,8 @@ class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
heroTag: "createTimeProgressBTN", heroTag: "createTimeProgressBTN",
onPressed: _isProgressValid onPressed: _isProgressValid
? () { ? () {
vm.onAddTimeProgress(timeProgressToCreate); vm.onAddTimeProgress(
timeProgressToCreate ?? vm.defaultDurationProgress);
Navigator.pop(context); Navigator.pop(context);
} }
: null, : null,
@ -98,8 +100,8 @@ class _ViewModel {
final void Function(TimeProgress) onAddTimeProgress; final void Function(TimeProgress) onAddTimeProgress;
_ViewModel({ _ViewModel({
@required this.defaultDurationProgress, required this.defaultDurationProgress,
@required this.onAddTimeProgress, required this.onAddTimeProgress,
}); });
factory _ViewModel.create(Store<AppState> store) { factory _ViewModel.create(Store<AppState> store) {

View File

@ -62,7 +62,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
List<Widget> columnChildren = [ List<Widget> columnChildren = [
Expanded( Expanded(
child: ProgressViewWidget( child: ProgressViewWidget(
timeProgress: _editMode ? _editedProgress : tpVm.tp, timeProgress: _editMode ? _editedProgress ?? tpVm.tp : tpVm.tp,
doneColor: settingsVm.appSettings.doneColor, doneColor: settingsVm.appSettings.doneColor,
leftColor: settingsVm.appSettings.leftColor, leftColor: settingsVm.appSettings.leftColor,
)) ))
@ -70,7 +70,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
if (_editMode) { if (_editMode) {
columnChildren.add(Expanded( columnChildren.add(Expanded(
child: ProgressEditorWidget( child: ProgressEditorWidget(
timeProgress: _editedProgress, timeProgress: _editedProgress ?? tpVm.tp,
onTimeProgressChanged: _onEditedProgressChanged, onTimeProgressChanged: _onEditedProgressChanged,
))); )));
} }
@ -80,7 +80,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final ProgressDetailScreenArguments args = final ProgressDetailScreenArguments args =
ModalRoute.of(context).settings.arguments; ModalRoute.of(context)?.settings.arguments as ProgressDetailScreenArguments;
return Scaffold( return Scaffold(
appBar: AppBar( appBar: AppBar(
@ -106,7 +106,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
timeProgressId: args.id, timeProgressId: args.id,
loadedBuilder: (context, tpVm) { loadedBuilder: (context, tpVm) {
void saveEditedProgress() { void saveEditedProgress() {
tpVm.updateTimeProgress(_editedProgress); tpVm.updateTimeProgress(_editedProgress ?? tpVm.tp);
_switchEditMode(false); _switchEditMode(false);
} }
@ -119,7 +119,7 @@ class _ProgressDetailScreenState extends State<ProgressDetailScreen> {
return DetailScreenFloatingActionButtons( return DetailScreenFloatingActionButtons(
editMode: _editMode, editMode: _editMode,
originalProgress: tpVm.tp, originalProgress: tpVm.tp,
editedProgress: _editedProgress, editedProgress: _editedProgress ?? tpVm.tp,
isEditedProgressValid: _isEditedProgressValid, isEditedProgressValid: _isEditedProgressValid,
onEditProgress: () => _switchEditMode(true), onEditProgress: () => _switchEditMode(true),
onSaveEditedProgress: saveEditedProgress, onSaveEditedProgress: saveEditedProgress,

View File

@ -45,10 +45,11 @@ List<TimeProgress> pastTimeProgressesSelector(AppState state) =>
DateTime.now().millisecondsSinceEpoch) DateTime.now().millisecondsSinceEpoch)
.toList(); .toList();
TimeProgress timeProgressByIdSelector(AppState state, String id) { TimeProgress? timeProgressByIdSelector(AppState state, String id) {
if (state.timeProgressList.isEmpty) return null; if (state.timeProgressList.isEmpty) return null;
return state.timeProgressList return state.timeProgressList.firstWhere(
.firstWhere((timeProgress) => timeProgress.id == id, orElse: () => null); (timeProgress) => timeProgress.id == id,
orElse: () => TimeProgress.initialDefault());
} }
AppSettings appSettingsSelector(AppState state) { AppSettings appSettingsSelector(AppState state) {

View File

@ -6,11 +6,11 @@ class AppYesNoDialog extends StatelessWidget {
final void Function() onYesPressed; final void Function() onYesPressed;
const AppYesNoDialog({ const AppYesNoDialog({
Key key, super.key,
@required this.titleText, required this.titleText,
@required this.contentText, required this.contentText,
@required this.onYesPressed, required this.onYesPressed,
}) : super(key: key); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -18,15 +18,15 @@ class AppYesNoDialog extends StatelessWidget {
title: Text(titleText), title: Text(titleText),
content: Text(contentText), content: Text(contentText),
actions: <Widget>[ actions: <Widget>[
FlatButton( TextButton(
child: const Text("Yes"),
onPressed: onYesPressed, onPressed: onYesPressed,
child: const Text("Yes"),
), ),
FlatButton( TextButton(
child: const Text("No"),
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
}, },
child: const Text("No"),
) )
], ],
); );

View File

@ -7,11 +7,12 @@ class ColorPickerButton extends StatelessWidget {
final Color selectedColor; final Color selectedColor;
final void Function(Color) onColorPicked; final void Function(Color) onColorPicked;
const ColorPickerButton({super.key, const ColorPickerButton({
@required this.title, super.key,
@required this.dialogTitle, required this.title,
@required this.selectedColor, required this.dialogTitle,
@required this.onColorPicked, required this.selectedColor,
required this.onColorPicked,
}); });
@override @override
@ -35,9 +36,9 @@ class ColorPickerButton extends StatelessWidget {
); );
}, },
style: TextButton.styleFrom( style: TextButton.styleFrom(
primary: useBrightBackground(selectedColor) foregroundColor: useBrightBackground(selectedColor)
? appTheme.primaryTextTheme.labelLarge.color ? appTheme.primaryTextTheme.labelLarge?.color
: appTheme.textTheme.labelLarge.color, : appTheme.textTheme.labelLarge?.color,
backgroundColor: selectedColor, backgroundColor: selectedColor,
), ),
child: Text(title), child: Text(title),

View File

@ -3,12 +3,13 @@ import 'package:flutter/material.dart';
class DatePickerBtn extends StatelessWidget { class DatePickerBtn extends StatelessWidget {
final String leadingString; final String leadingString;
final DateTime pickedDate; final DateTime pickedDate;
final void Function(DateTime) onDatePicked; final void Function(DateTime?) onDatePicked;
const DatePickerBtn({super.key, const DatePickerBtn({
@required this.leadingString, super.key,
@required this.pickedDate, required this.leadingString,
@required this.onDatePicked, required this.pickedDate,
required this.onDatePicked,
}); });
void _onButtonPressed(BuildContext context) async { void _onButtonPressed(BuildContext context) async {
@ -26,8 +27,8 @@ class DatePickerBtn extends StatelessWidget {
return TextButton( return TextButton(
onPressed: () => _onButtonPressed(context), onPressed: () => _onButtonPressed(context),
style: TextButton.styleFrom( style: TextButton.styleFrom(
primary: appTheme.primaryTextTheme.labelLarge.color, foregroundColor: appTheme.primaryTextTheme.labelLarge?.color,
backgroundColor: appTheme.accentColor, backgroundColor: appTheme.colorScheme.secondary,
), ),
child: Text( child: Text(
"$leadingString ${pickedDate.toLocal().toString().split(" ")[0]}"), "$leadingString ${pickedDate.toLocal().toString().split(" ")[0]}"),

View File

@ -7,8 +7,8 @@ class SelectDurationBtn extends StatelessWidget {
const SelectDurationBtn({ const SelectDurationBtn({
super.key, super.key,
@required this.duration, required this.duration,
@required this.updateDuration, required this.updateDuration,
}); });
void _onPickerConfirm(Picker picker, List<int> values) { void _onPickerConfirm(Picker picker, List<int> values) {
@ -26,7 +26,7 @@ class SelectDurationBtn extends StatelessWidget {
]), ]),
hideHeader: false, hideHeader: false,
title: const Text("Default Duration"), title: const Text("Default Duration"),
selectedTextStyle: TextStyle(color: appTheme.accentColor), selectedTextStyle: TextStyle(color: appTheme.colorScheme.secondary),
onConfirm: _onPickerConfirm) onConfirm: _onPickerConfirm)
.showModal(context); .showModal(context);
@ -40,8 +40,8 @@ class SelectDurationBtn extends StatelessWidget {
return TextButton( return TextButton(
onPressed: () => _onButtonPressed(context, appTheme), onPressed: () => _onButtonPressed(context, appTheme),
style: TextButton.styleFrom( style: TextButton.styleFrom(
primary: appTheme.primaryTextTheme.labelLarge.color, foregroundColor: appTheme.primaryTextTheme.labelLarge?.color,
backgroundColor: appTheme.accentColor, backgroundColor: appTheme.colorScheme.secondary,
), ),
child: Text("$years Years $months Months $days Days")); child: Text("$years Years $months Months $days Days"));
} }

View File

@ -12,14 +12,14 @@ class DetailScreenFloatingActionButtons extends StatelessWidget {
const DetailScreenFloatingActionButtons({ const DetailScreenFloatingActionButtons({
super.key, super.key,
@required this.editMode, required this.editMode,
@required this.originalProgress, required this.originalProgress,
@required this.editedProgress, required this.editedProgress,
@required this.isEditedProgressValid, required this.isEditedProgressValid,
@required this.onEditProgress, required this.onEditProgress,
@required this.onSaveEditedProgress, required this.onSaveEditedProgress,
@required this.onCancelEditProgress, required this.onCancelEditProgress,
@required this.onDeleteProgress, required this.onDeleteProgress,
}); });
@override @override
@ -62,7 +62,7 @@ class DetailScreenFloatingActionButtons extends StatelessWidget {
child: FloatingActionButton( child: FloatingActionButton(
heroTag: heroTag:
editMode ? "saveEditedTimeProgressBTN" : "editTimeProgressBTN", editMode ? "saveEditedTimeProgressBTN" : "editTimeProgressBTN",
backgroundColor: editMode ? Colors.green : appTheme.accentColor, backgroundColor: editMode ? Colors.green : appTheme.colorScheme.secondary,
onPressed: editMode onPressed: editMode
? isEditedProgressValid ? isEditedProgressValid
? onSaveEditedProgress ? onSaveEditedProgress

View File

@ -2,12 +2,12 @@ import 'package:flutter/material.dart';
class HomeBottomNavBar extends StatelessWidget { class HomeBottomNavBar extends StatelessWidget {
final int currentIndex; final int currentIndex;
final Function onTap; final void Function(int)? onTap;
const HomeBottomNavBar({ const HomeBottomNavBar({
super.key, super.key,
@required this.currentIndex, required this.currentIndex,
@required this.onTap, required this.onTap,
}); });
@override @override

View File

@ -7,10 +7,10 @@ class ColorSettingsWidget extends StatelessWidget {
const ColorSettingsWidget({ const ColorSettingsWidget({
super.key, super.key,
@required this.doneColor, required this.doneColor,
@required this.leftColor, required this.leftColor,
@required this.updateDoneColor, required this.updateDoneColor,
@required this.updateLeftColor, required this.updateLeftColor,
}); });
@override @override

View File

@ -7,8 +7,8 @@ class DurationSettingsWidget extends StatelessWidget {
const DurationSettingsWidget({ const DurationSettingsWidget({
super.key, super.key,
@required this.duration, required this.duration,
@required this.updateDuration, required this.updateDuration,
}); });
@override @override

View File

@ -8,8 +8,8 @@ class ProgressEditorWidget extends StatefulWidget {
const ProgressEditorWidget({ const ProgressEditorWidget({
super.key, super.key,
@required this.timeProgress, required this.timeProgress,
@required this.onTimeProgressChanged, required this.onTimeProgressChanged,
}); });
@override @override
@ -32,7 +32,10 @@ class _ProgressEditorWidgetState extends State<ProgressEditorWidget> {
}); });
} }
void _onStartDateChanged(DateTime newStartDate) { void _onStartDateChanged(DateTime? newStartDate) {
if (newStartDate == null) {
return;
}
TimeProgress newProgress = TimeProgress newProgress =
widget.timeProgress.copyWith(startTime: newStartDate); widget.timeProgress.copyWith(startTime: newStartDate);
widget.onTimeProgressChanged( widget.onTimeProgressChanged(
@ -43,7 +46,10 @@ class _ProgressEditorWidgetState extends State<ProgressEditorWidget> {
}); });
} }
void _onEndDateChanged(DateTime newEndDate) { void _onEndDateChanged(DateTime? newEndDate) {
if (newEndDate == null) {
return;
}
TimeProgress newProgress = TimeProgress newProgress =
widget.timeProgress.copyWith(endTime: newEndDate); widget.timeProgress.copyWith(endTime: newEndDate);
widget.onTimeProgressChanged( widget.onTimeProgressChanged(

View File

@ -19,9 +19,9 @@ class ProgressListTile extends StatelessWidget {
final Color doneColor, leftColor; final Color doneColor, leftColor;
const ProgressListTile({super.key, const ProgressListTile({super.key,
@required this.timeProgress, required this.timeProgress,
@required this.doneColor, required this.doneColor,
@required this.leftColor, required this.leftColor,
}); });
Widget _renderSubtitle(BuildContext context) { Widget _renderSubtitle(BuildContext context) {

View File

@ -8,9 +8,9 @@ class ProgressListView extends StatelessWidget {
const ProgressListView({ const ProgressListView({
super.key, super.key,
@required this.timeProgressList, required this.timeProgressList,
@required this.doneColor, required this.doneColor,
@required this.leftColor, required this.leftColor,
}); });
List<Widget> _renderListViewChildren() { List<Widget> _renderListViewChildren() {

View File

@ -10,9 +10,9 @@ class ProgressViewWidget extends StatelessWidget {
const ProgressViewWidget({ const ProgressViewWidget({
super.key, super.key,
@required this.timeProgress, required this.timeProgress,
@required this.doneColor, required this.doneColor,
@required this.leftColor, required this.leftColor,
}); });
@override @override

View File

@ -10,7 +10,7 @@ class SettingsStoreConnector extends StatelessWidget {
const SettingsStoreConnector({ const SettingsStoreConnector({
super.key, super.key,
@required this.loadedBuilder, required this.loadedBuilder,
}); });
@override @override

View File

@ -10,7 +10,7 @@ class TimeProgressListStoreConnector extends StatelessWidget {
const TimeProgressListStoreConnector({ const TimeProgressListStoreConnector({
super.key, super.key,
@required this.loadedBuilder, required this.loadedBuilder,
}); });
@override @override

View File

@ -13,8 +13,8 @@ class TimeProgressStoreConnector extends StatelessWidget {
const TimeProgressStoreConnector({ const TimeProgressStoreConnector({
super.key, super.key,
@required this.timeProgressId, required this.timeProgressId,
@required this.loadedBuilder, required this.loadedBuilder,
}); });
@override @override
@ -29,11 +29,6 @@ class TimeProgressStoreConnector extends StatelessWidget {
child: CircularProgressIndicator(), child: CircularProgressIndicator(),
); );
} }
if (vm.tp == null) {
return const Center(
child: Text("Error Invalid Time Progress"),
);
}
return loadedBuilder(context, vm); return loadedBuilder(context, vm);
}, },
); );

View File

@ -5,7 +5,7 @@ class MaterialTesterWidget extends StatelessWidget {
const MaterialTesterWidget({ const MaterialTesterWidget({
super.key, super.key,
@required this.widget, required this.widget,
}); });
@override @override