Jak mogę po prostu ustawić wysokość AppBar in Flutter?
Tytuł paska powinien pozostać wyśrodkowany w pionie (w tym AppBar).
Jak mogę po prostu ustawić wysokość AppBar in Flutter?
Tytuł paska powinien pozostać wyśrodkowany w pionie (w tym AppBar).
Odpowiedzi:
Możesz użyć PreferredSize :
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Example',
home: Scaffold(
appBar: PreferredSize(
preferredSize: Size.fromHeight(50.0), // here the desired height
child: AppBar(
// ...
)
),
body: // ...
)
);
}
}
centerTitlewłaściwości, aby ją wyśrodkować.
AppBar
Możesz użyć PreferredSizei flexibleSpacedo tego:
appBar: PreferredSize(
preferredSize: Size.fromHeight(100.0),
child: AppBar(
automaticallyImplyLeading: false, // hides leading widget
flexibleSpace: SomeWidget(),
)
),
W ten sposób można zachować elevationod AppBarza utrzymanie jego cień widoczne i mają niestandardową wysokość, która jest co właśnie szukają. Musisz jednak ustawić odstępy SomeWidget.
W chwili pisania tego nie byłem tego świadomy PreferredSize. Odpowiedź Cinna jest lepsza do osiągnięcia tego.
Możesz stworzyć swój własny widżet o niestandardowej wysokości:
import "package:flutter/material.dart";
class Page extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Column(children : <Widget>[new CustomAppBar("Custom App Bar"), new Container()],);
}
}
class CustomAppBar extends StatelessWidget {
final String title;
final double barHeight = 50.0; // change this for different heights
CustomAppBar(this.title);
@override
Widget build(BuildContext context) {
final double statusbarHeight = MediaQuery
.of(context)
.padding
.top;
return new Container(
padding: new EdgeInsets.only(top: statusbarHeight),
height: statusbarHeight + barHeight,
child: new Center(
child: new Text(
title,
style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
),
),
);
}
}
Oprócz odpowiedzi @ Cinn możesz zdefiniować taką klasę
class MyAppBar extends AppBar with PreferredSizeWidget {
@override
get preferredSize => Size.fromHeight(50);
MyAppBar({Key key, Widget title}) : super(
key: key,
title: title,
// maybe other AppBar properties
);
}
lub w ten sposób
class MyAppBar extends PreferredSize {
MyAppBar({Key key, Widget title}) : super(
key: key,
preferredSize: Size.fromHeight(50),
child: AppBar(
title: title,
// maybe other AppBar properties
),
);
}
a następnie użyj go zamiast standardowego
Odpowiedź Cinna jest świetna, ale jest jedna rzecz nie tak.
Plik PreferredSizeWidget rozpocznie się natychmiast w górnej części ekranu, bez uwzględnienia na pasku stanu, więc niektóre z jej wysokość zostanie zasłonięta przez wysokość paska stanu jest. Dotyczy to również bocznych nacięć.
Rozwiązanie : owiń preferredSizedziecko rozszerzeniemSafeArea
appBar: PreferredSize(
//Here is the preferred height.
preferredSize: Size.fromHeight(50.0),
child: SafeArea(
child: AppBar(
flexibleSpace: ...
),
),
),
Jeśli nie chcesz używać właściwości flexibleSpace, nie ma takiej potrzeby, ponieważ inne właściwości AppBarwill automatycznie uwzględniają pasek stanu.
SafeAreaczy zmniejszyć wysokość paska stanu, ale dodałeś go ponownie za pomocą MediaQuery.of(context).padding.top? Myślę, że SafeArea nie jest tutaj potrzebna.
SafeAreaJest ważne, aby pasek aplikacji nie nakładał się na pasek stanu, ale w MediaQuery.of(context).padding.toprzeczywistości nie jest potrzebny. Poprawiłem odpowiedź, dzięki.
Możesz użyć właściwości toolbarHeight w Appbar, robi dokładnie to, co chcesz.
Jeśli jesteś w kodzie wizualnym, Ctrl + kliknij funkcję AppBar.
Widget demoPage() {
AppBar appBar = AppBar(
title: Text('Demo'),
);
return Scaffold(
appBar: appBar,
body: /*
page body
*/,
);
}
I edytuj ten kawałek.
app_bar.dart will open and you can find
preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),
Różnica wysokości!


AppBar, a nie „ustawienie” jej.