फ्लटर में स्टेटस बार का रंग कैसे बदलें?


84

मैं स्टेटस बार के रंग को सफेद में बदलने की कोशिश कर रहा हूं। मैंने इस पब को फड़फड़ाते हुए पाया । मैंने अपने डार्ट फ़ाइलों पर उदाहरण कोड का उपयोग करने की कोशिश की।

जवाबों:


122

मेरे ऐप में पूरी तरह से ठीक काम करता है

import 'package:flutter_statusbarcolor/flutter_statusbarcolor.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarColor(Colors.white);
    return MaterialApp(
      title: app_title,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: HomePage(title: home_title),
    );
  }
}

( यह पैकेज )

UPD: एक और उपाय

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
  statusBarColor: Colors.white
));

8
बहुत धन्यवाद एंड्री; यह काम करता है ... एकमात्र मुद्दा यह है कि पृष्ठभूमि सफेद है, लेकिन घड़ी, वायरलेस और अन्य पाठ और आइकन भी सफेद रंग में हैं .. मुझे यकीन नहीं है कि क्यों !! (मैं पाठ और प्रतीक काले रंग में होने की उम्मीद कर रहा हूं)
मोहम्मद हसन

1
मुझे यह भी नहीं मिला। और मैंने पोस्ट को संपादित किया है - स्टेटस बार का रंग सेट करने के लिए एक और सरल उपाय है
एंड्री तुर्कोव्स्की

1
एक्सेलेंट। बस थोड़ी सी टिप्पणी ... आपको pubspec.yaml फ़ाइल खोलनी होगी और निर्भरता रेखा के नीचे अगली पंक्ति जोड़नी होगी: flutter_statusbarcolor: ^ 0.2.3 (अंतिम संस्करण यहाँ देखें [ pub.dev/packages/flutter -statusbarcolor#-installing-tab -) )
hfunes.com

1
@JayTillu नं। आईओएस के flutter_statusbarcolorलिए आपको AppBarमैन्युअल रूप से प्रत्येक के लिए रंग का उपयोग या सेट करना होगा
एंड्री तुर्कोव्स्की

1
यह स्टेटस बार का बैकग्राउंड बदलता है, न कि स्टेटस बार का टेक्स्ट।
अब्दुल्रहमान मसूद

97

अद्यतन करने की अनुशंषा की जाती है):

नवीनतम स्पंदन संस्करण पर, आपको उपयोग करना चाहिए:

AppBar(
  backwardsCompatibility: false,
  systemOverlayStyle: SystemUiOverlayStyle(statusBarColor: Colors.orange),
)

केवल Android (अधिक लचीलापन):

import 'package:flutter/services.dart';

void main() {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    systemNavigationBarColor: Colors.blue, // navigation bar color
    statusBarColor: Colors.pink, // status bar color
  ));
}

IOS और Android दोनों:

appBar: AppBar(
  backgroundColor: Colors.red, // status bar color
  brightness: Brightness.light, // status bar brightness
)

मैं स्पंदन में नौसिखिया हूं और मैं जानना चाहता हूं कि अगर हम इन लाइनों को किसी भी विजेट के निर्माण की विधि में डाल दें तो क्या होगा? इससे क्या फ़र्क पड़ता है ?
भवानी

यह काम करेगा और इससे कोई फर्क नहीं पड़ता। बस ध्यान रखें, रंग नवीनतम कॉलर के परमेस के साथ सेट किया जाएगा।
योबिन तब

ऐप थीम को हल्के से अंधेरे में बदलने और इसके विपरीत होने पर मैं स्टेटस बार टेक्स्ट का रंग कैसे बदल सकता हूं? क्या ThemeData वर्ग में कोई गुण हैं?
विनोथ विनो

@VinothVino क्षमा करें, लेकिन आप अपनी पसंद का टेक्स्ट कलर स्टेटस बार आइटम को नहीं दे सकते हैं, आप जो कर सकते हैं वह है बदलाव brightness, जहां Brightness.lightकाला पाठ रंग Brightness.darkदिखाता है और सफेद दिखाता है।
CopsOnRoad

उत्तर भाई के लिए धन्यवाद। मैं चमक को गतिशील रूप से कैसे बदल सकता हूं? मैं डार्क मोड बदल रहा हूं, यह ठीक से अपडेट नहीं हो रहा है। अगर मैं ऐप को गर्म करता हूं तो यह काम करता है।
विनोथ विनो

46

इसके बजाय अक्सर सुझाए गए SystemChrome.setSystemUIOverlayStyle()जो एक सिस्टम वाइड सेवा है और एक अलग मार्ग पर रीसेट नहीं होता है, आप AnnotatedRegion<SystemUiOverlayStyle>एक विजेट का उपयोग कर सकते हैं और केवल उस विजेट के लिए प्रभाव डाल सकते हैं जिसे आप लपेटते हैं।

