88 votes

Flutter - Comment définir la couleur de la barre d'état lorsque l'AppBar n'est pas présente ?

Comment définir la couleur de la barre d'état lorsque AppBar n'est pas présente.

J'ai essayé mais ça ne marche pas.

Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
    return new Scaffold(
        body: new Container(
        color: UniQueryColors.colorBackground,
        child: new ListView.builder(
           itemCount: 7,
           itemBuilder: (BuildContext context, int index){
             if (index == 0){
               return addTopInfoSection();
             }
           },
        ),
       ),
    );
}

La sortie ressemble à ça :

enter image description here

1 votes

Comment avez-vous géré l'espace de la barre d'état, en empêchant le contenu de se chevaucher ?

0 votes

@Hannes.T Utilisez mon code ci-dessus

0 votes

Je ne comprends pas où tu ajoutes cette marge supplémentaire pour que ton conteneur bleu ne se chevauche pas.

137voto

Hannes .T Points 334

D'abord, importer services paquet :

import 'package:flutter/services.dart';

Ensuite, il suffit de mettre ceci dans le fonction de construction de votre application :

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  statusBarColor: Colors.blue, //or set color with: Color(0xFF0000FF)
));

En outre, vous pouvez définir des propriétés utiles comme : statusBarIconBrightness , systemNavigationBarColor o systemNavigationBarDividerColor


Si vous préférez une flutter/widget manière de faire la même chose, envisagez d'utiliser les AnnotatedRegion<SystemUiOverlayStyle> widget.

El value: peut être définie comme une SystemUiOverlayStyle() contenant les mêmes propriétés que celles indiquées ci-dessus.


Pour plus d'informations, rendez-vous sur le site Docs API

1 votes

Ajouter une déclaration d'importation : import 'package:flutter/services.dart';

9 votes

Cela ne fonctionne pas bien avec la navigation, ou dans certaines situations, cela ne semble pas fonctionner du tout. J'ai obtenu de meilleurs résultats avec Jordy Sinke La réponse de l'artiste, qui est aussi plus flottante.

1 votes

Quelqu'un a mentionné que cela ne fonctionne que pour Android et non pour ios. T/F ?

98voto

Jordy Points 281

Si vous jetez un coup d'œil à la code source d'AppBar, vous pouvez voir qu'ils utilisent un widget AnnotatedRegion. Le widget AnnotedRegion vous permet de mieux contrôler le style de superposition du système. Il s'agit d'une manière plus souple de configurer les styles du système lorsqu'une barre d'applications n'est pas utilisée.

D'après ce que j'ai compris, ce widget définit automatiquement la couleur de la barre d'état/de navigation lorsque le widget qu'il contient est recouvert par la barre d'état/de navigation.

Vous pouvez envelopper votre widget comme ceci :

import 'package:flutter/services.dart';

...    

Widget build(BuildContext context) {
   return Scaffold(
      body: AnnotatedRegion<SystemUiOverlayStyle>(
         value: SystemUiOverlayStyle.light,                
         child: ...,
      ),
   );
}

Pour plus d'informations sur le widget AnnotatedRegion, rendez-vous sur le site Web de la Commission européenne. Docs API

7 votes

Cela devrait être la réponse acceptée parce qu'elle s'aligne sur la façon dont le cadre de travail le gère.

5 votes

D'accord - il gère également les transitions de page en arrière, si la page précédente utilisait une valeur différente.

0 votes

De même, si j'ai une application avec un thème sombre/clair, j'utilise ce code en valeur : (Theme.of(context).brightness == Brightness.dark) ? SystemUiOverlayStyle.light : SystemUiOverlayStyle.dark

7voto

Shyju Madathil Points 582

Sur Android, ajoutez ce qui suit à onCreate dans MainActivity.java après l'appel à super.onCreate(savedInstanceState) ;

getWindow().setStatusBarColor(0x00000000) ;

ou vous pouvez utiliser le flutter_statusbarcolor plugin

   changeStatusColor(Color color) async {
    try {
      await FlutterStatusbarcolor.setStatusBarColor(color);
    } on PlatformException catch (e) {
      print(e);
    }
  }

Exemple de projet

0 votes

Merci pour vos suggestions. Je vais les vérifier.

7voto

Derekedelaney Points 75

En cherchant SystemChrome, j'ai trouvé ceci : https://docs.flutter.io/flutter/services/SystemChrome/setSystemUIOverlayStyle.html

Juste au-dessus de l'exemple de code se trouve un paragraphe sur AppBar.brightness .

Vous devriez être en mesure d'ajouter une AppBar comme ceci :

Widget build(BuildContext context) {
    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
    return new Scaffold(
        appBar: new AppBar(
            title: new Text('Nice title!'),
            brightness: Brightness.light,
        ),
        body: new Container(
        color: UniQueryColors.colorBackground,
        child: new ListView.builder(
           itemCount: 7,
           itemBuilder: (BuildContext context, int index){
             if (index == 0){
               return addTopInfoSection();
             }
           },
        ),
       ),
    );
}

Voici des informations sur le Luminosité

4voto

YodaScholtz Points 668

La couleur de la barre d'état est rendue par le système Android. La question de savoir si elle peut être définie à partir de Flutter ou non est à débattre : Comment éclairer la barre d'état d'Android avec Flutter ?

Vous pouvez cependant modifier la couleur de la barre d'état dans le code spécifique à Android en modifiant le thème : Comment changer la couleur de la barre d'état dans Android

Pour iOS, vous devrez consulter leur documentation - je ne suis pas familier avec cette plateforme.

Il existe en fait deux bibliothèques Dart, l'une permettant de définir le paramètre thème clair/foncé de la barre d'état et l'autre pour réglage de la couleur . Je n'ai utilisé ni l'un ni l'autre, mais il est clair que quelqu'un d'autre a rencontré le même problème que vous et a fini par développer son propre paquet.

0 votes

Merci pour vos suggestions. Je vais les vérifier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X