I am trying to make a launcher in flutter, however I cannot figure out how to make a drawer that can be swiped up from the home screen, like in other launchers like nova or poco or many others. I understand that the app drawer closely matches a bottom sheet, but bottom sheets in flutter need to be first tapped on them and then dragged. How do I drag a widget up from anywhere on the scaffold?
To obtain the functionality you're looking for use this package: flutter slider
Example:
with code as simple as this you can obtain the slideup bottom sheet like functionality:
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("SlidingUpPanelExample"),
),
body: SlidingUpPanel(
panel: Center(
child: Text("This is the sliding Widget"),
),
body: Center(
child: Text("This is the Widget behind the sliding panel"),
),
),
);
}
Related
We have a endDrawer that is displaying behind the bottomNavigationBar. We want it to display over the navigation bar.
We may need a refactor but for now, we have a main Scaffold like so:
return Scaffold(
key: shellKey,
drawer: const MainDrawer(),
body: child,
extendBody: true,
bottomNavigationBar: const ExpandingBottomDrawer(),
);
The router pushes the child to this Scaffold via
ShellRoute(builder: (context, state, child) => AppLayout(child: child),...)
The children are also Scaffolds that have independent endDrawers. In the children, I am triggering opening the endDrawer via _key.currentState!.openEndDrawer(),.
The issue is the endDrawer is visibly behind the bottomNavigationBar. I understand this can be fixed if the endDrawer was on the main Scaffold, but the app is not set up that way and it would be a huge refactor. Is this possible without a refactor?
Thank you!!
You can use another Scaffold widget.
return Scaffold(
drawer: const Drawer(),
bottomNavigationBar: Container(
child: Text("Bottom navBar"),
),
body: Scaffold(
appBar: AppBar(),
drawer: const Drawer(),
),
);
There might be a better way of handling this.
Here is my code
return Scaffold(
body: SafeArea(
appBar:getIsShowAppBar(layoutProvider.currentIndex,
realEstatesProvider) ? AppBar (),
child: IndexedStack(
children: layoutProvider.screens,
index: layoutProvider.currentIndex),
),
bottomNavigationBar: BottomNavigationBar(), );
If you want to show an app bar and hide it when you want you would want to use the SliverAppBar widget witch allows you to make an app bar of your choice and allows to dissapear it when scrolling and other options with animations. https://api.flutter.dev/flutter/material/SliverAppBar-class.html
I want to create a draggable scrolling bottom sheet like this!
here is the design
there will be a button on the top left to go back, there will be a button on the top left to go back, and there is a draggable bottom sheet should I use the stack?
please give me a hint if you have the best way to approach this problem, thank you!
Please refer to below plugin.
Snapping sheet
Snapping sheet provides a highly customizable sheet widget that snaps to different vertical & horizontal positions
This is exact what you need, sliding_up_panel:
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("SlidingUpPanelExample"),
),
body: SlidingUpPanel(
panel: Center(
child: Text("This is the sliding Widget"),
),
body: /* place your google map here */
),
);
}
I am making a practice app in flutter and stuck on this:
How can i align widgets such that;
1. An icon stays at extreme left of appbar
2. Text widget stays in middle.
3. button stays at extreme right of appbar.
here is the image for what i am talking about
use actions property in appbar and then as a child use a row. in that row you can use MainAxisAlignment.spaceBetween or MainAxisAlignment.spaceAround for arranging items.
You can do it using AppBar widget.
Note: If you want to implement drawer then use drawer property.
#override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Title"),
centerTitle: true,
leading: Icon(Icons.menu),
actions: [Icon(Icons.comment)],
),
body: Container(),
);
}
AppBar(title:Text("Your Text),leading:Icon(Icons.menu),actions:[Icon(Icons.favourite)])
Try this code
I have a pane app with Drawer, which I show in a pane layout when the phone is in landscape mode:
To not animate the drawer between pages, I have put it into a Hero.
class SomePage extends Stateless Widget {
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Hero(
child: Material(
elevation: 4.0,
child: MyDrawer(),
tag: "drawer",
),
Expanded(
child: Scaffold(
appBar: ...,
body: ...
)
),
],
);
}
}
The drawer contains a CustomScrollView.
When the user changes pages using Navigator.pushNamed (I am using MaterialApp with onGenerateRoute), the scroll position of the CustomScrollView is reset.
How can I keep the scroll position between page changes (or how can I synchronize the scroll position of the drawer on different pages)?