From 786335ede3d88b7c063ecdd19931d02b1ef50a1f Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 24 Feb 2024 16:40:16 +0100 Subject: [PATCH] viewer: fixed error background on light theme --- lib/theme/colors.dart | 3 ++- lib/widgets/common/action_mixins/feedback.dart | 6 ++++-- lib/widgets/common/action_mixins/overlay_snack_bar.dart | 3 ++- lib/widgets/common/app_bar/app_bar_subtitle.dart | 3 ++- lib/widgets/common/extensions/theme.dart | 5 +++++ lib/widgets/common/fx/borders.dart | 3 ++- .../common/grid/sections/fixed/scale_overlay.dart | 3 ++- .../common/grid/sections/mosaic/scale_overlay.dart | 3 ++- lib/widgets/common/identity/aves_icons.dart | 3 ++- lib/widgets/common/identity/buttons/overlay_button.dart | 3 ++- lib/widgets/common/identity/highlight_title.dart | 3 ++- lib/widgets/dialogs/item_picker.dart | 3 ++- lib/widgets/settings/common/tile_leading.dart | 6 ++++-- lib/widgets/stats/percent_text.dart | 3 ++- lib/widgets/viewer/entry_vertical_pager.dart | 3 ++- lib/widgets/viewer/entry_viewer_page.dart | 9 ++++----- lib/widgets/viewer/overlay/details/details.dart | 3 ++- lib/widgets/viewer/overlay/video/progress_bar.dart | 7 ++++--- lib/widgets/viewer/visual/error.dart | 3 ++- lib/widgets/wallpaper_page.dart | 3 ++- 20 files changed, 51 insertions(+), 27 deletions(-) create mode 100644 lib/widgets/common/extensions/theme.dart diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index d3ab7017d..15e177a7f 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -1,6 +1,7 @@ import 'package:aves/image_providers/app_icon_image_provider.dart'; import 'package:aves/model/covers.dart'; import 'package:aves/model/settings/settings.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves_model/aves_model.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -32,7 +33,7 @@ class AvesColorsProvider extends StatelessWidget { Widget build(BuildContext context) { return ProxyProvider( update: (context, settings, __) { - final isDark = Theme.of(context).brightness == Brightness.dark; + final isDark = Theme.of(context).isDark; var mode = settings.themeColorMode; if (!allowMonochrome && mode == AvesThemeColorMode.monochrome) { mode = AvesThemeColorMode.polychrome; diff --git a/lib/widgets/common/action_mixins/feedback.dart b/lib/widgets/common/action_mixins/feedback.dart index bee8bfc5c..0ad9821f9 100644 --- a/lib/widgets/common/action_mixins/feedback.dart +++ b/lib/widgets/common/action_mixins/feedback.dart @@ -11,6 +11,7 @@ import 'package:aves/widgets/common/action_mixins/overlay_snack_bar.dart'; import 'package:aves/widgets/common/basic/circle.dart'; import 'package:aves/widgets/common/basic/text/change_highlight.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/viewer/entry_viewer_page.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -202,7 +203,8 @@ class _ReportOverlayState extends State> with SingleTickerPr @override Widget build(BuildContext context) { - final colorScheme = Theme.of(context).colorScheme; + final theme = Theme.of(context); + final colorScheme = theme.colorScheme; final progressColor = colorScheme.primary; final animate = context.select((v) => v.accessibilityAnimations.animate); return PopScope( @@ -223,7 +225,7 @@ class _ReportOverlayState extends State> with SingleTickerPr width: diameter + 2, height: diameter + 2, decoration: BoxDecoration( - color: colorScheme.brightness == Brightness.dark ? const Color(0xBB000000) : const Color(0xEEFFFFFF), + color: theme.isDark ? const Color(0xBB000000) : const Color(0xEEFFFFFF), shape: BoxShape.circle, ), ), diff --git a/lib/widgets/common/action_mixins/overlay_snack_bar.dart b/lib/widgets/common/action_mixins/overlay_snack_bar.dart index 515c4a7cf..4ca2ef6c3 100644 --- a/lib/widgets/common/action_mixins/overlay_snack_bar.dart +++ b/lib/widgets/common/action_mixins/overlay_snack_bar.dart @@ -1,3 +1,4 @@ +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:flutter/material.dart'; // adapted from Flutter `SnackBar` in `/material/snack_bar.dart` @@ -115,7 +116,7 @@ class _OverlaySnackBarState extends State { final ThemeData theme = Theme.of(context); final ColorScheme colorScheme = theme.colorScheme; final SnackBarThemeData snackBarTheme = theme.snackBarTheme; - final bool isThemeDark = theme.brightness == Brightness.dark; + final bool isThemeDark = theme.isDark; final Color buttonColor = isThemeDark ? colorScheme.primary : colorScheme.secondary; final SnackBarThemeData defaults = _SnackbarDefaultsM3(context); diff --git a/lib/widgets/common/app_bar/app_bar_subtitle.dart b/lib/widgets/common/app_bar/app_bar_subtitle.dart index 50637b784..5a30727e9 100644 --- a/lib/widgets/common/app_bar/app_bar_subtitle.dart +++ b/lib/widgets/common/app_bar/app_bar_subtitle.dart @@ -4,6 +4,7 @@ import 'package:aves/model/source/events.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/view/view.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves_model/aves_model.dart'; import 'package:flutter/material.dart'; @@ -77,7 +78,7 @@ class SourceStateSubtitle extends StatelessWidget { const WidgetSpan(child: SizedBox(width: 8)), TextSpan( text: '${progress.done}/${progress.total}', - style: TextStyle(color: theme.brightness == Brightness.dark ? Colors.white30 : Colors.black26), + style: TextStyle(color: theme.isDark ? Colors.white30 : Colors.black26), ), ] ], diff --git a/lib/widgets/common/extensions/theme.dart b/lib/widgets/common/extensions/theme.dart new file mode 100644 index 000000000..0ad34a6c5 --- /dev/null +++ b/lib/widgets/common/extensions/theme.dart @@ -0,0 +1,5 @@ +import 'package:flutter/material.dart'; + +extension ExtraThemeData on ThemeData { + bool get isDark => brightness == Brightness.dark; +} diff --git a/lib/widgets/common/fx/borders.dart b/lib/widgets/common/fx/borders.dart index cc474869a..dcd3fcc1a 100644 --- a/lib/widgets/common/fx/borders.dart +++ b/lib/widgets/common/fx/borders.dart @@ -1,7 +1,8 @@ +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:flutter/material.dart'; class AvesBorder { - static Color _borderColor(BuildContext context) => Theme.of(context).brightness == Brightness.dark ? Colors.white30 : Colors.black26; + static Color _borderColor(BuildContext context) => Theme.of(context).isDark ? Colors.white30 : Colors.black26; // 1 device pixel for straight lines is fine static double straightBorderWidth(BuildContext context) => 1 / View.of(context).devicePixelRatio; diff --git a/lib/widgets/common/grid/sections/fixed/scale_overlay.dart b/lib/widgets/common/grid/sections/fixed/scale_overlay.dart index 05b3b8c7f..56be3a958 100644 --- a/lib/widgets/common/grid/sections/fixed/scale_overlay.dart +++ b/lib/widgets/common/grid/sections/fixed/scale_overlay.dart @@ -1,5 +1,6 @@ import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves_model/aves_model.dart'; import 'package:aves_utils/aves_utils.dart'; @@ -99,7 +100,7 @@ class _OverlayBackgroundState extends State<_OverlayBackground> { } BoxDecoration _buildBackgroundDecoration(BuildContext context) { - final isDark = Theme.of(context).brightness == Brightness.dark; + final isDark = Theme.of(context).isDark; final gradientCenter = widget.gradientCenter; return _initialized ? BoxDecoration( diff --git a/lib/widgets/common/grid/sections/mosaic/scale_overlay.dart b/lib/widgets/common/grid/sections/mosaic/scale_overlay.dart index d50a8344e..13d372f95 100644 --- a/lib/widgets/common/grid/sections/mosaic/scale_overlay.dart +++ b/lib/widgets/common/grid/sections/mosaic/scale_overlay.dart @@ -1,4 +1,5 @@ import 'package:aves/theme/durations.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/grid/sections/mosaic/scale_grid.dart'; import 'package:aves/widgets/common/providers/media_query_data_provider.dart'; import 'package:aves_utils/aves_utils.dart'; @@ -104,7 +105,7 @@ class _OverlayBackgroundState extends State<_OverlayBackground> { } BoxDecoration _buildBackgroundDecoration(BuildContext context) { - final isDark = Theme.of(context).brightness == Brightness.dark; + final isDark = Theme.of(context).isDark; return _initialized ? BoxDecoration( color: isDark ? Colors.black87 : const Color(0xDDFFFFFF), diff --git a/lib/widgets/common/identity/aves_icons.dart b/lib/widgets/common/identity/aves_icons.dart index 504ba9fa9..3b3584be7 100644 --- a/lib/widgets/common/identity/aves_icons.dart +++ b/lib/widgets/common/identity/aves_icons.dart @@ -6,6 +6,7 @@ import 'package:aves/model/entry/extensions/props.dart'; import 'package:aves/model/vaults/vaults.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/grid/theme.dart'; import 'package:aves_model/aves_model.dart'; import 'package:flutter/material.dart'; @@ -295,7 +296,7 @@ class OverlayIcon extends StatelessWidget { margin: margin, padding: text != null ? EdgeInsetsDirectional.only(end: size / 4) : null, decoration: BoxDecoration( - color: Theme.of(context).brightness == Brightness.dark ? const Color(0xAA000000) : const Color(0xCCFFFFFF), + color: Theme.of(context).isDark ? const Color(0xAA000000) : const Color(0xCCFFFFFF), borderRadius: BorderRadius.all(Radius.circular(size)), ), child: text == null diff --git a/lib/widgets/common/identity/buttons/overlay_button.dart b/lib/widgets/common/identity/buttons/overlay_button.dart index 0485cce4c..e9fa810aa 100644 --- a/lib/widgets/common/identity/buttons/overlay_button.dart +++ b/lib/widgets/common/identity/buttons/overlay_button.dart @@ -1,5 +1,6 @@ import 'package:aves/model/settings/settings.dart'; import 'package:aves/theme/themes.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:aves/widgets/common/fx/borders.dart'; import 'package:flutter/material.dart'; @@ -174,7 +175,7 @@ class OverlayTextButton extends StatelessWidget { style: ButtonStyle( backgroundColor: MaterialStateProperty.all(Themes.overlayBackgroundColor(brightness: theme.brightness, blurred: blurred)), foregroundColor: MaterialStateProperty.all(theme.colorScheme.onSurface), - overlayColor: theme.brightness == Brightness.dark ? MaterialStateProperty.all(Colors.white.withOpacity(0.12)) : null, + overlayColor: theme.isDark ? MaterialStateProperty.all(Colors.white.withOpacity(0.12)) : null, minimumSize: _minSize, side: MaterialStateProperty.all(AvesBorder.curvedSide(context)), shape: MaterialStateProperty.all(const RoundedRectangleBorder( diff --git a/lib/widgets/common/identity/highlight_title.dart b/lib/widgets/common/identity/highlight_title.dart index da91fc818..1882dc322 100644 --- a/lib/widgets/common/identity/highlight_title.dart +++ b/lib/widgets/common/identity/highlight_title.dart @@ -2,6 +2,7 @@ import 'package:aves/model/settings/settings.dart'; import 'package:aves/theme/colors.dart'; import 'package:aves/widgets/common/basic/text/outlined.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/fx/highlight_decoration.dart'; import 'package:aves_model/aves_model.dart'; import 'package:flutter/material.dart'; @@ -27,7 +28,7 @@ class HighlightTitle extends StatelessWidget { static List shadows(BuildContext context) => [ Shadow( - color: Theme.of(context).brightness == Brightness.dark ? Colors.black : Colors.white, + color: Theme.of(context).isDark ? Colors.black : Colors.white, offset: const Offset(0, 1), blurRadius: 2, ) diff --git a/lib/widgets/dialogs/item_picker.dart b/lib/widgets/dialogs/item_picker.dart index c13726e17..91fff9052 100644 --- a/lib/widgets/dialogs/item_picker.dart +++ b/lib/widgets/dialogs/item_picker.dart @@ -3,6 +3,7 @@ import 'dart:math'; import 'package:aves/model/entry/entry.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/fx/borders.dart'; import 'package:aves/widgets/common/thumbnail/image.dart'; import 'package:flutter/material.dart'; @@ -50,7 +51,7 @@ class ItemPicker extends StatelessWidget { bottom: -1, child: Container( decoration: BoxDecoration( - color: Theme.of(context).brightness == Brightness.dark ? const Color(0xAA000000) : const Color(0xCCFFFFFF), + color: Theme.of(context).isDark ? const Color(0xAA000000) : const Color(0xCCFFFFFF), border: AvesBorder.border(context), borderRadius: actionBoxBorderRadius, ), diff --git a/lib/widgets/settings/common/tile_leading.dart b/lib/widgets/settings/common/tile_leading.dart index efbf10d1d..48e47df18 100644 --- a/lib/widgets/settings/common/tile_leading.dart +++ b/lib/widgets/settings/common/tile_leading.dart @@ -1,5 +1,6 @@ import 'package:aves/theme/durations.dart'; import 'package:aves/theme/styles.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/identity/aves_filter_chip.dart'; import 'package:decorated_icon/decorated_icon.dart'; import 'package:flutter/material.dart'; @@ -16,7 +17,8 @@ class SettingsTileLeading extends StatelessWidget { @override Widget build(BuildContext context) { - final colorScheme = Theme.of(context).colorScheme; + final theme = Theme.of(context); + final colorScheme = theme.colorScheme; return AnimatedContainer( padding: const EdgeInsets.all(6), decoration: BoxDecoration( @@ -32,7 +34,7 @@ class SettingsTileLeading extends StatelessWidget { icon, size: 18, color: DefaultTextStyle.of(context).style.color, - shadows: colorScheme.brightness == Brightness.dark ? AStyles.embossShadows : null, + shadows: theme.isDark ? AStyles.embossShadows : null, ), ); } diff --git a/lib/widgets/stats/percent_text.dart b/lib/widgets/stats/percent_text.dart index 839b41ce0..8bdb0b410 100644 --- a/lib/widgets/stats/percent_text.dart +++ b/lib/widgets/stats/percent_text.dart @@ -1,5 +1,6 @@ import 'package:aves/theme/styles.dart'; import 'package:aves/widgets/common/basic/text/outlined.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -20,7 +21,7 @@ class LinearPercentIndicatorText extends StatelessWidget { TextSpan( text: percentFormat.format(percent), style: TextStyle( - shadows: theme.brightness == Brightness.dark ? AStyles.embossShadows : null, + shadows: theme.isDark ? AStyles.embossShadows : null, ), ) ], diff --git a/lib/widgets/viewer/entry_vertical_pager.dart b/lib/widgets/viewer/entry_vertical_pager.dart index a3eaa15e1..5d890dce2 100644 --- a/lib/widgets/viewer/entry_vertical_pager.dart +++ b/lib/widgets/viewer/entry_vertical_pager.dart @@ -11,6 +11,7 @@ import 'package:aves/model/settings/settings.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/common/behaviour/springy_scroll_physics.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/viewer/action/entry_action_delegate.dart'; import 'package:aves/widgets/viewer/controls/controller.dart'; import 'package:aves/widgets/viewer/controls/intents.dart'; @@ -171,7 +172,7 @@ class _ViewerVerticalPageViewState extends State { return ValueListenableBuilder( valueListenable: widget.overlayOpacity, builder: (context, overlayOpacity, child) { - final background = Theme.of(context).brightness == Brightness.dark ? Colors.black : Color.lerp(Colors.black, Colors.white, overlayOpacity)!; + final background = Theme.of(context).isDark ? Colors.black : Color.lerp(Colors.black, Colors.white, overlayOpacity)!; return Container( color: background.withOpacity(backgroundOpacity), child: child, diff --git a/lib/widgets/viewer/entry_viewer_page.dart b/lib/widgets/viewer/entry_viewer_page.dart index 766d0cb45..feaaffa2d 100644 --- a/lib/widgets/viewer/entry_viewer_page.dart +++ b/lib/widgets/viewer/entry_viewer_page.dart @@ -1,6 +1,7 @@ import 'package:aves/model/entry/entry.dart'; import 'package:aves/model/source/collection_lens.dart'; import 'package:aves/widgets/common/basic/scaffold.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/viewer/controls/controller.dart'; import 'package:aves/widgets/viewer/entry_viewer_stack.dart'; import 'package:aves/widgets/viewer/overlay/bottom.dart'; @@ -26,6 +27,8 @@ class EntryViewerPage extends StatefulWidget { static EdgeInsets snackBarMargin(BuildContext context) { return EdgeInsets.only(bottom: ViewerBottomOverlay.actionSafeHeight(context)); } + + static Color getBackground(BuildContext context) => Theme.of(context).isDark ? Colors.black : Colors.white; } class _EntryViewerPageState extends State { @@ -56,11 +59,7 @@ class _EntryViewerPageState extends State { viewerController: _viewerController, ), ), - backgroundColor: Navigator.canPop(context) - ? Colors.transparent - : Theme.of(context).brightness == Brightness.dark - ? Colors.black - : Colors.white, + backgroundColor: Navigator.canPop(context) ? Colors.transparent : EntryViewerPage.getBackground(context), resizeToAvoidBottomInset: false, ); } diff --git a/lib/widgets/viewer/overlay/details/details.dart b/lib/widgets/viewer/overlay/details/details.dart index 18f6e8ce7..9556ada7a 100644 --- a/lib/widgets/viewer/overlay/details/details.dart +++ b/lib/widgets/viewer/overlay/details/details.dart @@ -6,6 +6,7 @@ import 'package:aves/model/settings/settings.dart'; import 'package:aves/services/common/services.dart'; import 'package:aves/theme/durations.dart'; import 'package:aves/theme/styles.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/viewer/multipage/controller.dart'; import 'package:aves/widgets/viewer/overlay/details/date.dart'; import 'package:aves/widgets/viewer/overlay/details/description.dart'; @@ -136,7 +137,7 @@ class ViewerDetailOverlayContent extends StatelessWidget { static const double iconPadding = 8.0; static const double iconSize = 16.0; - static List? shadows(BuildContext context) => Theme.of(context).brightness == Brightness.dark ? AStyles.embossShadows : null; + static List? shadows(BuildContext context) => Theme.of(context).isDark ? AStyles.embossShadows : null; const ViewerDetailOverlayContent({ super.key, diff --git a/lib/widgets/viewer/overlay/video/progress_bar.dart b/lib/widgets/viewer/overlay/video/progress_bar.dart index 2da712a1e..af0f29086 100644 --- a/lib/widgets/viewer/overlay/video/progress_bar.dart +++ b/lib/widgets/viewer/overlay/video/progress_bar.dart @@ -5,6 +5,7 @@ import 'package:aves/theme/format.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/theme/styles.dart'; import 'package:aves/theme/themes.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/common/fx/blurred.dart'; import 'package:aves/widgets/common/fx/borders.dart'; import 'package:aves_video/aves_video.dart'; @@ -39,9 +40,9 @@ class _VideoProgressBarState extends State { @override Widget build(BuildContext context) { final blurred = settings.enableBlurEffect; - final brightness = Theme.of(context).brightness; + final theme = Theme.of(context); final textStyle = TextStyle( - shadows: brightness == Brightness.dark ? AStyles.embossShadows : null, + shadows: theme.isDark ? AStyles.embossShadows : null, ); const strutStyle = StrutStyle( forceStrutHeight: true, @@ -71,7 +72,7 @@ class _VideoProgressBarState extends State { alignment: Alignment.center, padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 16), decoration: BoxDecoration( - color: Themes.overlayBackgroundColor(brightness: brightness, blurred: blurred), + color: Themes.overlayBackgroundColor(brightness: theme.brightness, blurred: blurred), border: AvesBorder.border(context), borderRadius: const BorderRadius.all(Radius.circular(radius)), ), diff --git a/lib/widgets/viewer/visual/error.dart b/lib/widgets/viewer/visual/error.dart index 51a4c7b10..5354d563d 100644 --- a/lib/widgets/viewer/visual/error.dart +++ b/lib/widgets/viewer/visual/error.dart @@ -4,6 +4,7 @@ import 'package:aves/model/entry/entry.dart'; import 'package:aves/theme/icons.dart'; import 'package:aves/widgets/common/extensions/build_context.dart'; import 'package:aves/widgets/common/identity/empty.dart'; +import 'package:aves/widgets/viewer/entry_viewer_page.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -40,7 +41,7 @@ class _ErrorViewState extends State { // use container to expand constraints, so that the user can tap anywhere child: Container( // opaque to cover potential lower quality layer below - color: Colors.black, + color: EntryViewerPage.getBackground(context), child: FutureBuilder( future: _exists, builder: (context, snapshot) { diff --git a/lib/widgets/wallpaper_page.dart b/lib/widgets/wallpaper_page.dart index 0d438810d..7313af32b 100644 --- a/lib/widgets/wallpaper_page.dart +++ b/lib/widgets/wallpaper_page.dart @@ -7,6 +7,7 @@ import 'package:aves/theme/durations.dart'; import 'package:aves/widgets/aves_app.dart'; import 'package:aves/widgets/common/basic/insets.dart'; import 'package:aves/widgets/common/basic/scaffold.dart'; +import 'package:aves/widgets/common/extensions/theme.dart'; import 'package:aves/widgets/viewer/action/video_action_delegate.dart'; import 'package:aves/widgets/viewer/controls/controller.dart'; import 'package:aves/widgets/viewer/controls/notifications.dart'; @@ -50,7 +51,7 @@ class WallpaperPage extends StatelessWidget { ), ) : const SizedBox(), - backgroundColor: Theme.of(context).brightness == Brightness.dark ? Colors.black : Colors.white, + backgroundColor: Theme.of(context).isDark ? Colors.black : Colors.white, resizeToAvoidBottomInset: false, ); }