Search code examples
androidflutterdartstatusbarandroid-statusbar

Flutter Status Bar transparent


enter image description here

How can I make the status and the option bar (on the bottom) transparent?

I tried many thinks but its still black with white text

Here is the code that I already implemented:

Future main() async {
  WidgetsFlutterBinding.ensureInitialized();
...
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      systemStatusBarContrastEnforced: true,
      statusBarColor: Colors.transparent,
      systemNavigationBarColor: Colors.transparent,
      systemNavigationBarDividerColor: Colors.transparent,
      systemNavigationBarIconBrightness: Brightness.light,
      statusBarIconBrightness: Brightness.light));

  
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge,
      overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
...

runApp(...)

and in my Material app:

return MaterialApp.router(
      theme: ThemeData(
        appBarTheme: AppBarTheme(
            //systemOverlayStyle: SystemUiOverlayStyle.light,
            backgroundColor: Colors.transparent),
      ),
      color: Colors.transparent,
...


I know that AppBar and status bar is not the same (just wanted to include it anyway). Thanks so much in advance.

UPDATE:

I tried to remove the Safearea, who apparently conflicted with the status and navigation bar. It resulted in this:

enter image description here

As now its still not really transparent and also the bottom is messed up. Any ideas?


Solution

  • As Frank Nike suggests, the SafeArea widget conflicts with the

    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
          statusBarColor: Colors.transparent,
          systemNavigationBarColor: Colors.transparent,
    systemNavigationBarIconBrightness: Brightness.light
    ));
    

    Therefore, what solved the problem for me was removing the SafeArea completely and setting:

    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
          overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);