AnnotatedRegion<SystemUiOverlayStyle>(
   value: SystemUiOverlayStyle(
      statusBarColor: Colors.white,
  ),
  child: Scaffold(
      ...
  ),
)

1
यह सबसे अच्छा जवाब है, क्योंकि एक पुश के बाद स्क्रीन पर वापस पॉप करने से स्टेटस बार रीसेट हो जाएगा। यह पहली बार जॉर्डन द्वारा यहां उल्लेख किया गया था stackoverflow.com/a/54593164/4033525
समीर जे

1
मेरा यह भी मानना ​​है कि यह सबसे अच्छा जवाब है अगर हमें पूरे ऐप की जरूरत है
अब्बास

1
मैं इसे एक स्क्रीन में उपयोग कर रहा हूं और यह ऐप के अन्य सभी स्क्रीन पर प्रभाव डाल रहा है। मैं इसे अपनी पहली स्क्रीन पर उपयोग कर रहा हूं और स्वाभाविक रूप से अन्य स्क्रीन जुड़े हुए हैं इसलिए यह सभी स्क्रीन पर इस सफेद में एक ही स्थिति बार का रंग है। इस व्यवहार को कैसे रोका जाए? केवल एक विशेष मचान पर कैसे काम करें?
जिओगोबाइट

@gegobyte मैं एक ही मुद्दा था। मैंने जो किया वह 1 वैश्विक रंग का उपयोग कर रहा था, जिसका उपयोग अधिकांश दृश्यों में किया जाता है। लेकिन विशिष्ट विचारों में, जहां अलग-अलग रंग की आवश्यकता थी, मैंने सिर्फ एक ही विजेट का पुन: उपयोग किया लेकिन अलग-अलग रंग के साथ
एंड्रीस

45

उपयोग करने वालों के लिए AppBar

यदि आप उपयोग करते हैं AppBarतो स्टेटस बार का कलर अपडेट करना उतना ही सरल है:

Scaffold(
  appBar: AppBar(
    // Use [Brightness.light] for black status bar 
    // or [Brightness.dark] for white status bar
    brightness: Brightness.light 
  ),
  body: ...
)

सभी ऐप बार के लिए आवेदन करने के लिए:

return MaterialApp(
  theme: Theme.of(context).copyWith(
    appBarTheme: Theme.of(context)
        .appBarTheme
        .copyWith(brightness: Brightness.light),
  ...
  ),

उन लोगों के लिए जो उपयोग नहीं करते हैं AppBar

के साथ अपनी सामग्री लपेटें AnnotatedRegionऔर सेट valueकरने के लिए SystemUiOverlayStyle.lightया SystemUiOverlayStyle.dark:

return AnnotatedRegion<SystemUiOverlayStyle>(
  // Use [SystemUiOverlayStyle.light] for white status bar 
  // or [SystemUiOverlayStyle.dark] for black status bar
  value: SystemUiOverlayStyle.light,
  child: Scaffold(...),
);

2
यह विधि सटीक रंग सेट करने की अनुमति नहीं देती है
kashlo

यदि आप अपनी थीम के अनुसार स्टेटस बार का रंग प्राप्त करना चाहते हैं, तो आप हमेशा उपयोग कर सकते हैंbrightness: Theme.of(context).brightness
रोमन पनागेट

1
value: SystemUiOverlayStyle.light(या .dark) यही काम करता है
damd

12

जब आप उपयोग नहीं कर रहे हैं तो स्थिति बार रंग बदलें AppBar

पहले इसे आयात करें

import 'package:flutter/services.dart';

जब आप उपयोग नहीं कर रहे हैं तो अपने आवेदन में स्टेटस बार का रंग बदलने के लिए अब नीचे दिए गए कोड का उपयोग करें AppBar

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark.copyWith(

    statusBarColor: AppColors.statusBarColor,/* set Status bar color in Android devices. */
    
    statusBarIconBrightness: Brightness.dark,/* set Status bar icons color in Android devices.*/
    
    statusBarBrightness: Brightness.dark)/* set Status bar icon color in iOS. */
); 

iOSजब आप उपयोग कर रहे हों तो स्थिति पट्टी का रंग बदलने के लिएSafeArea

Scaffold(
  body: Container(
    color: Colors.red, /* Set your status bar color here */
    child: SafeArea(child: Container(
      /* Add your Widget here */
    )),
  ),
); 

