Created ActiveTimeProgressesScreen and migrated ListView and Item to Platform Specific

Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
Andreas Fahrecker 2021-03-09 20:12:26 +01:00
parent ed5d2b92f7
commit b813481369
6 changed files with 80 additions and 21 deletions

View File

@ -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<TimeProgress> 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,
);
});
});
}
}

View File

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:flutter_platform_widgets/flutter_platform_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/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_inactive_progresses_tab.dart';
import 'package:time_progress_tracker/widgets/home/tabs/home_settings_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<DashboardScreen> { class _DashboardScreenState extends State<DashboardScreen> {
int _tabSelectedIndex = 0; int _tabSelectedIndex = 0;
String title = "Active Progresses"; String title = txtActiveProgressesScreen;
Widget _renderTabScreen(int tabIndex) { Widget _renderTabScreen(int tabIndex) {
switch (tabIndex) { switch (tabIndex) {
@ -22,7 +23,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
case 2: case 2:
return HomeSettingsTab(); return HomeSettingsTab();
default: default:
return HomeActiveProgressesTab(); return ActiveTimeProgressesScreen();
} }
} }
@ -33,7 +34,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
case 2: case 2:
return "Settings"; return "Settings";
default: default:
return "ActiveProgresses"; return txtActiveProgressesScreen;
} }
} }
@ -63,7 +64,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
items: [ items: [
BottomNavigationBarItem( BottomNavigationBarItem(
icon: Icon(Icons.alarm, color: Colors.grey), icon: Icon(Icons.alarm, color: Colors.grey),
label: "Active Progresses", label: txtActiveProgressesScreen,
activeIcon: Icon(Icons.alarm, color: Colors.white), activeIcon: Icon(Icons.alarm, color: Colors.white),
), ),
BottomNavigationBarItem( BottomNavigationBarItem(

1
lib/utils/constants.dart Normal file
View File

@ -0,0 +1 @@
const txtActiveProgressesScreen = "Active Progresses";

View File

@ -1,3 +1,6 @@
import 'dart:io' show Platform;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:time_progress_tracker/models/time_progress.dart'; import 'package:time_progress_tracker/models/time_progress.dart';
@ -14,11 +17,11 @@ class ProgressListTileStrings {
"Ended ${tp.daysSinceEnd()} Days ago."; "Ended ${tp.daysSinceEnd()} Days ago.";
} }
class ProgressListTile extends StatelessWidget { class ProgressListItem extends StatelessWidget {
final TimeProgress timeProgress; final TimeProgress timeProgress;
final Color doneColor, leftColor; final Color doneColor, leftColor;
ProgressListTile({ ProgressListItem({
@required this.timeProgress, @required this.timeProgress,
@required this.doneColor, @required this.doneColor,
@required this.leftColor, @required this.leftColor,
@ -43,9 +46,26 @@ class ProgressListTile extends StatelessWidget {
void _onTileTap() => void _onTileTap() =>
Navigator.pushNamed(context, ProgressDetailScreen.routeName, Navigator.pushNamed(context, ProgressDetailScreen.routeName,
arguments: ProgressDetailScreenArguments(timeProgress.id)); 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( return ListTile(
title: Text(timeProgress.name), title: titleText,
subtitle: _renderSubtitle(context), subtitle: _renderSubtitle(context),
onTap: _onTileTap, onTap: _onTileTap,
); );

View File

@ -1,6 +1,9 @@
import 'dart:io' show Platform;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:time_progress_tracker/models/time_progress.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 { class ProgressListView extends StatelessWidget {
final List<TimeProgress> timeProgressList; final List<TimeProgress> timeProgressList;
@ -12,15 +15,18 @@ class ProgressListView extends StatelessWidget {
@required this.leftColor, @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<Widget> _renderListViewChildren() { List<Widget> _renderListViewChildren() {
return timeProgressList return timeProgressList
.map((e) => Card( .map((e) => _renderListTile(e))
child: ProgressListTile(
timeProgress: e,
doneColor: doneColor,
leftColor: leftColor,
),
))
.toList(growable: false); .toList(growable: false);
} }

View File

@ -10,7 +10,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:percent_indicator/linear_percent_indicator.dart'; import 'package:percent_indicator/linear_percent_indicator.dart';
import 'package:time_progress_tracker/models/app_settings.dart'; import 'package:time_progress_tracker/models/app_settings.dart';
import 'package:time_progress_tracker/models/time_progress.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 'package:time_progress_tracker/widgets/progress_list_view/progress_list_view.dart';
import 'MaterialTesterWidget.dart'; import 'MaterialTesterWidget.dart';
@ -26,7 +26,7 @@ void main() {
testWidgets("Progress List Tile with currently active progress works", testWidgets("Progress List Tile with currently active progress works",
(WidgetTester tester) async { (WidgetTester tester) async {
await tester.pumpWidget(MaterialTesterWidget( await tester.pumpWidget(MaterialTesterWidget(
widget: ProgressListTile( widget: ProgressListItem(
timeProgress: _activeProgress, timeProgress: _activeProgress,
doneColor: _defaultAppSettings.doneColor, doneColor: _defaultAppSettings.doneColor,
leftColor: _defaultAppSettings.leftColor, leftColor: _defaultAppSettings.leftColor,
@ -53,7 +53,7 @@ void main() {
); );
await tester.pumpWidget(MaterialTesterWidget( await tester.pumpWidget(MaterialTesterWidget(
widget: ProgressListTile( widget: ProgressListItem(
timeProgress: futureProgress, timeProgress: futureProgress,
doneColor: _defaultAppSettings.doneColor, doneColor: _defaultAppSettings.doneColor,
leftColor: _defaultAppSettings.leftColor, leftColor: _defaultAppSettings.leftColor,
@ -73,7 +73,7 @@ void main() {
); );
await tester.pumpWidget(MaterialTesterWidget( await tester.pumpWidget(MaterialTesterWidget(
widget: ProgressListTile( widget: ProgressListItem(
timeProgress: pastProgress, timeProgress: pastProgress,
doneColor: _defaultAppSettings.doneColor, doneColor: _defaultAppSettings.doneColor,
leftColor: _defaultAppSettings.leftColor, leftColor: _defaultAppSettings.leftColor,
@ -87,7 +87,7 @@ void main() {
WidgetPredicate getProgressListTilePredicate( WidgetPredicate getProgressListTilePredicate(
TimeProgress tp, AppSettings as) => TimeProgress tp, AppSettings as) =>
(Widget widget) => (Widget widget) =>
widget is ProgressListTile && widget is ProgressListItem &&
widget.timeProgress == tp && widget.timeProgress == tp &&
widget.doneColor == as.doneColor && widget.doneColor == as.doneColor &&
widget.leftColor == as.leftColor; widget.leftColor == as.leftColor;