我有我Scaffold的Safe Area小部件,我想應用狀態欄主題,但我想Safe Area不允許這樣做。
主頁:
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Container(
decoration: BoxDecoration(
image: DecorationImage(
image: Theme.of(context).brightness == Brightness.light
? const AssetImage('assets/images/lgt_bg.png')
: const AssetImage('assets/images/drk_bg.png'),
fit: BoxFit.cover,
),
),
child: Scaffold(
backgroundColor: Colors.transparent,
appBar: AppBar(
title: const Text(
"MnbPub",
),
),
body: Container(),
),
),
);
主題檔案:
class LightTheme {
static final apptheme = ThemeData.light().copyWith(
appBarTheme: const AppBarTheme(
systemOverlayStyle: SystemUiOverlayStyle(
statusBarColor: Color.fromARGB(255, 254, 222, 225),
statusBarIconBrightness: Brightness.light,
systemNavigationBarColor: Color.fromARGB(255, 254, 222, 225),
systemNavigationBarIconBrightness: Brightness.light,
),
...
此外,我希望改變在全球范圍內發生,而不僅僅是home page.
有什么幫助嗎?
uj5u.com熱心網友回復:
我創建了一個名為 的自定義小部件,ThemedStatusBar它會根據應用程式的主題自動確保您的狀態欄顏色正確。簡單地用它包裝你Scaffold:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class ThemedStatusBar extends StatelessWidget {
const ThemedStatusBar({super.key, required this.child});
final Widget child;
@override
Widget build(BuildContext context) {
return AnnotatedRegion(
value: Theme.of(context).brightness == Brightness.dark
? SystemUiOverlayStyle.light
: SystemUiOverlayStyle.dark,
child: child,
);
}
}
您的小部件順序應該是ThemedStatusBar-> Scaffold-> 然后在某個較低的位置(不一定直接) a SafeArea-> <THE_REST_OF_YOUR_WIDGETS>
uj5u.com熱心網友回復:
把SafeArea周圍Container的body引數。
如果SafeArea它圍繞整個Scaffold.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/526230.html
標籤:扑镖
