From b81348136948e2a4f251254ba96c140f56444820 Mon Sep 17 00:00:00 2001 From: Andreas Fahrecker Date: Tue, 9 Mar 2021 20:12:26 +0100 Subject: [PATCH] Created ActiveTimeProgressesScreen and migrated ListView and Item to Platform Specific Signed-off-by: Andreas Fahrecker --- .../active_time_progresses_screen.dart | 31 +++++++++++++++++++ lib/screens/dashboard_screen.dart | 11 ++++--- lib/utils/constants.dart | 1 + ...list_tile.dart => progress_list_item.dart} | 26 ++++++++++++++-- .../progress_list_view.dart | 22 ++++++++----- test/widget_test.dart | 10 +++--- 6 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 lib/screens/active_time_progresses_screen.dart create mode 100644 lib/utils/constants.dart rename lib/widgets/progress_list_view/{progress_list_tile.dart => progress_list_item.dart} (69%) diff --git a/lib/screens/active_time_progresses_screen.dart b/lib/screens/active_time_progresses_screen.dart new file mode 100644 index 0000000..e505c9d --- /dev/null +++ b/lib/screens/active_time_progresses_screen.dart @@ -0,0 +1,31 @@ +import 'package:flutter/widgets.dart'; +import 'package:time_progress_tracker/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 ActiveTimeProgressesScreen 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/screens/dashboard_screen.dart b/lib/screens/dashboard_screen.dart index 910ec66..b17fb35 100644 --- a/lib/screens/dashboard_screen.dart +++ b/lib/screens/dashboard_screen.dart @@ -1,8 +1,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/screens/active_time_progresses_screen.dart'; import 'package:time_progress_tracker/utils/color_utils.dart'; -import 'package:time_progress_tracker/widgets/home/tabs/home_active_progresses_tab.dart'; +import 'package:time_progress_tracker/utils/constants.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'; @@ -13,7 +14,7 @@ class DashboardScreen extends StatefulWidget { class _DashboardScreenState extends State { int _tabSelectedIndex = 0; - String title = "Active Progresses"; + String title = txtActiveProgressesScreen; Widget _renderTabScreen(int tabIndex) { switch (tabIndex) { @@ -22,7 +23,7 @@ class _DashboardScreenState extends State { case 2: return HomeSettingsTab(); default: - return HomeActiveProgressesTab(); + return ActiveTimeProgressesScreen(); } } @@ -33,7 +34,7 @@ class _DashboardScreenState extends State { case 2: return "Settings"; default: - return "ActiveProgresses"; + return txtActiveProgressesScreen; } } @@ -63,7 +64,7 @@ class _DashboardScreenState extends State { items: [ BottomNavigationBarItem( icon: Icon(Icons.alarm, color: Colors.grey), - label: "Active Progresses", + label: txtActiveProgressesScreen, activeIcon: Icon(Icons.alarm, color: Colors.white), ), BottomNavigationBarItem( diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart new file mode 100644 index 0000000..013bbad --- /dev/null +++ b/lib/utils/constants.dart @@ -0,0 +1 @@ +const txtActiveProgressesScreen = "Active Progresses"; \ No newline at end of file diff --git a/lib/widgets/progress_list_view/progress_list_tile.dart b/lib/widgets/progress_list_view/progress_list_item.dart similarity index 69% rename from lib/widgets/progress_list_view/progress_list_tile.dart rename to lib/widgets/progress_list_view/progress_list_item.dart index 7cdf0a6..a81f318 100644 --- a/lib/widgets/progress_list_view/progress_list_tile.dart +++ b/lib/widgets/progress_list_view/progress_list_item.dart @@ -1,3 +1,6 @@ +import 'dart:io' show Platform; + +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:time_progress_tracker/models/time_progress.dart'; @@ -14,11 +17,11 @@ class ProgressListTileStrings { "Ended ${tp.daysSinceEnd()} Days ago."; } -class ProgressListTile extends StatelessWidget { +class ProgressListItem extends StatelessWidget { final TimeProgress timeProgress; final Color doneColor, leftColor; - ProgressListTile({ + ProgressListItem({ @required this.timeProgress, @required this.doneColor, @required this.leftColor, @@ -43,9 +46,26 @@ class ProgressListTile extends StatelessWidget { void _onTileTap() => Navigator.pushNamed(context, ProgressDetailScreen.routeName, arguments: ProgressDetailScreenArguments(timeProgress.id)); + Text titleText = Text(timeProgress.name); + if (Platform.isIOS) + return CupertinoButton( + child: Container( + decoration: BoxDecoration( + color: Colors.grey, + borderRadius: BorderRadius.circular(12), + ), + padding: EdgeInsets.fromLTRB(15, 15, 5, 5), + child: Column( + children: [ + titleText, + _renderSubtitle(context), + ], + ), + ), + onPressed: _onTileTap); return ListTile( - title: Text(timeProgress.name), + title: titleText, subtitle: _renderSubtitle(context), onTap: _onTileTap, ); diff --git a/lib/widgets/progress_list_view/progress_list_view.dart b/lib/widgets/progress_list_view/progress_list_view.dart index 896b36e..61e17b8 100644 --- a/lib/widgets/progress_list_view/progress_list_view.dart +++ b/lib/widgets/progress_list_view/progress_list_view.dart @@ -1,6 +1,9 @@ +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_tile.dart'; +import 'package:time_progress_tracker/widgets/progress_list_view/progress_list_item.dart'; class ProgressListView extends StatelessWidget { final List timeProgressList; @@ -12,15 +15,18 @@ class ProgressListView extends StatelessWidget { @required this.leftColor, }); + Widget _renderListTile(TimeProgress tp) { + ProgressListItem listTile = ProgressListItem( + timeProgress: tp, doneColor: doneColor, leftColor: leftColor); + if (Platform.isIOS) return listTile; + return Card( + child: listTile, + ); + } + List _renderListViewChildren() { return timeProgressList - .map((e) => Card( - child: ProgressListTile( - timeProgress: e, - doneColor: doneColor, - leftColor: leftColor, - ), - )) + .map((e) => _renderListTile(e)) .toList(growable: false); } diff --git a/test/widget_test.dart b/test/widget_test.dart index e95f9a7..2536085 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -10,7 +10,7 @@ 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_tile.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 'MaterialTesterWidget.dart'; @@ -26,7 +26,7 @@ void main() { testWidgets("Progress List Tile with currently active progress works", (WidgetTester tester) async { await tester.pumpWidget(MaterialTesterWidget( - widget: ProgressListTile( + widget: ProgressListItem( timeProgress: _activeProgress, doneColor: _defaultAppSettings.doneColor, leftColor: _defaultAppSettings.leftColor, @@ -53,7 +53,7 @@ void main() { ); await tester.pumpWidget(MaterialTesterWidget( - widget: ProgressListTile( + widget: ProgressListItem( timeProgress: futureProgress, doneColor: _defaultAppSettings.doneColor, leftColor: _defaultAppSettings.leftColor, @@ -73,7 +73,7 @@ void main() { ); await tester.pumpWidget(MaterialTesterWidget( - widget: ProgressListTile( + widget: ProgressListItem( timeProgress: pastProgress, doneColor: _defaultAppSettings.doneColor, leftColor: _defaultAppSettings.leftColor, @@ -87,7 +87,7 @@ void main() { WidgetPredicate getProgressListTilePredicate( TimeProgress tp, AppSettings as) => (Widget widget) => - widget is ProgressListTile && + widget is ProgressListItem && widget.timeProgress == tp && widget.doneColor == as.doneColor && widget.leftColor == as.leftColor;