Я хочу использовать строку светового состояния для некоторых из моих экранов, и мне нужно установить ее обратно на темную статус, когда перемещается с этих экранов. Я сделал виджет и завернул эти экраны для него. Это работает для Android, а не для iOS. Мне не нужно использовать Appbar и Annoted Region < /p>
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class LightStatusBarWidget extends ConsumerStatefulWidget {
final VoidCallback? onPop;
final Widget child;
final bool didReplace;
const LightStatusBarWidget({
super.key,
required this.child,
this.onPop,
this.didReplace = true,
});
@override
ConsumerState createState() => _LightStatusBarWidgetState();
}
class _LightStatusBarWidgetState extends ConsumerState {
@override
void initState() {
super.initState();
SystemChrome.setEnabledSystemUIMode(
SystemUiMode.manual,
overlays: [SystemUiOverlay.top],
);
WidgetsBinding.instance.addPostFrameCallback((_) {
setStatusBarColor(isLight: true);
});
}
@override
void dispose() {
WidgetsBinding.instance.addPostFrameCallback((_) {
setStatusBarColor(isLight: widget.didReplace ? false : true);
});
super.dispose();
}
void setStatusBarColor({bool isLight = false}) {
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
statusBarColor: isLight ? Colors.white : Colors.black,
statusBarIconBrightness: isLight ? Brightness.dark : Brightness.light,
statusBarBrightness: isLight ? Brightness.light : Brightness.dark,
),
);
}
@override
Widget build(BuildContext context) {
return PopScope(
onPopInvokedWithResult: (didPop, result) {
setStatusBarColor(isLight: false);
widget.onPop?.call();
},
child: SafeArea(child: widget.child),
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... ing-in-ios