Як я можу просто встановити висоту AppBar
в Flutter?
Заголовок стовпчика повинен залишатися по центру вертикально (в цьому AppBar
).
Як я можу просто встановити висоту AppBar
в Flutter?
Заголовок стовпчика повинен залишатися по центру вертикально (в цьому AppBar
).
Відповіді:
Ви можете використовувати 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: // ...
)
);
}
}
centerTitle
майно для його центрування.
AppBar
Ви можете використовувати PreferredSize
і flexibleSpace
для нього:
appBar: PreferredSize(
preferredSize: Size.fromHeight(100.0),
child: AppBar(
automaticallyImplyLeading: false, // hides leading widget
flexibleSpace: SomeWidget(),
)
),
Таким чином , ви можете тримати elevation
в AppBar
для підтримки його тінь видно і мати власний ріст, який є те , що я просто шукав. SomeWidget
Однак вам потрібно встановити інтервал .
На момент написання цього матеріалу я цього не знав PreferredSize
. Відповідь Цінна краще досягти цього.
Ви можете створити свій власний віджет із власною висотою:
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),
),
),
);
}
}
На додаток до відповіді @ Cinn, ви можете визначити такий клас
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
);
}
або цим способом
class MyAppBar extends PreferredSize {
MyAppBar({Key key, Widget title}) : super(
key: key,
preferredSize: Size.fromHeight(50),
child: AppBar(
title: title,
// maybe other AppBar properties
),
);
}
а потім використовувати його замість стандартного
Відповідь Цінна чудова, але в цьому одна проблема.
PreferredSize
Віджет буде негайно почати у верхній частині екрану, без урахування рядка стану, так що деякі з його висоти будуть затьмарені висотою рядка стану. Це також пояснює бічні вирізи.
Рішення : оберніть preferredSize
дитину дитини символомSafeArea
appBar: PreferredSize(
//Here is the preferred height.
preferredSize: Size.fromHeight(50.0),
child: SafeArea(
child: AppBar(
flexibleSpace: ...
),
),
),
Якщо ви не хочете використовувати властивість flexіSpace, тоді немає необхідності у всьому цьому, оскільки інші властивості AppBar
волі автоматично враховують рядок стану.
SafeArea
це зменшити висоту рядка стану, але ви знову додали його за допомогою MediaQuery.of(context).padding.top
? Я думаю, що SafeArea тут не потрібна.
SafeArea
важливо, щоб рядок програми не збігався з рядком стану, але MediaQuery.of(context).padding.top
насправді це не потрібно. Я відредагував відповідь, дякую.
Ви можете використовувати властивість toolbarHeight Appbar, вона робить саме те, що ви хочете.
toolbarHeight
:Більше немає потреби використовувати PreferredSize
. Використовуйте toolbarHeight
з flexibleSpace
.
AppBar(
toolbarHeight: 120, // Set this height
flexibleSpace: Container(
color: Colors.orange,
child: Column(
children: [
Text('1'),
Text('2'),
Text('3'),
Text('4'),
],
),
),
)
Якщо ви використовуєте Visual Code, Ctrl + клацніть на функцію AppBar.
Widget demoPage() {
AppBar appBar = AppBar(
title: Text('Demo'),
);
return Scaffold(
appBar: appBar,
body: /*
page body
*/,
);
}
І відредагуйте цю частину.
app_bar.dart will open and you can find
preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),
Різниця у зрості!
AppBar
, а не "встановлення".