ฉันจะตั้งค่าความสูงของ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
ในขณะที่เขียนนี้ผมไม่ได้ตระหนักถึง คำตอบของ Cinn ดีกว่าที่จะบรรลุสิ่งนี้
คุณสามารถสร้างวิดเจ็ตของคุณเองด้วยความสูงที่กำหนดเอง:
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
),
);
}
แล้วใช้แทนมาตรฐาน
คำตอบของ Cinnนั้นยอดเยี่ยม แต่มีสิ่งหนึ่งที่ผิดปกติ
PreferredSize
เครื่องมือที่จะเริ่มต้นได้ทันทีที่ด้านบนของหน้าจอโดยไม่ต้องคิดเป็นแถบสถานะเพื่อให้บางส่วนของความสูงของมันจะถูกเงาโดยความสูงแถบสถานะของ นอกจากนี้ยังอธิบายถึงรอยหยักด้านข้าง
วิธีแก้ปัญหา : ห่อตัวpreferredSize
เด็กด้วยSafeArea
appBar: PreferredSize(
//Here is the preferred height.
preferredSize: Size.fromHeight(50.0),
child: SafeArea(
child: AppBar(
flexibleSpace: ...
),
),
),
หากคุณไม่ต้องการใช้คุณสมบัติ flexibleSpace คุณก็ไม่จำเป็นต้องทำสิ่งนั้นทั้งหมดเพราะคุณสมบัติอื่น ๆ ของAppBar
จะพิจารณาแถบสถานะโดยอัตโนมัติ
SafeArea
เป็นการลดความสูงของแถบสถานะ แต่คุณเพิ่มอีกครั้งด้วยMediaQuery.of(context).padding.top
หรือไม่? ฉันคิดว่าที่นี่ไม่จำเป็นต้องใช้ SafeArea
SafeArea
เป็นสิ่งสำคัญเพื่อให้แถบแอปไม่ทับซ้อนกับแถบสถานะ แต่MediaQuery.of(context).padding.top
ไม่จำเป็นจริงๆ ฉันแก้ไขคำตอบแล้วขอบคุณ
คุณสามารถใช้ toolbarHeight คุณสมบัติของ Appbar มันทำในสิ่งที่คุณต้องการ
หากคุณอยู่ใน 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
ไม่ใช่ 'การตั้งค่า' มัน