From 45d4f7ba3a4904e1ea8ce06d48b97b77f1132d40 Mon Sep 17 00:00:00 2001 From: Andreas Fahrecker Date: Tue, 16 Mar 2021 15:14:56 +0100 Subject: [PATCH] Ported Create Progress Button for Platform Aware Signed-off-by: Andreas Fahrecker --- lib/ui/buttons/create_progress_button.dart | 35 +++++++++++++++++----- lib/ui/screens/dashboard_screen.dart | 9 +++++- lib/utils/helper_functions.dart | 9 +++++- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/lib/ui/buttons/create_progress_button.dart b/lib/ui/buttons/create_progress_button.dart index 48eaeaf..2abed39 100644 --- a/lib/ui/buttons/create_progress_button.dart +++ b/lib/ui/buttons/create_progress_button.dart @@ -1,18 +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 CreateProgressButton extends StatelessWidget { final String _heroTag = "createProgressBTN"; @override Widget build(BuildContext context) { - void _onButtonPressed() => - Navigator.pushNamed(context, ProgressCreationScreen.routeName); + void _onButtonPressed() => Navigator.push( + context, + platformPageRoute( + context: context, + builder: (context) => ProgressCreationScreen(), + )); - return FloatingActionButton( - heroTag: _heroTag, - child: Icon(Icons.add), - onPressed: _onButtonPressed, - ); + 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(); } } diff --git a/lib/ui/screens/dashboard_screen.dart b/lib/ui/screens/dashboard_screen.dart index 32fa3ad..fc26bd5 100644 --- a/lib/ui/screens/dashboard_screen.dart +++ b/lib/ui/screens/dashboard_screen.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/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/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'; @@ -40,6 +41,9 @@ class _DashboardScreenState extends State { } } + Widget _renderCreateProgressBtn() => + _tabSelectedIndex == 2 ? null : CreateProgressButton(); + @override Widget build(BuildContext context) { return PlatformScaffold( @@ -50,9 +54,12 @@ class _DashboardScreenState extends State { ), cupertino: (_, __) => CupertinoNavigationBarData( transitionBetweenRoutes: false, + leading: _renderCreateProgressBtn(), ), ), - material: (_, __) => MaterialScaffoldData(), + material: (_, __) => MaterialScaffoldData( + floatingActionButton: _renderCreateProgressBtn(), + ), body: _renderTabScreen(_tabSelectedIndex), bottomNavBar: PlatformNavBar( currentIndex: _tabSelectedIndex, diff --git a/lib/utils/helper_functions.dart b/lib/utils/helper_functions.dart index 4de1fc2..6966508 100644 --- a/lib/utils/helper_functions.dart +++ b/lib/utils/helper_functions.dart @@ -1,5 +1,7 @@ +import 'dart:io' show Platform; import 'dart:ui'; +import 'package:flutter/foundation.dart'; 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'; @@ -27,4 +29,9 @@ 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 +} + +bool useCupertino() { + if (kIsWeb) return false; + return Platform.isIOS; +}