मैं स्कैफोल्ड के सामने सेफआरा लगाकर कैच आउट हो गया, जिससे बैकग्राउंड कलर को स्कोफोल्ड से स्टेटस बार के पीछे तक फैलने से रोक दिया गया।
बुलविंकल

8

मैं सीधे थ्रेड में टिप्पणी नहीं कर सकता क्योंकि मेरे पास अभी तक अपेक्षित प्रतिष्ठा नहीं है, लेकिन लेखक ने निम्नलिखित पूछा:

एकमात्र मुद्दा यह है कि पृष्ठभूमि सफेद है, लेकिन घड़ी, वायरलेस और अन्य पाठ और आइकन भी सफेद रंग में हैं .. मुझे यकीन नहीं है कि क्यों !!

किसी और के लिए जो इस धागे के लिए आता है, यहाँ मेरे लिए क्या काम किया है। स्टेटस बार का टेक्स्ट रंग ब्राइटनेस कंटीन्यू इन कॉन्स्टेंस द्वारा तय किया जाता है flutter/material.dart। इसे बदलने के SystemChromeलिए, टेक्स्ट को कॉन्फ़िगर करने के लिए समाधान को इस तरह समायोजित करें:

    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.red,
      statusBarBrightness: Brightness.dark,
    ));

के लिए आपका संभावित मान Brightnessहैं Brightness.darkऔर Brightness.light

प्रलेखन: https://api.flutter.dev/flutter/dart-ui/Brightness-class.html https://api.flutter.dev/flutter/services/SystemUiOverlayStyle-class.html


8

यह मेरे लिए काम किया:

आयात सेवा

import 'package:flutter/services.dart';

फिर जोड़िए:

@override
  Widget build(BuildContext context) {

    SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.white,
      statusBarBrightness: Brightness.dark,
    ));
    return MaterialApp(home: Scaffold(

6

मुझे लगता है कि यह आपकी मदद करेगा:

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
        systemNavigationBarColor: Colors.white, // navigation bar color
        statusBarColor: Colors.white, // status bar color
        statusBarIconBrightness: Brightness.dark, // status bar icons' color
        systemNavigationBarIconBrightness: Brightness.dark, //navigation bar icons' color
    ));

5

यह वह सब कुछ है जो आपको जानना चाहिए:

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    systemNavigationBarColor: Colors.amber, // navigation bar color
    statusBarColor: Colors.white, // status bar color
    statusBarIconBrightness: Brightness.dark, // status bar icon color
    systemNavigationBarIconBrightness: Brightness.dark, // color of navigation controls
  ));
  runApp(MyApp());
}

4

इसे 2 चरणों में प्राप्त किया जा सकता है:

  1. FlutterStatusbarcolor पैकेज का उपयोग करके अपने पृष्ठ पृष्ठभूमि से मिलान करने के लिए स्थिति बार रंग सेट करें
  2. AppBar.brightnessप्रॉपर्टी का उपयोग करके स्टेटस बार बटन '(बैटरी, वाईफाई आदि) रंगों को सेट करें

यदि आपके पास AppBar:

  @override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarColor(Colors.white);
    return Scaffold(
      appBar: AppBar(
        brightness: Brightness.light,
        // Other AppBar properties
      ),
      body: Container()
    );
  }

यदि आप पृष्ठ में ऐप बार नहीं दिखाना चाहते हैं:

  @override
  Widget build(BuildContext context) {
    FlutterStatusbarcolor.setStatusBarColor(Colors.white);
    return Scaffold(
      appBar: AppBar(
        brightness: Brightness.light,
        elevation: 0.0,
        toolbarHeight: 0.0, // Hide the AppBar
      ),
      body: Container()
  }

यह SafeArea के लिए ios में भी परीक्षण किया गया है?
LOG_TAG

3

पालन ​​की तरह main.dart फ़ाइल आयात सेवा पर

  import 'package:flutter/services.dart';

और अंदर की निर्माण विधि वापसी से पहले बस इस लाइन को जोड़ें

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
    statusBarColor: Colors.orange
)); 

ऐशे ही:

@override
 Widget build(BuildContext context) {
   SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
       statusBarColor: CustomColors.appbarcolor
    ));
    return MaterialApp(
    home: MySplash(),
    theme: ThemeData(
      brightness: Brightness.light,
      primaryColor: CustomColors.appbarcolor,
    ),
  );
 }

2

यह भी काम करेगा

SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);


2

यह अब तक का सबसे अच्छा तरीका है, इसके लिए किसी अतिरिक्त प्लगइन्स की आवश्यकता नहीं है।

Widget emptyAppBar(){
  return PreferredSize(
      preferredSize: Size.fromHeight(0.0), 
      child: AppBar(
        backgroundColor: Color(0xFFf7f7f7),
        brightness: Brightness.light,
      )
  );
}

