diff --git a/README.md b/README.md index 012e59a..833c370 100644 --- a/README.md +++ b/README.md @@ -9,17 +9,13 @@ including their current percentages. ## Current State of the repo. -Currently, the code in this branch is pretty messed up. Since I wrote that application from a -prototype which, was developed as my first flutter project and in a very short time. -Since, then most of the work that went into this project was cleanup work. +Now the repo is mostly cleaned up. -Currently I am working on a clean codebase in the feature/platform-widget branch. - -At this state, the base screens of the app are located in lib/screens, -all other ui widgets are located in li/widgets, -the model classes are located in lib/model, -files related to persisting the data are in lib/persistence, -and redux related files are spread over lib/actions lib/middleware lib/reducers and lib/reducers. +My own model classes are located in lib/models. +The logic for converting the models to json format and saving them is in lib/persistence. +All redux logic, including store connector widgets are in lib/redux. +The Flutter UI widgets are located in lib/ui. +Other stuff is in lib/utils or directly in lib. - [Google Play](https://play.google.com/store/apps/details?id=com.fahrecker.time_progress_calculator) diff --git a/lib/actions/actions.dart b/lib/actions/actions.dart deleted file mode 100644 index 7e3409e..0000000 --- a/lib/actions/actions.dart +++ /dev/null @@ -1,58 +0,0 @@ -import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/models/app_settings.dart'; -import 'package:time_progress_tracker/redux/app_state.dart'; -import 'package:time_progress_tracker/models/time_progress.dart'; - -class LoadSettingsAction {} - -class AppSettingsLoadedActions { - final AppSettings appSettings; - - AppSettingsLoadedActions(this.appSettings); -} - -class UpdateAppSettingsActions { - final AppSettings appSettings; - - UpdateAppSettingsActions(this.appSettings); -} - -class AppSettingsNotLoadedAction {} - -class LoadTimeProgressListAction {} - -class TimeProgressListLoadedAction { - final List timeProgressList; - - TimeProgressListLoadedAction(this.timeProgressList); -} - -class TimeProgressListNotLoadedAction {} - -class AddTimeProgressAction { - final TimeProgress timeProgress; - - AddTimeProgressAction(this.timeProgress); -} - -class UpdateTimeProgressAction { - final String id; - final TimeProgress updatedTimeProgress; - - UpdateTimeProgressAction(this.id, this.updatedTimeProgress); -} - -class DeleteTimeProgressAction { - final String id; - - DeleteTimeProgressAction(this.id); -} - -void loadTimeProgressListIfUnloaded(Store store) { - if (!store.state.hasProgressesLoaded) - store.dispatch(LoadTimeProgressListAction()); -} - -void loadSettingsIfUnloaded(Store store) { - if (!store.state.hasSettingsLoaded) store.dispatch(LoadSettingsAction()); -} diff --git a/lib/app.dart b/lib/app.dart index 2d800f3..82445b9 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -4,7 +4,7 @@ import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; -import 'package:time_progress_tracker/screens/dashboard_screen.dart'; +import 'package:time_progress_tracker/ui/screens/dashboard_screen.dart'; import 'package:time_progress_tracker/utils/color_utils.dart'; class TimeProgressTrackerApp extends StatelessWidget { diff --git a/lib/main.dart b/lib/main.dart index 7e632c3..6e44222 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,11 +2,11 @@ import 'package:flutter/material.dart'; import 'package:redux/redux.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:time_progress_tracker/app.dart'; -import 'package:time_progress_tracker/middleware/store_middleware.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; import 'package:time_progress_tracker/persistence/app_settings.dart'; -import 'package:time_progress_tracker/persistence/time_progress_repository.dart'; -import 'package:time_progress_tracker/reducers/app_state_reducer.dart'; +import 'package:time_progress_tracker/persistence/time_progress.dart'; +import 'package:time_progress_tracker/redux/reducers/app_state_reducer.dart'; +import 'package:time_progress_tracker/redux/store_middleware.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/models/time_progress.dart b/lib/models/time_progress.dart index dde845d..dfc387e 100644 --- a/lib/models/time_progress.dart +++ b/lib/models/time_progress.dart @@ -1,6 +1,6 @@ import 'package:meta/meta.dart'; import 'package:time_progress_tracker/models/app_exceptions.dart'; -import 'package:time_progress_tracker/persistence/time_progress_entity.dart'; +import 'package:time_progress_tracker/persistence/time_progress.dart'; import 'package:time_progress_tracker/uuid.dart'; @immutable diff --git a/lib/persistence/app_settings.dart b/lib/persistence/app_settings.dart index f83a2fe..fce1891 100644 --- a/lib/persistence/app_settings.dart +++ b/lib/persistence/app_settings.dart @@ -1,16 +1,14 @@ -import 'dart:convert'; - import 'package:shared_preferences/shared_preferences.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/persistence/repository.dart'; -class AppSettingsRepository { +class AppSettingsRepository extends Repository { static const String _key = "app_settings"; - final SharedPreferences prefs; - final JsonCodec codec; - AppSettingsRepository(this.prefs, {this.codec = json}); + AppSettingsRepository(SharedPreferences prefs) : super(prefs); - Future loadAppSettings() { + @override + Future load() { final String jsonString = this.prefs.getString(_key); if (jsonString == null) return Future.value(AppSettingsEntity.defaults()); @@ -18,7 +16,8 @@ class AppSettingsRepository { AppSettingsEntity.fromJson(codec.decode(jsonString))); } - Future saveAppSettings(AppSettingsEntity appSettings) => + @override + Future save(AppSettingsEntity appSettings) => this.prefs.setString(_key, codec.encode(appSettings)); } diff --git a/lib/persistence/repository.dart b/lib/persistence/repository.dart new file mode 100644 index 0000000..8e0f718 --- /dev/null +++ b/lib/persistence/repository.dart @@ -0,0 +1,14 @@ +import 'dart:convert'; + +import 'package:shared_preferences/shared_preferences.dart'; + +abstract class Repository { + final SharedPreferences prefs; + final JsonCodec codec; + + Repository(this.prefs, {this.codec = json}); + + Future load(); + + Future save(T e); +} diff --git a/lib/persistence/time_progress.dart b/lib/persistence/time_progress.dart new file mode 100644 index 0000000..0948219 --- /dev/null +++ b/lib/persistence/time_progress.dart @@ -0,0 +1,74 @@ +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:time_progress_tracker/persistence/repository.dart'; + +class TimeProgressRepository extends Repository> { + static const String _key = "time_progress_repo"; + + TimeProgressRepository(SharedPreferences prefs) : super(prefs); + + @override + Future> load() { + final String jsonString = this.prefs.getString(_key); + if (jsonString == null) { + return Future>.value([]); + } + return Future>.value(codec + .decode(jsonString)["timers"] + .cast>() + .map(TimeProgressEntity.fromJson) + .toList(growable: false)); + } + + @override + Future save(List timeProgressList) { + final String jsonString = codec.encode( + {"timers": timeProgressList.map((timer) => timer.toJson()).toList()}); + return this.prefs.setString(_key, jsonString); + } +} + +class TimeProgressEntity { + static const String _idKey = "id", + _nameKey = "name", + _startTimeKey = "startTime", + _endTimeKey = "endTime"; + final String id; + final String name; + final DateTime startTime; + final DateTime endTime; + + TimeProgressEntity(this.id, this.name, this.startTime, this.endTime); + + @override + int get hashCode => + id.hashCode ^ name.hashCode ^ startTime.hashCode ^ endTime.hashCode; + + @override + bool operator ==(Object other) => + identical(this, other) || + other is TimeProgressEntity && + runtimeType == other.runtimeType && + id == other.id && + name == other.name && + startTime == other.startTime && + endTime == other.endTime; + + Map toJson() { + return { + _idKey: id, + _nameKey: name, + _startTimeKey: startTime.millisecondsSinceEpoch, + _endTimeKey: endTime.millisecondsSinceEpoch + }; + } + + static TimeProgressEntity fromJson(Map json) { + final String id = json[_idKey] as String; + final String name = json[_nameKey] as String; + final DateTime startTime = + DateTime.fromMillisecondsSinceEpoch(json[_startTimeKey] as int); + final DateTime endTime = + DateTime.fromMillisecondsSinceEpoch(json[_endTimeKey] as int); + return TimeProgressEntity(id, name, startTime, endTime); + } +} diff --git a/lib/persistence/time_progress_entity.dart b/lib/persistence/time_progress_entity.dart deleted file mode 100644 index ebdfc6c..0000000 --- a/lib/persistence/time_progress_entity.dart +++ /dev/null @@ -1,41 +0,0 @@ -class TimeProgressEntity { - final String id; - final String name; - final DateTime startTime; - final DateTime endTime; - - TimeProgressEntity(this.id, this.name, this.startTime, this.endTime); - - @override - int get hashCode => - id.hashCode ^ name.hashCode ^ startTime.hashCode ^ endTime.hashCode; - - @override - bool operator ==(Object other) => - identical(this, other) || - other is TimeProgressEntity && - runtimeType == other.runtimeType && - id == other.id && - name == other.name && - startTime == other.startTime && - endTime == other.endTime; - - Map toJson() { - return { - "id": id, - "name": name, - "startTime": startTime.millisecondsSinceEpoch, - "endTime": endTime.millisecondsSinceEpoch - }; - } - - static TimeProgressEntity fromJson(Map json) { - final String id = json["id"] as String; - final String name = json["name"] as String; - final DateTime startTime = - DateTime.fromMillisecondsSinceEpoch(json["startTime"] as int); - final DateTime endTime = - DateTime.fromMillisecondsSinceEpoch(json["endTime"] as int); - return TimeProgressEntity(id, name, startTime, endTime); - } -} diff --git a/lib/persistence/time_progress_repository.dart b/lib/persistence/time_progress_repository.dart deleted file mode 100644 index 0b87123..0000000 --- a/lib/persistence/time_progress_repository.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'dart:convert'; -import 'package:shared_preferences/shared_preferences.dart'; -import 'package:time_progress_tracker/persistence/time_progress_entity.dart'; - -class TimeProgressRepository { - static const String _key = "time_progress_repo"; - final SharedPreferences prefs; - final JsonCodec codec; - - TimeProgressRepository(this.prefs, {this.codec = json}); - - Future> loadTimeProgressList() { - final String jsonString = this.prefs.getString(_key); - if (jsonString == null) { - return Future>.value([]); - } - return Future>.value(codec - .decode(jsonString)["timers"] - .cast>() - .map(TimeProgressEntity.fromJson) - .toList(growable: false)); - } - - Future saveTimeProgressList(List timeProgressList) { - final String jsonString = codec.encode( - {"timers": timeProgressList.map((timer) => timer.toJson()).toList()}); - return this.prefs.setString(_key, jsonString); - } -} diff --git a/lib/reducers/app_state_reducer.dart b/lib/reducers/app_state_reducer.dart deleted file mode 100644 index 48b6f8e..0000000 --- a/lib/reducers/app_state_reducer.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; -import 'package:time_progress_tracker/models/app_settings.dart'; -import 'package:time_progress_tracker/redux/app_state.dart'; -import 'package:time_progress_tracker/reducers/has_loaded_reducer.dart'; -import 'package:time_progress_tracker/reducers/time_progress_list_reducer.dart'; - -AppState appStateReducer(AppState state, dynamic action) { - return AppState( - hasSettingsLoaded: - hasSettingsLoadedReducer(state.hasSettingsLoaded, action), - hasProgressesLoaded: - hasProgressesLoadedReducer(state.hasProgressesLoaded, action), - timeProgressList: timeProgressListReducer(state.timeProgressList, action), - appSettings: appSettingsReducers(state.appSettings, action), - ); -} - -final appSettingsReducers = combineReducers([ - TypedReducer(_loadAppSettings), - TypedReducer(_updateAppSettings), - TypedReducer(_setDefaultSettings) -]); - -AppSettings _loadAppSettings( - AppSettings appSettings, AppSettingsLoadedActions nS) => - nS.appSettings; - -AppSettings _setDefaultSettings( - AppSettings appSettings, AppSettingsNotLoadedAction action) => - AppSettings.defaults(); - -AppSettings _updateAppSettings( - AppSettings appSettings, UpdateAppSettingsActions nS) => - nS.appSettings; diff --git a/lib/reducers/has_loaded_reducer.dart b/lib/reducers/has_loaded_reducer.dart deleted file mode 100644 index 603b3fb..0000000 --- a/lib/reducers/has_loaded_reducer.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; - -final hasProgressesLoadedReducer = combineReducers([ - TypedReducer(_setProgressesLoaded), - TypedReducer(_setProgressesUnloaded) -]); - -bool _setProgressesLoaded(bool hasLoaded, TimeProgressListLoadedAction action) { - return true; -} - -bool _setProgressesUnloaded(bool hasLoaded, TimeProgressListNotLoadedAction action) { - return false; -} - -final hasSettingsLoadedReducer = combineReducers([ - TypedReducer(_setSettingsLoaded), - TypedReducer(_setSettingsUnloaded) -]); - -bool _setSettingsLoaded(bool hasLoaded, AppSettingsLoadedActions action) { - return true; -} - -bool _setSettingsUnloaded(bool hasLoaded, AppSettingsNotLoadedAction action) { - return false; -} \ No newline at end of file diff --git a/lib/reducers/time_progress_list_reducer.dart b/lib/reducers/time_progress_list_reducer.dart deleted file mode 100644 index 7e643a4..0000000 --- a/lib/reducers/time_progress_list_reducer.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; -import 'package:time_progress_tracker/models/time_progress.dart'; - -final timeProgressListReducer = combineReducers>([ - TypedReducer, TimeProgressListLoadedAction>( - _setLoadedTimeProgressList), - TypedReducer, TimeProgressListNotLoadedAction>( - _setEmptyTimeProgressList), - TypedReducer, AddTimeProgressAction>(_addTimeProgress), - TypedReducer, UpdateTimeProgressAction>( - _updateTimeProgress), - TypedReducer, DeleteTimeProgressAction>(_deleteTimeProgress), -]); - -List _setLoadedTimeProgressList( - List timeProgressList, TimeProgressListLoadedAction action) { - return action.timeProgressList; -} - -List _setEmptyTimeProgressList( - List timeProgressList, TimeProgressListNotLoadedAction action) { - return []; -} - -List _addTimeProgress( - List timeProgressList, AddTimeProgressAction action) { - return List.from(timeProgressList) - ..add(action.timeProgress) - ..toList(growable: false); -} - -List _updateTimeProgress( - List timeProgressList, UpdateTimeProgressAction action) { - return timeProgressList - .map((timeProgress) => timeProgress.id == action.id - ? action.updatedTimeProgress - : timeProgress) - .toList(growable: false); -} - -List _deleteTimeProgress( - List timeProgressList, DeleteTimeProgressAction action) { - return timeProgressList.where((timeProgress) => timeProgress.id != action.id).toList(growable: false); -} diff --git a/lib/redux/actions/app_settings_actions.dart b/lib/redux/actions/app_settings_actions.dart new file mode 100644 index 0000000..5ee6c55 --- /dev/null +++ b/lib/redux/actions/app_settings_actions.dart @@ -0,0 +1,14 @@ +import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/redux/actions/redux_actions.dart'; + +class LoadAppSettingsAction {} + +class AppSettingsLoadedActions extends AppSettingsAction with BoolAction { + AppSettingsLoadedActions(AppSettings appSettings) : super(appSettings); +} + +class UpdateAppSettingsActions extends AppSettingsAction { + UpdateAppSettingsActions(AppSettings appSettings) : super(appSettings); +} + +class AppSettingsNotLoadedAction extends BoolAction {} diff --git a/lib/redux/actions/redux_actions.dart b/lib/redux/actions/redux_actions.dart new file mode 100644 index 0000000..09e6926 --- /dev/null +++ b/lib/redux/actions/redux_actions.dart @@ -0,0 +1,16 @@ +import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/models/time_progress.dart'; + +abstract class BoolAction {} + +abstract class AppSettingsAction { + final AppSettings appSettings; + + AppSettingsAction(this.appSettings); +} + +abstract class TimeProgressAction { + final TimeProgress timeProgress; + + TimeProgressAction(this.timeProgress); +} diff --git a/lib/redux/actions/time_progress_actions.dart b/lib/redux/actions/time_progress_actions.dart new file mode 100644 index 0000000..4d3b243 --- /dev/null +++ b/lib/redux/actions/time_progress_actions.dart @@ -0,0 +1,29 @@ +import 'package:time_progress_tracker/models/time_progress.dart'; +import 'package:time_progress_tracker/redux/actions/redux_actions.dart'; + +class LoadTimeProgressListAction {} + +class TimeProgressListLoadedAction extends BoolAction { + final List timeProgressList; + + TimeProgressListLoadedAction(this.timeProgressList); +} + +class TimeProgressListNotLoadedAction extends BoolAction {} + +class AddTimeProgressAction extends TimeProgressAction { + AddTimeProgressAction(TimeProgress timeProgress) : super(timeProgress); +} + +class UpdateTimeProgressAction extends TimeProgressAction { + final String id; + + UpdateTimeProgressAction(this.id, TimeProgress timeProgress) + : super(timeProgress); +} + +class DeleteTimeProgressAction { + final String id; + + DeleteTimeProgressAction(this.id); +} diff --git a/lib/redux/reducers/app_state_reducer.dart b/lib/redux/reducers/app_state_reducer.dart new file mode 100644 index 0000000..f879db8 --- /dev/null +++ b/lib/redux/reducers/app_state_reducer.dart @@ -0,0 +1,14 @@ +import 'package:time_progress_tracker/redux/app_state.dart'; +import 'package:time_progress_tracker/redux/reducers/bool_reducers.dart'; +import 'package:time_progress_tracker/redux/reducers/model_reducers.dart'; + +AppState appStateReducer(AppState state, dynamic action) { + return AppState( + hasSettingsLoaded: + hasSettingsLoadedReducer(state.hasSettingsLoaded, action), + hasProgressesLoaded: + hasProgressesLoadedReducer(state.hasProgressesLoaded, action), + timeProgressList: timeProgressListReducer(state.timeProgressList, action), + appSettings: appSettingsReducers(state.appSettings, action), + ); +} diff --git a/lib/redux/reducers/bool_reducers.dart b/lib/redux/reducers/bool_reducers.dart new file mode 100644 index 0000000..b4c819f --- /dev/null +++ b/lib/redux/reducers/bool_reducers.dart @@ -0,0 +1,22 @@ +import 'package:redux/redux.dart'; +import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; +import 'package:time_progress_tracker/redux/actions/redux_actions.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; + +final hasProgressesLoadedReducer = combineReducers([ + TypedReducer(_setTrue), + TypedReducer(_setFalse) +]); + +final hasSettingsLoadedReducer = combineReducers([ + TypedReducer(_setTrue), + TypedReducer(_setFalse) +]); + +bool _setTrue(bool value, BoolAction action) { + return true; +} + +bool _setFalse(bool value, BoolAction action) { + return false; +} diff --git a/lib/redux/reducers/model_reducers.dart b/lib/redux/reducers/model_reducers.dart new file mode 100644 index 0000000..9613ac0 --- /dev/null +++ b/lib/redux/reducers/model_reducers.dart @@ -0,0 +1,62 @@ +import 'package:redux/redux.dart'; +import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/models/time_progress.dart'; +import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; +import 'package:time_progress_tracker/redux/actions/redux_actions.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; + +final timeProgressListReducer = combineReducers>([ + TypedReducer, TimeProgressListLoadedAction>( + _setLoadedTimeProgressList), + TypedReducer, TimeProgressListNotLoadedAction>( + _setEmptyTimeProgressList), + TypedReducer, AddTimeProgressAction>(_addTimeProgress), + TypedReducer, UpdateTimeProgressAction>( + _updateTimeProgress), + TypedReducer, DeleteTimeProgressAction>( + _deleteTimeProgress), +]); + +List _setEmptyTimeProgressList( + List timeProgressList, + TimeProgressListNotLoadedAction action) { + return []; +} + +List _setLoadedTimeProgressList( + List timeProgressList, TimeProgressListLoadedAction action) { + return action.timeProgressList; +} + +List _addTimeProgress( + List timeProgressList, AddTimeProgressAction action) => + List.from(timeProgressList) + ..add(action.timeProgress) + ..toList(growable: false); + +List _updateTimeProgress( + List timeProgressList, UpdateTimeProgressAction action) => + timeProgressList + .map((timeProgress) => + timeProgress.id == action.id ? action.timeProgress : timeProgress) + .toList(growable: false); + +List _deleteTimeProgress( + List timeProgressList, DeleteTimeProgressAction action) => + timeProgressList + .where((timeProgress) => timeProgress.id != action.id) + .toList(growable: false); + +final appSettingsReducers = combineReducers([ + TypedReducer(_updateAppSettings), + TypedReducer(_updateAppSettings), + TypedReducer(_setDefaultSettings) +]); + +AppSettings _setDefaultSettings( + AppSettings appSettings, AppSettingsNotLoadedAction action) => + AppSettings.defaults(); + +AppSettings _updateAppSettings( + AppSettings appSettings, AppSettingsAction action) => + action.appSettings; diff --git a/lib/selectors/time_progress_selectors.dart b/lib/redux/redux_selectors.dart similarity index 100% rename from lib/selectors/time_progress_selectors.dart rename to lib/redux/redux_selectors.dart diff --git a/lib/widgets/store_connectors/settings_store_connector.dart b/lib/redux/store_connectors/settings_store_connector.dart similarity index 92% rename from lib/widgets/store_connectors/settings_store_connector.dart rename to lib/redux/store_connectors/settings_store_connector.dart index c060d95..3633962 100644 --- a/lib/widgets/store_connectors/settings_store_connector.dart +++ b/lib/redux/store_connectors/settings_store_connector.dart @@ -1,9 +1,10 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; +import 'package:time_progress_tracker/utils/helper_functions.dart'; class SettingsStoreConnector extends StatelessWidget { final Widget Function(BuildContext, SettingsViewModel) loadedBuilder; diff --git a/lib/widgets/store_connectors/time_progress_list_store_connector.dart b/lib/redux/store_connectors/time_progress_list_store_connector.dart similarity index 94% rename from lib/widgets/store_connectors/time_progress_list_store_connector.dart rename to lib/redux/store_connectors/time_progress_list_store_connector.dart index cd1ac44..18d7d8e 100644 --- a/lib/widgets/store_connectors/time_progress_list_store_connector.dart +++ b/lib/redux/store_connectors/time_progress_list_store_connector.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; +import 'package:time_progress_tracker/utils/helper_functions.dart'; class TimeProgressListStoreConnector extends StatelessWidget { final Widget Function(BuildContext, TimeProgressListViewModel) loadedBuilder; diff --git a/lib/widgets/store_connectors/time_progress_store_connector.dart b/lib/redux/store_connectors/time_progress_store_connector.dart similarity index 96% rename from lib/widgets/store_connectors/time_progress_store_connector.dart rename to lib/redux/store_connectors/time_progress_store_connector.dart index e164c94..fa1f409 100644 --- a/lib/widgets/store_connectors/time_progress_store_connector.dart +++ b/lib/redux/store_connectors/time_progress_store_connector.dart @@ -1,7 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; diff --git a/lib/middleware/store_middleware.dart b/lib/redux/store_middleware.dart similarity index 80% rename from lib/middleware/store_middleware.dart rename to lib/redux/store_middleware.dart index 754b32a..efb4d40 100644 --- a/lib/middleware/store_middleware.dart +++ b/lib/redux/store_middleware.dart @@ -1,12 +1,12 @@ import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; -import 'package:time_progress_tracker/redux/app_state.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; import 'package:time_progress_tracker/persistence/app_settings.dart'; -import 'package:time_progress_tracker/persistence/time_progress_entity.dart'; -import 'package:time_progress_tracker/persistence/time_progress_repository.dart'; -import 'package:time_progress_tracker/selectors/time_progress_selectors.dart'; +import 'package:time_progress_tracker/persistence/time_progress.dart'; +import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; +import 'package:time_progress_tracker/redux/app_state.dart'; +import 'package:time_progress_tracker/redux/redux_selectors.dart'; List> createStoreMiddleware( TimeProgressRepository progressRepo, AppSettingsRepository settingsRepo) { @@ -21,7 +21,7 @@ List> createStoreMiddleware( TypedMiddleware(saveTimeProgressList), TypedMiddleware(saveTimeProgressList), TypedMiddleware(saveTimeProgressList), - TypedMiddleware(loadSettings), + TypedMiddleware(loadSettings), TypedMiddleware(saveSettings) ]; } @@ -31,7 +31,7 @@ Middleware _createSaveTimeProgressList( return (Store store, dynamic action, NextDispatcher next) { next(action); - repository.saveTimeProgressList( + repository.save( timeProgressListSelector(store.state) .map((timeProgress) => timeProgress.toEntity()) .toList(growable: false), @@ -42,7 +42,7 @@ Middleware _createSaveTimeProgressList( Middleware _createLoadTimeProgressList( TimeProgressRepository repository) { return (Store store, dynamic action, NextDispatcher next) { - repository.loadTimeProgressList().then((timeProgresses) { + repository.load().then((timeProgresses) { List timeProgressList = timeProgresses.map(TimeProgress.fromEntity).toList(); if (timeProgressList == null) { @@ -58,12 +58,12 @@ Middleware _createLoadTimeProgressList( Middleware _createSaveAppSettings(AppSettingsRepository repo) => (Store store, dynamic action, NextDispatcher next) { next(action); - repo.saveAppSettings(store.state.appSettings.toEntity()); + repo.save(store.state.appSettings.toEntity()); }; Middleware _createLoadAppSettings(AppSettingsRepository repo) => (Store store, dynamic action, NextDispatcher next) { - repo.loadAppSettings().then((appSettings) { + repo.load().then((appSettings) { store.dispatch( AppSettingsLoadedActions(AppSettings.fromEntity(appSettings))); }); diff --git a/lib/screens/home_screen.dart b/lib/screens/home_screen.dart deleted file mode 100644 index 9b5d2d9..0000000 --- a/lib/screens/home_screen.dart +++ /dev/null @@ -1,47 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/widgets/buttons/create_progress_button.dart'; -import 'package:time_progress_tracker/widgets/home/home_bottom_navbar.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/home_active_progresses_tab.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/home_inactive_progresses_tab.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/home_settings_tab.dart'; - -class HomeScreen extends StatefulWidget { - static const routeName = "/home"; - static const title = "Time Progress Tracker"; - - @override - State createState() { - return _HomeScreenState(); - } -} - -class _HomeScreenState extends State { - int _currentIndex = 0; - final List _children = [ - HomeActiveProgressesTab(), - HomeInactiveProgressesTab(), - HomeSettingsTab(), - ]; - - void onBottomTabTapped(int index) { - setState(() { - _currentIndex = index; - }); - } - - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(HomeScreen.title), - ), - body: _children[_currentIndex], - floatingActionButtonLocation: FloatingActionButtonLocation.endFloat, - floatingActionButton: _currentIndex != 2 ? CreateProgressButton() : null, - bottomNavigationBar: HomeBottomNavBar( - currentIndex: _currentIndex, - onTap: onBottomTabTapped, - ), - ); - } -} diff --git a/lib/widgets/app_yes_no_dialog_widget.dart b/lib/ui/app_yes_no_dialog_widget.dart similarity index 100% rename from lib/widgets/app_yes_no_dialog_widget.dart rename to lib/ui/app_yes_no_dialog_widget.dart diff --git a/lib/widgets/buttons/color_picker_btn.dart b/lib/ui/buttons/color_picker_btn.dart similarity index 100% rename from lib/widgets/buttons/color_picker_btn.dart rename to lib/ui/buttons/color_picker_btn.dart diff --git a/lib/widgets/buttons/create_progress_button.dart b/lib/ui/buttons/create_progress_button.dart similarity index 84% rename from lib/widgets/buttons/create_progress_button.dart rename to lib/ui/buttons/create_progress_button.dart index 5d125f3..48eaeaf 100644 --- a/lib/widgets/buttons/create_progress_button.dart +++ b/lib/ui/buttons/create_progress_button.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/screens/progress_creation_screen.dart'; +import 'package:time_progress_tracker/ui/screens/progress_creation_screen.dart'; class CreateProgressButton extends StatelessWidget { final String _heroTag = "createProgressBTN"; diff --git a/lib/widgets/buttons/date_picker_btn.dart b/lib/ui/buttons/date_picker_btn.dart similarity index 100% rename from lib/widgets/buttons/date_picker_btn.dart rename to lib/ui/buttons/date_picker_btn.dart diff --git a/lib/widgets/buttons/select_duration_btn.dart b/lib/ui/buttons/select_duration_btn.dart similarity index 100% rename from lib/widgets/buttons/select_duration_btn.dart rename to lib/ui/buttons/select_duration_btn.dart diff --git a/lib/widgets/detail_screen_floating_action_buttons.dart b/lib/ui/detail_screen_floating_action_buttons.dart similarity index 97% rename from lib/widgets/detail_screen_floating_action_buttons.dart rename to lib/ui/detail_screen_floating_action_buttons.dart index 00dc4e7..8180687 100644 --- a/lib/widgets/detail_screen_floating_action_buttons.dart +++ b/lib/ui/detail_screen_floating_action_buttons.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/app_yes_no_dialog_widget.dart'; +import 'package:time_progress_tracker/ui/app_yes_no_dialog_widget.dart'; class DetailScreenFloatingActionButtons extends StatelessWidget { final bool editMode, isEditedProgressValid; diff --git a/lib/widgets/progress_editor_widget.dart b/lib/ui/progress/progress_editor_widget.dart similarity index 97% rename from lib/widgets/progress_editor_widget.dart rename to lib/ui/progress/progress_editor_widget.dart index 71f9aaa..91293e8 100644 --- a/lib/widgets/progress_editor_widget.dart +++ b/lib/ui/progress/progress_editor_widget.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/buttons/date_picker_btn.dart'; +import 'package:time_progress_tracker/ui/buttons/date_picker_btn.dart'; class ProgressEditorWidget extends StatefulWidget { final TimeProgress timeProgress; diff --git a/lib/widgets/progress_list_view/progress_list_item.dart b/lib/ui/progress/progress_list_item.dart similarity index 96% rename from lib/widgets/progress_list_view/progress_list_item.dart rename to lib/ui/progress/progress_list_item.dart index d6519c9..4687cdb 100644 --- a/lib/widgets/progress_list_view/progress_list_item.dart +++ b/lib/ui/progress/progress_list_item.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/screens/progress_detail_screen.dart'; +import 'package:time_progress_tracker/ui/screens/progress_detail_screen.dart'; class ProgressListTileStrings { static String percentString(TimeProgress tp) => diff --git a/lib/widgets/progress_list_view/progress_list_view.dart b/lib/ui/progress/progress_list_view.dart similarity index 91% rename from lib/widgets/progress_list_view/progress_list_view.dart rename to lib/ui/progress/progress_list_view.dart index 61e17b8..837d2a5 100644 --- a/lib/widgets/progress_list_view/progress_list_view.dart +++ b/lib/ui/progress/progress_list_view.dart @@ -3,7 +3,7 @@ import 'dart:io' show Platform; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_item.dart'; +import 'package:time_progress_tracker/ui/progress/progress_list_item.dart'; class ProgressListView extends StatelessWidget { final List timeProgressList; diff --git a/lib/widgets/progress_view_widget.dart b/lib/ui/progress/progress_view_widget.dart similarity index 100% rename from lib/widgets/progress_view_widget.dart rename to lib/ui/progress/progress_view_widget.dart diff --git a/lib/screens/active_time_progresses_screen.dart b/lib/ui/screens/active_time_progresses_screen.dart similarity index 79% rename from lib/screens/active_time_progresses_screen.dart rename to lib/ui/screens/active_time_progresses_screen.dart index 7607832..6e24397 100644 --- a/lib/screens/active_time_progresses_screen.dart +++ b/lib/ui/screens/active_time_progresses_screen.dart @@ -1,10 +1,10 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; +import 'package:time_progress_tracker/redux/store_connectors/settings_store_connector.dart'; +import 'package:time_progress_tracker/redux/store_connectors/time_progress_list_store_connector.dart'; import 'package:time_progress_tracker/utils/helper_functions.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/time_progress_list_store_connector.dart'; +import 'package:time_progress_tracker/ui/progress/progress_list_view.dart'; class ActiveTimeProgressesScreen extends StatelessWidget { @override diff --git a/lib/screens/dashboard_screen.dart b/lib/ui/screens/dashboard_screen.dart similarity index 89% rename from lib/screens/dashboard_screen.dart rename to lib/ui/screens/dashboard_screen.dart index f145406..32fa3ad 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/ui/screens/dashboard_screen.dart @@ -1,13 +1,15 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; -import 'package:time_progress_tracker/screens/active_time_progresses_screen.dart'; -import 'package:time_progress_tracker/screens/inactive_time_progresses_screen.dart'; -import 'package:time_progress_tracker/screens/settings_screen.dart'; +import 'package:time_progress_tracker/ui/screens/active_time_progresses_screen.dart'; +import 'package:time_progress_tracker/ui/screens/inactive_time_progresses_screen.dart'; +import 'package:time_progress_tracker/ui/screens/settings_screen.dart'; import 'package:time_progress_tracker/utils/color_utils.dart'; import 'package:time_progress_tracker/utils/constants.dart'; class DashboardScreen extends StatefulWidget { + static const routeName = "/dashboard"; + @override State createState() => _DashboardScreenState(); } diff --git a/lib/screens/inactive_time_progresses_screen.dart b/lib/ui/screens/inactive_time_progresses_screen.dart similarity index 79% rename from lib/screens/inactive_time_progresses_screen.dart rename to lib/ui/screens/inactive_time_progresses_screen.dart index 7f40f5f..eb07dcf 100644 --- a/lib/screens/inactive_time_progresses_screen.dart +++ b/lib/ui/screens/inactive_time_progresses_screen.dart @@ -1,10 +1,10 @@ import 'package:flutter/widgets.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; +import 'package:time_progress_tracker/redux/store_connectors/settings_store_connector.dart'; +import 'package:time_progress_tracker/redux/store_connectors/time_progress_list_store_connector.dart'; import 'package:time_progress_tracker/utils/helper_functions.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/time_progress_list_store_connector.dart'; +import 'package:time_progress_tracker/ui/progress/progress_list_view.dart'; class InactiveTimeProgressesScreen extends StatelessWidget { @override diff --git a/lib/screens/progress_creation_screen.dart b/lib/ui/screens/progress_creation_screen.dart similarity index 92% rename from lib/screens/progress_creation_screen.dart rename to lib/ui/screens/progress_creation_screen.dart index 5b4ea8e..4517e4a 100644 --- a/lib/screens/progress_creation_screen.dart +++ b/lib/ui/screens/progress_creation_screen.dart @@ -2,12 +2,13 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_redux/flutter_redux.dart'; import 'package:redux/redux.dart'; -import 'package:time_progress_tracker/actions/actions.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; import 'package:time_progress_tracker/redux/app_state.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/selectors/time_progress_selectors.dart'; -import 'package:time_progress_tracker/widgets/progress_editor_widget.dart'; +import 'package:time_progress_tracker/redux/redux_selectors.dart'; +import 'package:time_progress_tracker/utils/helper_functions.dart'; +import 'package:time_progress_tracker/ui/progress/progress_editor_widget.dart'; class ProgressCreationScreen extends StatefulWidget { static const routeName = "/create-progress"; diff --git a/lib/screens/progress_detail_screen.dart b/lib/ui/screens/progress_detail_screen.dart similarity index 85% rename from lib/screens/progress_detail_screen.dart rename to lib/ui/screens/progress_detail_screen.dart index be4c7b9..6e79176 100644 --- a/lib/screens/progress_detail_screen.dart +++ b/lib/ui/screens/progress_detail_screen.dart @@ -1,11 +1,11 @@ import 'package:flutter/material.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/screens/home_screen.dart'; -import 'package:time_progress_tracker/widgets/detail_screen_floating_action_buttons.dart'; -import 'package:time_progress_tracker/widgets/progress_editor_widget.dart'; -import 'package:time_progress_tracker/widgets/progress_view_widget.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/time_progress_store_connector.dart'; +import 'package:time_progress_tracker/redux/store_connectors/settings_store_connector.dart'; +import 'package:time_progress_tracker/redux/store_connectors/time_progress_store_connector.dart'; +import 'package:time_progress_tracker/ui/screens/dashboard_screen.dart'; +import 'package:time_progress_tracker/ui/detail_screen_floating_action_buttons.dart'; +import 'package:time_progress_tracker/ui/progress/progress_editor_widget.dart'; +import 'package:time_progress_tracker/ui/progress/progress_view_widget.dart'; class ProgressDetailScreenArguments { final String id; @@ -110,7 +110,7 @@ class _ProgressDetailScreenState extends State { void _deleteTimeProgress() { tpVm.deleteTimeProgress(); Navigator.popUntil( - context, ModalRoute.withName(HomeScreen.routeName)); + context, ModalRoute.withName(DashboardScreen.routeName)); } return DetailScreenFloatingActionButtons( diff --git a/lib/screens/settings_screen.dart b/lib/ui/screens/settings_screen.dart similarity index 91% rename from lib/screens/settings_screen.dart rename to lib/ui/screens/settings_screen.dart index d6dc871..8864265 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/ui/screens/settings_screen.dart @@ -2,9 +2,9 @@ import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import 'package:flutter_platform_widgets/flutter_platform_widgets.dart'; import 'package:time_progress_tracker/app.dart'; -import 'package:time_progress_tracker/widgets/buttons/color_picker_btn.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/settings/duration_settings_widget.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; +import 'package:time_progress_tracker/redux/store_connectors/settings_store_connector.dart'; +import 'package:time_progress_tracker/ui/buttons/color_picker_btn.dart'; +import 'package:time_progress_tracker/ui/settings/duration_settings_widget.dart'; class SettingsScreen extends StatelessWidget { Widget _renderColorSettings( diff --git a/lib/widgets/home/tabs/settings/color_settings_widget.dart b/lib/ui/settings/color_settings_widget.dart similarity index 94% rename from lib/widgets/home/tabs/settings/color_settings_widget.dart rename to lib/ui/settings/color_settings_widget.dart index b088f62..e758bdf 100644 --- a/lib/widgets/home/tabs/settings/color_settings_widget.dart +++ b/lib/ui/settings/color_settings_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/widgets/buttons/color_picker_btn.dart'; +import 'package:time_progress_tracker/ui/buttons/color_picker_btn.dart'; class ColorSettingsWidget extends StatelessWidget { final Color doneColor, leftColor; diff --git a/lib/widgets/home/tabs/settings/duration_settings_widget.dart b/lib/ui/settings/duration_settings_widget.dart similarity index 92% rename from lib/widgets/home/tabs/settings/duration_settings_widget.dart rename to lib/ui/settings/duration_settings_widget.dart index 0d80458..379036c 100644 --- a/lib/widgets/home/tabs/settings/duration_settings_widget.dart +++ b/lib/ui/settings/duration_settings_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/widgets/buttons/select_duration_btn.dart'; +import 'package:time_progress_tracker/ui/buttons/select_duration_btn.dart'; class DurationSettingsWidget extends StatelessWidget { final Duration duration; diff --git a/lib/utils/helper_functions.dart b/lib/utils/helper_functions.dart index 7dc02a0..4de1fc2 100644 --- a/lib/utils/helper_functions.dart +++ b/lib/utils/helper_functions.dart @@ -1,6 +1,19 @@ import 'dart:ui'; +import 'package:redux/redux.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; +import 'package:time_progress_tracker/redux/actions/app_settings_actions.dart'; +import 'package:time_progress_tracker/redux/actions/time_progress_actions.dart'; +import 'package:time_progress_tracker/redux/app_state.dart'; + +void loadTimeProgressListIfUnloaded(Store store) { + if (!store.state.hasProgressesLoaded) + store.dispatch(LoadTimeProgressListAction()); +} + +void loadSettingsIfUnloaded(Store store) { + if (!store.state.hasSettingsLoaded) store.dispatch(LoadAppSettingsAction()); +} TimeProgress selectProgressById(List tpList, String id) => tpList.firstWhere((tp) => tp.id == id, orElse: null); @@ -14,4 +27,4 @@ List selectInactiveProgresses(List tpList) => bool useBrightBackground(Color bC) { double yiq = ((bC.red * 299) + (bC.green * 587) + (bC.blue * 114)) / 1000; return yiq >= 186 || (bC.red == 0 && bC.green == 0 && bC.blue == 0); -} +} \ No newline at end of file diff --git a/lib/widgets/home/home_bottom_navbar.dart b/lib/widgets/home/home_bottom_navbar.dart deleted file mode 100644 index 3dd666b..0000000 --- a/lib/widgets/home/home_bottom_navbar.dart +++ /dev/null @@ -1,45 +0,0 @@ -import 'package:flutter/material.dart'; - -class HomeBottomNavBar extends StatelessWidget { - final int currentIndex; - final Function onTap; - - HomeBottomNavBar({ - Key key, - @required this.currentIndex, - @required this.onTap, - }) : super(key: key); - - @override - Widget build(BuildContext context) { - ThemeData appTheme = Theme.of(context); - - return BottomNavigationBar( - onTap: onTap, - currentIndex: currentIndex, - items: [ - BottomNavigationBarItem( - icon: new Icon( - Icons.alarm, - color: appTheme.primaryColor, - ), - label: "Active Progresses", - ), - BottomNavigationBarItem( - icon: new Icon( - Icons.alarm_off, - color: appTheme.primaryColor, - ), - label: "Inactive Progresses", - ), - BottomNavigationBarItem( - icon: new Icon( - Icons.settings, - color: appTheme.primaryColor, - ), - label: "Settings", - ) - ], - ); - } -} diff --git a/lib/widgets/home/tabs/home_active_progresses_tab.dart b/lib/widgets/home/tabs/home_active_progresses_tab.dart deleted file mode 100644 index 4cc51b6..0000000 --- a/lib/widgets/home/tabs/home_active_progresses_tab.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/utils/helper_functions.dart'; -import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/time_progress_list_store_connector.dart'; - -class HomeActiveProgressesTab extends StatelessWidget { - @override - Widget build(BuildContext context) { - return SettingsStoreConnector( - loadedBuilder: (context, settingsVm) { - return TimeProgressListStoreConnector( - loadedBuilder: (context, tpListVm) { - List activeTpList = - selectActiveProgresses(tpListVm.tpList); - if (activeTpList.length < 1) - return Container( - padding: EdgeInsets.all(16), - child: Center( - child: Text( - "You don't have any active time progress, that are tracked."), - ), - ); - - return ProgressListView( - timeProgressList: activeTpList, - doneColor: settingsVm.appSettings.doneColor, - leftColor: settingsVm.appSettings.leftColor, - ); - }, - ); - }, - ); - } -} diff --git a/lib/widgets/home/tabs/home_inactive_progresses_tab.dart b/lib/widgets/home/tabs/home_inactive_progresses_tab.dart deleted file mode 100644 index 170c3a4..0000000 --- a/lib/widgets/home/tabs/home_inactive_progresses_tab.dart +++ /dev/null @@ -1,36 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/utils/helper_functions.dart'; -import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/time_progress_list_store_connector.dart'; - -class HomeInactiveProgressesTab extends StatelessWidget { - @override - Widget build(BuildContext context) { - return SettingsStoreConnector( - loadedBuilder: (context, settingsVm) { - return TimeProgressListStoreConnector( - loadedBuilder: (context, tpListVm) { - List inactiveTpList = - selectInactiveProgresses(tpListVm.tpList); - if (inactiveTpList.length < 1) - return Container( - padding: EdgeInsets.all(16), - child: Center( - child: Text( - "You don't have any currently inactive time progresses, that are tracked."), - ), - ); - - return ProgressListView( - timeProgressList: inactiveTpList, - doneColor: settingsVm.appSettings.doneColor, - leftColor: settingsVm.appSettings.leftColor, - ); - }, - ); - }, - ); - } -} diff --git a/lib/widgets/home/tabs/home_settings_tab.dart b/lib/widgets/home/tabs/home_settings_tab.dart deleted file mode 100644 index a4a62e0..0000000 --- a/lib/widgets/home/tabs/home_settings_tab.dart +++ /dev/null @@ -1,52 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:time_progress_tracker/app.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/settings/color_settings_widget.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/settings/duration_settings_widget.dart'; -import 'package:time_progress_tracker/widgets/store_connectors/settings_store_connector.dart'; - -class HomeSettingsTab extends StatelessWidget { - @override - Widget build(BuildContext context) { - return SettingsStoreConnector( - loadedBuilder: (context, settingsVm) { - return Container( - padding: EdgeInsets.all(16), - child: Center( - child: Column( - children: [ - Expanded( - child: ColorSettingsWidget( - doneColor: settingsVm.appSettings.doneColor, - leftColor: settingsVm.appSettings.leftColor, - updateDoneColor: settingsVm.updateDoneColor, - updateLeftColor: settingsVm.updateLeftColor, - ), - ), - Expanded( - child: DurationSettingsWidget( - duration: settingsVm.appSettings.duration, - updateDuration: settingsVm.updateDuration, - ), - ), - Spacer(), - Expanded( - child: TextButton( - onPressed: () { - showAboutDialog( - context: context, - applicationName: TimeProgressTrackerApp.name, - applicationVersion: "Beta", - applicationLegalese: - '\u00a9Andreas Fahrecker 2020-2021'); - }, - child: Text("About"), - ), - ), - ], - ), - ), - ); - }, - ); - } -} diff --git a/test/widget_test.dart b/test/widget_test.dart index 2536085..7332ec9 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -10,8 +10,8 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:time_progress_tracker/models/app_settings.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_item.dart'; -import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart'; +import 'package:time_progress_tracker/ui/progress/progress_list_item.dart'; +import 'package:time_progress_tracker/ui/progress/progress_list_view.dart'; import 'MaterialTesterWidget.dart';