fix snack bar padding bottom toolbar height sync
This commit is contained in:
+71
-27
@@ -315,6 +315,69 @@ typedef _PendingProxyLoadError = ({
|
|||||||
String? url,
|
String? url,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
class _BrowserScaffoldTheme extends ConsumerWidget {
|
||||||
|
final String? selectedTabId;
|
||||||
|
final bool isSmallWebActive;
|
||||||
|
final bool tabInFullScreen;
|
||||||
|
final bool sheetDisplayed;
|
||||||
|
final Size bottomAppBarContentSize;
|
||||||
|
final bool findInPageVisible;
|
||||||
|
final double findInPageHeight;
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const _BrowserScaffoldTheme({
|
||||||
|
required this.selectedTabId,
|
||||||
|
required this.isSmallWebActive,
|
||||||
|
required this.tabInFullScreen,
|
||||||
|
required this.sheetDisplayed,
|
||||||
|
required this.bottomAppBarContentSize,
|
||||||
|
required this.findInPageVisible,
|
||||||
|
required this.findInPageHeight,
|
||||||
|
required this.child,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
|
final toolbarState = isSmallWebActive
|
||||||
|
? ToolbarVisibility.visible
|
||||||
|
: ref.watch(toolbarVisibilityControllerProvider(selectedTabId));
|
||||||
|
final bottomToolbarVisible = isSmallWebActive
|
||||||
|
? !tabInFullScreen
|
||||||
|
: sheetDisplayed ||
|
||||||
|
(!tabInFullScreen && toolbarState == ToolbarVisibility.visible);
|
||||||
|
final bottomInset =
|
||||||
|
(bottomToolbarVisible ? bottomAppBarContentSize.height : 0.0) +
|
||||||
|
8 +
|
||||||
|
(findInPageVisible ? findInPageHeight : 0.0);
|
||||||
|
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
|
return Theme(
|
||||||
|
data: theme.copyWith(
|
||||||
|
bottomSheetTheme: theme.bottomSheetTheme.copyWith(
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
maxWidth:
|
||||||
|
MediaQuery.of(context).size.width -
|
||||||
|
math.max(
|
||||||
|
MediaQuery.of(context).padding.left * 2,
|
||||||
|
MediaQuery.of(context).padding.right * 2,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
snackBarTheme: theme.snackBarTheme.copyWith(
|
||||||
|
behavior: SnackBarBehavior.floating,
|
||||||
|
insetPadding: EdgeInsets.only(
|
||||||
|
left: 16,
|
||||||
|
right: 16,
|
||||||
|
bottom: bottomInset,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: child,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class BrowserScreen extends HookConsumerWidget {
|
class BrowserScreen extends HookConsumerWidget {
|
||||||
const BrowserScreen({super.key});
|
const BrowserScreen({super.key});
|
||||||
|
|
||||||
@@ -757,37 +820,18 @@ class BrowserScreen extends HookConsumerWidget {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Theme with dynamic snackbar margin to position above bottom toolbar
|
|
||||||
final themeData = Theme.of(context).copyWith(
|
|
||||||
bottomSheetTheme: Theme.of(context).bottomSheetTheme.copyWith(
|
|
||||||
constraints: BoxConstraints(
|
|
||||||
maxWidth:
|
|
||||||
MediaQuery.of(context).size.width -
|
|
||||||
math.max(
|
|
||||||
MediaQuery.of(context).padding.left * 2,
|
|
||||||
MediaQuery.of(context).padding.right * 2,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
snackBarTheme: SnackBarThemeData(
|
|
||||||
behavior: SnackBarBehavior.floating,
|
|
||||||
insetPadding: EdgeInsets.only(
|
|
||||||
left: 16,
|
|
||||||
right: 16,
|
|
||||||
bottom:
|
|
||||||
bottomAppBarContentSize.height +
|
|
||||||
8 +
|
|
||||||
(findInPageVisible ? findInPageHeight : 0),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
return PopScope(
|
return PopScope(
|
||||||
//We need this for BackButtonListener to work downstream
|
//We need this for BackButtonListener to work downstream
|
||||||
//No direct pop result will be handled here
|
//No direct pop result will be handled here
|
||||||
canPop: false,
|
canPop: false,
|
||||||
child: Theme(
|
child: _BrowserScaffoldTheme(
|
||||||
data: themeData,
|
selectedTabId: selectedTabId,
|
||||||
|
isSmallWebActive: isSmallWebActive,
|
||||||
|
tabInFullScreen: tabInFullScreen,
|
||||||
|
sheetDisplayed: sheetDisplayed,
|
||||||
|
bottomAppBarContentSize: bottomAppBarContentSize,
|
||||||
|
findInPageVisible: findInPageVisible,
|
||||||
|
findInPageHeight: findInPageHeight,
|
||||||
child: Scaffold(
|
child: Scaffold(
|
||||||
// Minimal scaffold - only for Material overlay support (SnackBars)
|
// Minimal scaffold - only for Material overlay support (SnackBars)
|
||||||
resizeToAvoidBottomInset: false,
|
resizeToAvoidBottomInset: false,
|
||||||
|
|||||||
Reference in New Issue
Block a user