J'ai récemment essayé de garder une icône Hamburger pour mon curseur de menu sans AppBar ou du moins complètement invisible. La première tentative était avec un SafeArea mais cela a vidé Scaffold. Ensuite, j'ai essayé de régler l'opacité sur 0,0 comme indiqué sur le code ci-dessous. Mais il donne le même résultat que SafeArea sans rien sur Scaffold. Quelqu'un peut-il aider?
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: ThemeData(
// Define the default Brightness and Colors
brightness: Brightness.dark,
primaryColor: Colors.lightBlue[800],
accentColor: Colors.cyan[600],
),
home: Scaffold(
Opacity(
opacity: 0.0,
appBar: AppBar(),
),
drawer: new Drawer(
child: new ListView(),
),
body: new Center(
child: new Column(
children: <Widget>[],
))),
);
}
}
3 Réponses :
Si je vous ai bien compris, vous souhaitez afficher un bouton de menu pour afficher le Tiroir sans afficher de AppBar .
Une option consiste à utiliser un Stack pour le corps du Sacffold.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => MyAppState();
}
class MyAppState extends State<MyApp> {
var scaffoldKey = GlobalKey<ScaffoldState>();
@override
Widget build(BuildContext context) {
return new MaterialApp(
theme: ThemeData(
// Define the default Brightness and Colors
brightness: Brightness.dark,
primaryColor: Colors.lightBlue[800],
accentColor: Colors.cyan[600],
),
home: Scaffold(
key: scaffoldKey,
drawer: new Drawer(
child: new ListView(),
),
body: Stack(
children: <Widget>[
new Center(
child: new Column(
children: <Widget>[],
)),
Positioned(
left: 10,
top: 20,
child: IconButton(
icon: Icon(Icons.menu),
onPressed: () => scaffoldKey.currentState.openDrawer(),
),
),
],
),
),
);
}
}
Remarque pour les débutants comme moi: j'ai utilisé l'approche ci-dessus sur un widget sans état, les choses se sont cassées en revenant d'une page nouvellement consultée. "le getter 'usergesture progress' a été appelé sur null" était l'erreur. les choses fonctionnaient bien lorsque le widget était changé en widget avec état.
Je reçois NoSuchMethodError: membre invalide sur null: 'openDrawer'
Vous pouvez rendre AppBar complètement invisible en définissant la même couleur et altitude = 0 capture d'écran ici
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Color(0xFF198BAA),
appBar: AppBar(
backgroundColor: Color(0xFF198BAA),
elevation: 0.0,
),
drawer: Drawer(
child: SafeArea(
child: Padding(
padding: const EdgeInsets.all(18.0),
child: ListView(
children: <Widget>[
ListTile(
title: Text('Item1'),
)
],
),
),
),
),
);
}
}
L'Appbar viendra entre les deux s'il y a un contenu défilable dans le corps de l'échafaud.
Si j'ai bien compris votre question.
Vous avez votre propre bouton Menu personnalisé pour ouvrir / fermer le tiroir. Vous ne souhaitez pas non plus utiliser AppBar.
Dans ce cas, vous pouvez utiliser l'objet GlobalKey pour ouvrir Drawer.
import 'package:flutter/material.dart';
GlobalKey<ScaffoldState> _scaffoldState = GlobalKey<ScaffoldState>();
return Scaffold(
key: _scaffoldState,
drawer: DrawerView(),
body: ThemeScreen(
header: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
IconButton(
icon: Icon(Icons.menu,
color: Colors.white,
size: 15),
onPressed: (){
_scaffoldState.currentState.openDrawer();
},
),
],
),
),
);