I want to use light status bar to some of my screens and need to set it back to dark statusbar when navigate from those screens. I made a widget and wrapped those screens for it. It works for android and not for ios. I dont need to use appbar and annoted region
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<ConsumerStatefulWidget> createState() => _LightStatusBarWidgetState();
}
class _LightStatusBarWidgetState extends ConsumerState<LightStatusBarWidget> {
@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),
);
}
}
I want to use light status bar to some of my screens and need to set it back to dark statusbar when navigate from those screens. I made a widget and wrapped those screens for it. It works for android and not for ios. I dont need to use appbar and annoted region
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<ConsumerStatefulWidget> createState() => _LightStatusBarWidgetState();
}
class _LightStatusBarWidgetState extends ConsumerState<LightStatusBarWidget> {
@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),
);
}
}
Share
Improve this question
asked yesterday
Vinaya AugusthyVinaya Augusthy
315 bronze badges
New contributor
Vinaya Augusthy is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1 Answer
Reset to default 2Check with this code:
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<ConsumerStatefulWidget> createState() => _LightStatusBarWidgetState();
}
class _LightStatusBarWidgetState extends ConsumerState<LightStatusBarWidget> {
@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}) {
if (Theme.of(context).platform == TargetPlatform.iOS) {
// Handle iOS-specific status bar style
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // Transparent to avoid overlay color issues on iOS
statusBarIconBrightness: isLight ? Brightness.dark : Brightness.light,
statusBarBrightness: isLight ? Brightness.light : Brightness.dark,
),
);
} else {
// Handle Android-specific status bar style
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),
);
}
}