Reputation: 4405
I am trying to figure out if it is posible to place a FloatingActionButton
behind a BottomSheet
or, in other words, how to make a bottom sheet be in front of everything when being shown. I do not mean a modal bottom sheet, but a persistent one. So my question is if it's possible to achieve or if there's some workaround someone might want to share.
Here you see the example of the actual behavior when having both a persistent bottom sheet and a floating action button.
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
floatingActionButton: FloatingActionButton(onPressed: (){},),
appBar: AppBar(title: const Text(_title)),
body: const MyStatelessWidget(),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: ElevatedButton(
child: const Text('showBottomSheet'),
onPressed: () {
Scaffold.of(context).showBottomSheet<void>(
(BuildContext context) {
return Container(
height: 200,
color: Colors.amber,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('BottomSheet'),
ElevatedButton(
child: const Text('Close BottomSheet'),
onPressed: () {
Navigator.pop(context);
})
],
),
),
);
},
);
},
),
);
}
}
Thanks in advance!
Upvotes: 2
Views: 8389
Reputation: 848
Wrap Floating Action button inside column and give sizedBox of dessired heightas children like
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: () async {
},
child: const Text('Save'),
),
SizedBox(
height: _bannerAd!.size.height.toDouble(),
)
],
),
Upvotes: 0
Reputation: 56
Try use a Stack
on the body
instead of floatingActionButton
like this:
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: Stack(
children: [
const MyStatelessWidget(),
Positioned(
bottom: 10,
right: 10,
child: FloatingActionButton(
onPressed: () {},
),
)
],
),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: ElevatedButton(
child: const Text('showBottomSheet'),
onPressed: () {
Scaffold.of(context).showBottomSheet<void>(
(BuildContext context) {
return Container(
height: 200,
color: Colors.amber,
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
const Text('BottomSheet'),
ElevatedButton(
child: const Text('Close BottomSheet'),
onPressed: () {
Navigator.pop(context);
})
],
),
),
);
},
);
},
),
);
}
}
Upvotes: 2