time_progress_tracker/lib/widgets/app_drawer_widget.dart
Andreas Fahrecker f013c0de65
Feature/basic app (#1)
Feature/Basic App (#1)

Basic App Structure Consists of Time Progress Dashboard, Time Progress Detail View and Time Progress Creator.
All of these have an AppDrawer with a Link To the Dashboard and all your Track Time Progresses, also an About Button.

Commits:
* Undetailed Commit more work
* Changed isEditing ? in Detail Screen and Extracted FAB row to widget
* Extracted Progress Detail Fab Row and Progress Detail select Date Btn to
widgets
* Create Progress Detail Widgets Folder
* Extracted Edit Dates Row Widget
* Extracted Functions from ui
* Made some fields private
* LoadTimerProgressList if unloaded function
* Created App Yes No Dialog Widget
* Using Yes No Dialog in Detail Screen
* Created TimeProgress Initial Default factory
* Renamed to Time Progress Tracker
* Added About Button in App Drawer
* Code cleanup
* Code clean up and fixed Bug with null as string in Repository

Signed-off-by Andreas Fahrecker <AndreasFahrecker@gmail.com>
2020-11-20 01:17:17 +01:00

111 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_redux/flutter_redux.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:redux/redux.dart';
import 'package:time_progress_tracker/actions/actions.dart';
import 'package:time_progress_tracker/app.dart';
import 'package:time_progress_tracker/models/app_state.dart';
import 'package:time_progress_tracker/models/time_progress.dart';
import 'package:time_progress_tracker/screens/progress_dashboard_screen.dart';
import 'package:time_progress_tracker/screens/progress_detail_screen.dart';
class AppDrawer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Drawer(
child: StoreConnector(
converter: _ViewModel.fromStore,
onInit: loadTimeProgressListIfUnloaded,
builder: (context, _ViewModel vm) {
List<Widget> drawerTileList = List<Widget>();
drawerTileList.add(DrawerHeader(
child: Text(TimeProgressTrackerApp.name),
decoration: BoxDecoration(color: Colors.blue),
margin: EdgeInsets.zero,
));
drawerTileList.add(Container(
color: Colors.lightBlue,
margin: EdgeInsets.only(bottom: 8),
child: ListTile(
title: Text(ProgressDashboardScreen.title),
trailing: Icon(Icons.dashboard),
onTap: () {
Navigator.pop(context);
Navigator.pushNamed(context, ProgressDashboardScreen.routeName);
},
),
));
if (vm.timeProgressList.length > 0) {
for (TimeProgress tp in vm.timeProgressList) {
drawerTileList.add(ListTile(
title: Text(tp.name),
trailing: CircularPercentIndicator(
percent: tp.percentDone(),
radius: 40,
progressColor: Colors.green,
backgroundColor: Colors.red,
center: FittedBox(
fit: BoxFit.scaleDown,
child:
Text((tp.percentDone() * 100).floor().toString() + "%"),
),
),
onTap: () {
Navigator.pop(context);
Navigator.pushNamed(
context,
ProgressDetailScreen.routeName,
arguments: ProgressDetailScreenArguments(tp.id),
);
},
));
if (vm.timeProgressList.last != tp) {
drawerTileList.add(Divider(
color: Colors.black12,
));
}
}
} else {
drawerTileList.add(ListTile(
title: Text("You don't have any tracked time progress."),
));
}
drawerTileList.add(Divider(
color: Colors.black38,
));
drawerTileList.add(Container(
margin: EdgeInsets.only(bottom: 8),
child: ListTile(
title: Text("About"),
onTap: () {
showAboutDialog(
context: context,
applicationName: TimeProgressTrackerApp.name,
applicationVersion: ' Version 0.0.1',
applicationLegalese: '\u00a9Andreas Fahrecker 2020'
);
},
),
));
return ListView(
children: drawerTileList,
);
},
),
);
}
}
class _ViewModel {
final List<TimeProgress> timeProgressList;
_ViewModel({@required this.timeProgressList});
static _ViewModel fromStore(Store<AppState> store) {
return _ViewModel(
timeProgressList: store.state.timeProgressList,
);
}
}