और इसे इस तरह अपने पाड़ में बुलाओ

return Scaffold(
      appBar: emptyAppBar(),
     .
     .
     .

1

इसे अपने ऐप बार रंग की तरह बनाने के लिए

import 'package:flutter/material.dart';

 Widget build(BuildContext context) {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
      statusBarColor: Colors.transparent,
      systemNavigationBarColor: Colors.transparent,
  ));
 }

1

IOS और Android दोनों के लिए काम करता है

import 'package:flutter/services.dart';

@override
Widget build(BuildContext context) {
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.dark);

  return Scaffold();
}
    

0
@override
Widget build(BuildContext context) {
  return Theme(
    data: ThemeData(brightness: Brightness.dark),
    child: Scaffold()
    ....
  )
}

3
कृपया केवल कोड को एक उत्तर के रूप में पोस्ट न करें, बल्कि यह भी बताएं कि आपका कोड क्या करता है और यह कैसे प्रश्न की समस्या को हल करता है। एक स्पष्टीकरण के साथ उत्तर आमतौर पर उच्च गुणवत्ता के होते हैं, और upvotes को आकर्षित करने की अधिक संभावना होती है।
मार्क रोटेवेल 13

0

मेरे पास सभी उल्लिखित उत्तरों के साथ समस्याएं थीं, समाधान के साथ मैंने खुद किया था: Container(width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).padding.top, color: Colors.green) विचारों के लिए, जहां कोई ऐप नहीं है जोड़ा गया है मैं सिर्फ पृष्ठभूमि के साथ कंटेनर का उपयोग करता हूं जो सटीक ऊंचाई स्थिति बार की ऊंचाई से मेल खाती है। इस परिदृश्य में प्रत्येक दृश्य में अलग-अलग स्थिति रंग हो सकते हैं और मुझे कुछ तर्क के बारे में चिंता करने और सोचने की आवश्यकता नहीं है, कि किसी भी तरह से गलत विचारों में किसी तरह के गलत रंग हैं।


0

मौजूदा समाधानों में से किसी ने भी मेरी मदद नहीं की, क्योंकि मैं उपयोग AppBarनहीं करता हूं और जब भी उपयोगकर्ता एप्लिकेशन थीम को स्विच करता है मैं बयान नहीं करना चाहता हूं। मुझे प्रकाश और अंधेरे मोड के बीच स्विच करने के लिए एक प्रतिक्रियाशील तरीके की आवश्यकता थी और पाया कि स्थिति बार के रंग को स्थापित करने के लिए AppBarबुलाया विजेट का उपयोग करता है Semantics

मूलतः, यह है कि मैं यह कैसे करते हैं:

return Semantics(
  container: false,  // don't make it a new node in the hierarchy
  child: AnnotatedRegion<SystemUiOverlayStyle>(
    value: SystemUiOverlayStyle.light,  // or .dark
    child: MyApp(),  // your widget goes here
  ),
);
  • Semanticsसे आयात किया जाता है package:flutter/material.dart
  • SystemUiOverlayStyleसे आयात किया जाता है package:flutter/services.dart

एक ही समस्या का सामना करना पड़ रहा है जैसा कि ऊपर उल्लेख किया गया है, लेकिन समाधान एंड्रीड 10 में काम नहीं करेगा
अदिति

0

मैंने इसे निम्न की तरह पूरे पृष्ठभूमि का रंग बदलकर हल किया:

मुख्य स्क्रीन में:

वापसी पाड़ (

  backgroundColor: Colors.black,

  body: SafeArea(
  
 ),

);


0

अधिकांश उत्तर उपयोग कर रहे हैं SystemChromeजो केवल एंड्रॉइड के लिए काम करता है। मेरा समाधान दोनों को AnnotatedRegionऔर SafeAreaनए विजेट में संयोजित करना है, इसलिए यह iOS में भी काम करता है। और मैं इसके साथ या बिना उपयोग कर सकता हूं AppBar

class ColoredStatusBar extends StatelessWidget {
  const ColoredStatusBar({Key key, this.color, this.child}) : super(key: key);

  final Color color;
  final Widget child;

  @override
  Widget build(BuildContext context) {
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: SystemUiOverlayStyle(
        statusBarColor: color ?? Colors.blue,
      ),
      child: Container(
        color: color ?? Colors.blue,
        child: SafeArea(
          bottom: false,
          child: Container(
            child: child,
          ),
        ),
      ),
    );
  }
}

उपयोग: इसे पृष्ठ के विजेट के ऊपर रखें।

@override
Widget build(BuildContext context) {
  return ColoredStatusBar(
    child: /* your child here */,
  );
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.