Started Porting Progress Creation Screen
Signed-off-by: Andreas Fahrecker <AndreasFahrecker@gmail.com>
This commit is contained in:
parent
45d4f7ba3a
commit
aabeef6384
@ -0,0 +1,53 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
|
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/time_progress_actions.dart';
|
||||||
|
import 'package:time_progress_tracker/redux/app_state.dart';
|
||||||
|
import 'package:time_progress_tracker/redux/redux_selectors.dart';
|
||||||
|
|
||||||
|
import '../../utils/helper_functions.dart';
|
||||||
|
|
||||||
|
class CreateTimeProgressStoreConnector extends StatelessWidget {
|
||||||
|
final Widget Function(BuildContext, CreateTimeProgressViewModel)
|
||||||
|
loadedBuilder;
|
||||||
|
|
||||||
|
CreateTimeProgressStoreConnector({
|
||||||
|
@required this.loadedBuilder,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return StoreConnector<AppState, CreateTimeProgressViewModel>(
|
||||||
|
onInit: loadTimeProgressListIfUnloaded,
|
||||||
|
converter: (store) => CreateTimeProgressViewModel._create(store),
|
||||||
|
builder: (context, CreateTimeProgressViewModel vm) {
|
||||||
|
return loadedBuilder(context, vm);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class CreateTimeProgressViewModel {
|
||||||
|
final TimeProgress defaultProgress;
|
||||||
|
|
||||||
|
final void Function(TimeProgress) addTimeProgress;
|
||||||
|
|
||||||
|
CreateTimeProgressViewModel(
|
||||||
|
this.defaultProgress,
|
||||||
|
this.addTimeProgress,
|
||||||
|
);
|
||||||
|
|
||||||
|
factory CreateTimeProgressViewModel._create(Store<AppState> store) {
|
||||||
|
AppSettings settings = appSettingsSelector(store.state);
|
||||||
|
void _addTimeProgress(TimeProgress tp) {
|
||||||
|
if (TimeProgress.isValid(tp)) store.dispatch(AddTimeProgressAction(tp));
|
||||||
|
}
|
||||||
|
|
||||||
|
return CreateTimeProgressViewModel(
|
||||||
|
TimeProgress.defaultFromDuration(settings.duration),
|
||||||
|
_addTimeProgress,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +1,36 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.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/models/time_progress.dart';
|
||||||
import 'package:time_progress_tracker/ui/screens/progress_creation_screen.dart';
|
import 'package:time_progress_tracker/ui/screens/progress_creation_screen.dart';
|
||||||
import 'package:time_progress_tracker/utils/helper_functions.dart';
|
import 'package:time_progress_tracker/utils/helper_functions.dart';
|
||||||
|
|
||||||
class CreateProgressButton extends StatelessWidget {
|
class CreateProgressButton extends StatelessWidget {
|
||||||
final String _heroTag = "createProgressBTN";
|
final String _heroTag = "createTimeProgressBTN";
|
||||||
|
|
||||||
|
final void Function() createProgress;
|
||||||
|
|
||||||
|
const CreateProgressButton({Key key, @required this.createProgress})
|
||||||
|
: super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
void _onButtonPressed() => Navigator.push(
|
|
||||||
context,
|
|
||||||
platformPageRoute(
|
|
||||||
context: context,
|
|
||||||
builder: (context) => ProgressCreationScreen(),
|
|
||||||
));
|
|
||||||
|
|
||||||
Widget _renderCupertino() {
|
Widget _renderCupertino() {
|
||||||
return PlatformButton(
|
return PlatformButton(
|
||||||
padding: EdgeInsets.all(4),
|
padding: EdgeInsets.all(4),
|
||||||
child: Icon(
|
child: Icon(
|
||||||
Icons.add,
|
Icons.save,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
onPressed: _onButtonPressed,
|
onPressed: () => createProgress(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _renderMaterial() {
|
Widget _renderMaterial() {
|
||||||
return FloatingActionButton(
|
return FloatingActionButton(
|
||||||
heroTag: _heroTag,
|
heroTag: _heroTag,
|
||||||
child: Icon(Icons.add),
|
child: Icon(Icons.save),
|
||||||
onPressed: _onButtonPressed,
|
onPressed: () => createProgress(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
39
lib/ui/buttons/go_to_create_progress_button.dart
Normal file
39
lib/ui/buttons/go_to_create_progress_button.dart
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_platform_widgets/flutter_platform_widgets.dart';
|
||||||
|
import 'package:time_progress_tracker/ui/screens/progress_creation_screen.dart';
|
||||||
|
import 'package:time_progress_tracker/utils/helper_functions.dart';
|
||||||
|
|
||||||
|
class GoToCreateProgressButton extends StatelessWidget {
|
||||||
|
final String _heroTag = "createProgressBTN";
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
void _onButtonPressed() => Navigator.push(
|
||||||
|
context,
|
||||||
|
platformPageRoute(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => ProgressCreationScreen(),
|
||||||
|
));
|
||||||
|
|
||||||
|
Widget _renderCupertino() {
|
||||||
|
return PlatformButton(
|
||||||
|
padding: EdgeInsets.all(4),
|
||||||
|
child: Icon(
|
||||||
|
Icons.add,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
onPressed: _onButtonPressed,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _renderMaterial() {
|
||||||
|
return FloatingActionButton(
|
||||||
|
heroTag: _heroTag,
|
||||||
|
child: Icon(Icons.add),
|
||||||
|
onPressed: _onButtonPressed,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return useCupertino() ? _renderCupertino() : _renderMaterial();
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_platform_widgets/flutter_platform_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/ui/buttons/date_picker_btn.dart';
|
import 'package:time_progress_tracker/ui/buttons/date_picker_btn.dart';
|
||||||
|
|
||||||
@ -64,14 +65,25 @@ class _ProgressEditorWidgetState extends State<ProgressEditorWidget> {
|
|||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
List<Widget> columnChildren = [
|
List<Widget> columnChildren = [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TextField(
|
child: Center(
|
||||||
controller: _nameTextController,
|
child: PlatformTextField(
|
||||||
decoration: InputDecoration(
|
controller: _nameTextController,
|
||||||
border: OutlineInputBorder(),
|
material: (context, platform) => MaterialTextFieldData(
|
||||||
labelText: "Progress Name",
|
decoration: InputDecoration(
|
||||||
errorText: _validName
|
border: OutlineInputBorder(),
|
||||||
? null
|
labelText: "Progress Name",
|
||||||
: "The Name need to have at least 3 and at max 20 symbols.",
|
errorText: _validName
|
||||||
|
? null
|
||||||
|
: "The Name need to have at least 3 and at max 20 symbols.",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
cupertino: (context, platform) => CupertinoTextFieldData(
|
||||||
|
placeholder: "Progress Name",
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(width: 2, color: Colors.grey),
|
||||||
|
borderRadius: BorderRadius.circular(32),
|
||||||
|
)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
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/ui/buttons/create_progress_button.dart';
|
import 'package:time_progress_tracker/ui/buttons/go_to_create_progress_button.dart';
|
||||||
import 'package:time_progress_tracker/ui/screens/active_time_progresses_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/inactive_time_progresses_screen.dart';
|
||||||
import 'package:time_progress_tracker/ui/screens/settings_screen.dart';
|
import 'package:time_progress_tracker/ui/screens/settings_screen.dart';
|
||||||
@ -42,7 +42,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _renderCreateProgressBtn() =>
|
Widget _renderCreateProgressBtn() =>
|
||||||
_tabSelectedIndex == 2 ? null : CreateProgressButton();
|
_tabSelectedIndex == 2 ? null : GoToCreateProgressButton();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -1,14 +1,18 @@
|
|||||||
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_redux/flutter_redux.dart';
|
import 'package:flutter_redux/flutter_redux.dart';
|
||||||
import 'package:redux/redux.dart';
|
import 'package:redux/redux.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/redux/actions/time_progress_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/app_state.dart';
|
||||||
import 'package:time_progress_tracker/models/time_progress.dart';
|
|
||||||
import 'package:time_progress_tracker/redux/redux_selectors.dart';
|
import 'package:time_progress_tracker/redux/redux_selectors.dart';
|
||||||
import 'package:time_progress_tracker/utils/helper_functions.dart';
|
import 'package:time_progress_tracker/redux/store_connectors/create_time_progress_store_connector.dart';
|
||||||
|
import 'package:time_progress_tracker/ui/buttons/create_progress_button.dart';
|
||||||
import 'package:time_progress_tracker/ui/progress/progress_editor_widget.dart';
|
import 'package:time_progress_tracker/ui/progress/progress_editor_widget.dart';
|
||||||
|
import 'package:time_progress_tracker/utils/color_utils.dart';
|
||||||
|
import 'package:time_progress_tracker/utils/helper_functions.dart';
|
||||||
|
|
||||||
class ProgressCreationScreen extends StatefulWidget {
|
class ProgressCreationScreen extends StatefulWidget {
|
||||||
static const routeName = "/create-progress";
|
static const routeName = "/create-progress";
|
||||||
@ -41,6 +45,86 @@ class _ProgressCreationScreenState extends State<ProgressCreationScreen> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
void _onCreateTimeProgress(CreateTimeProgressViewModel vm) {
|
||||||
|
if (!_isProgressValid) return null;
|
||||||
|
vm.addTimeProgress(timeProgressToCreate);
|
||||||
|
Navigator.pop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
initTimeProgress(TimeProgress.defaultFromDuration(
|
||||||
|
StoreProvider.of<AppState>(context).state.appSettings.duration));
|
||||||
|
|
||||||
|
return PlatformScaffold(
|
||||||
|
appBar: PlatformAppBar(
|
||||||
|
title: Text(
|
||||||
|
ProgressCreationScreen.title,
|
||||||
|
style: toolbarTextStyle,
|
||||||
|
),
|
||||||
|
cupertino: (_, __) => CupertinoNavigationBarData(
|
||||||
|
transitionBetweenRoutes: false,
|
||||||
|
trailing: CreateTimeProgressStoreConnector(
|
||||||
|
loadedBuilder: (context, CreateTimeProgressViewModel vm) =>
|
||||||
|
CreateProgressButton(
|
||||||
|
createProgress: () => _onCreateTimeProgress(vm),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
material: (_, __) => MaterialScaffoldData(
|
||||||
|
floatingActionButton: Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: CreateTimeProgressStoreConnector(
|
||||||
|
loadedBuilder: (context, CreateTimeProgressViewModel vm) =>
|
||||||
|
CreateProgressButton(
|
||||||
|
createProgress: () => _onCreateTimeProgress(vm),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: ProgressEditorWidget(
|
||||||
|
timeProgress: timeProgressToCreate,
|
||||||
|
onTimeProgressChanged: onTimeProgressChanged,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return CreateTimeProgressStoreConnector(
|
||||||
|
loadedBuilder: (context, CreateTimeProgressViewModel vm) {
|
||||||
|
initTimeProgress(vm.defaultProgress);
|
||||||
|
return PlatformScaffold(
|
||||||
|
appBar: PlatformAppBar(
|
||||||
|
title: Text(
|
||||||
|
ProgressCreationScreen.title,
|
||||||
|
style: toolbarTextStyle,
|
||||||
|
),
|
||||||
|
cupertino: (_, __) => CupertinoNavigationBarData(
|
||||||
|
transitionBetweenRoutes: false,
|
||||||
|
trailing: CreateProgressButton(
|
||||||
|
createProgress: () => _onCreateTimeProgress(vm),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
material: (_, __) => MaterialScaffoldData(
|
||||||
|
floatingActionButton: Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: CreateProgressButton(
|
||||||
|
createProgress: () => _onCreateTimeProgress(vm),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
body: ProgressEditorWidget(
|
||||||
|
timeProgress: timeProgressToCreate,
|
||||||
|
onTimeProgressChanged: onTimeProgressChanged,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: AppBar(
|
appBar: AppBar(
|
||||||
title: Text(ProgressCreationScreen.title),
|
title: Text(ProgressCreationScreen.title),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user