स्पंदन: AppBar की ऊंचाई निर्धारित करना


110

मैं केवल AppBarस्पंदन की ऊंचाई कैसे निर्धारित कर सकता हूं ?

बार का शीर्षक लंबवत (उस में AppBar) केंद्रित होना चाहिए ।


@Mans यह AppBar'सेटिंग' की ऊँचाई के बारे में है , न कि इसे 'सेट' करने के लिए।
बुआरा एकुकलु

1
क्या आपने इस पर ध्यान दिया ? आप एक AppBar के रूप में अपना स्वयं का विजेट भी बना सकते हैं और इसकी ऊंचाई निर्धारित कर सकते हैं।
बोसोटोट

@ लेविथलॉन मेरा बुरा। के लिए (उम्मीद) मेरा उत्तर जाँच कुछ बेहतर मदद
मैंस

जवाबों:


208

आप PreferredSize का उपयोग कर सकते हैं :

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Example',
      home: Scaffold(
        appBar: PreferredSize(
          preferredSize: Size.fromHeight(50.0), // here the desired height
          child: AppBar(
            // ...
          )
        ),
        body: // ...
      )
    );
  }
}

5
यह AppBar के आकार को बढ़ाता है, लेकिन पाठ को केंद्र में नहीं रखता है।
डंकन जोन्स

5
आप centerTitleइसे केंद्र में करने के लिए संपत्ति का उपयोग कर सकते हैं ।
CopsOnRoad

11
@CopsOnRoad यह इसे क्षैतिज रूप से केंद्र बनाता है लेकिन इसे लंबवत रूप से केंद्र में नहीं रखता है।
गिरलड़ी

1
@Giraldi आप वास्तव में ऐसा नहीं कर सकते हैं कि स्रोत फ़ाइल को बदले या अपना रिवाज़ AppBar
बनाए

1
@CopsOnRoad मुझे पता है, लेकिन मैं सिर्फ इशारा कर रहा था कि ओपी क्या मांग रहा है।
गिराल्डी

46

आप इसका उपयोग कर सकते हैं PreferredSizeऔर इसके flexibleSpaceलिए:

appBar: PreferredSize(
  preferredSize: Size.fromHeight(100.0),
  child: AppBar(
    automaticallyImplyLeading: false, // hides leading widget
    flexibleSpace: SomeWidget(),
  )
),

इस तरह से आप इसकी छाया को दृष्टिगत रखने elevationके AppBarलिए रख सकते हैं और कस्टम ऊँचाई रख सकते हैं , जो कि मैं बस ढूंढ रहा था। आपको रिक्ति सेट करना है SomeWidget, यद्यपि।


यह स्वीकार किया जाना चाहिए जवाब! आपका बहुत बहुत धन्यवाद।
हाज़ा

14

इसे लिखते समय, मुझे इसकी जानकारी नहीं थी PreferredSize। इसे हासिल करने के लिए सिनेन का जवाब बेहतर है।

आप एक कस्टम ऊंचाई के साथ अपना खुद का कस्टम विजेट बना सकते हैं:

import "package:flutter/material.dart";

class Page extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Column(children : <Widget>[new CustomAppBar("Custom App Bar"), new Container()],);
  }
}


class CustomAppBar extends StatelessWidget {

  final String title;
  final double barHeight = 50.0; // change this for different heights 

  CustomAppBar(this.title);

  @override
  Widget build(BuildContext context) {
    final double statusbarHeight = MediaQuery
        .of(context)
        .padding
        .top;

    return new Container(
      padding: new EdgeInsets.only(top: statusbarHeight),
      height: statusbarHeight + barHeight,
      child: new Center(
        child: new Text(
          title,
          style: new TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold),
        ),
      ),
    );
  }
}

10

@ Cinn के जवाब के अलावा, आप इस तरह एक वर्ग को परिभाषित कर सकते हैं

class MyAppBar extends AppBar with PreferredSizeWidget {
  @override
  get preferredSize => Size.fromHeight(50);

  MyAppBar({Key key, Widget title}) : super(
    key: key,
    title: title,
    // maybe other AppBar properties
  );
}

या इस तरह से

class MyAppBar extends PreferredSize {
  MyAppBar({Key key, Widget title}) : super(
    key: key,
    preferredSize: Size.fromHeight(50),
    child: AppBar(
      title: title,
      // maybe other AppBar properties
    ),
  );
}

और फिर मानक एक के बजाय इसका उपयोग करें


4

Cinn का जवाब बहुत अच्छा है, लेकिन इसमें एक बात गलत है।

PreferredSizeविजेट, स्थिति पट्टी के लिए लेखांकन के बिना, स्क्रीन के शीर्ष पर तुरंत शुरू कर देंगे तो उसकी ऊंचाई से कुछ स्थिति पट्टी की ऊंचाई द्वारा आच्छादित कर दिया जाएगा। यह भी पक्ष notches के लिए खाता है।

समाधान : preferredSizeएक के साथ बच्चे को लपेटोSafeArea

appBar: PreferredSize(
  //Here is the preferred height.
  preferredSize: Size.fromHeight(50.0),
  child: SafeArea(
    child: AppBar(
      flexibleSpace: ...
    ),
  ),
),

यदि आप लचीले स्थान की संपत्ति का उपयोग नहीं करना चाहते हैं, तो उस सब की कोई आवश्यकता नहीं है, क्योंकि AppBarवसीयत के अन्य गुण स्टेटस बार के लिए स्वचालित रूप से खाते हैं।


लेकिन SafeAreaस्टेटस बार की ऊंचाई को कम करना है, फिर भी आपने इसे फिर से जोड़ा है MediaQuery.of(context).padding.top? मुझे लगता है कि यहां SafeArea की जरूरत नहीं है।
राउड

@ राइड SafeAreaमहत्वपूर्ण है ताकि ऐप बार स्टेटस बार के साथ ओवरलैप न हो, लेकिन MediaQuery.of(context).padding.topवास्तव में इसकी आवश्यकता नहीं है। मैंने उत्तर संपादित किया है, धन्यवाद।
TN888


0

उपयोग करें toolbarHeight:

यहां छवि विवरण दर्ज करें


अब उपयोग करने की आवश्यकता नहीं है PreferredSize। के toolbarHeightसाथ प्रयोग करें flexibleSpace

AppBar(
  toolbarHeight: 120, // Set this height
  flexibleSpace: Container(
    color: Colors.orange,
    child: Column(
      children: [
        Text('1'),
        Text('2'),
        Text('3'),
        Text('4'),
      ],
    ),
  ),
)

-10

यदि आप विज़ुअल कोड में हैं, तो Ctrl + AppBar फ़ंक्शन पर क्लिक करें

Widget demoPage() {
  AppBar appBar = AppBar(
    title: Text('Demo'),
  );
  return Scaffold(
    appBar: appBar,
    body: /*
    page body
    */,
  );
}

और इस टुकड़े को संपादित करें।

app_bar.dart will open and you can find 
    preferredSize = new Size.fromHeight(kToolbarHeight + (bottom?.preferredSize?.height ?? 0.0)),

ऊँचाई का अंतर!

नमूना छवि

नमूना छवि


1
यह वह नहीं है जो उसने मांगा था। वह चाहते हैं कि शीर्षक लंबवत रूप से केंद्रित हो
Rémi Rousselet

centerTitle: सच; यह करने के लिए इस्तेमाल किया जा सकता है।
goops17

ऊर्ध्वाधर केंद्र, क्षैतिज नहीं
रेमी रूसेलेट

इसलिए यह नई ऊंचाई नहीं पढ़ता है। मुझे नहीं लगता कि app_bar.dart जैसी स्रोत फ़ाइल को बदलना, इसे बदलने के लिए, हालांकि यह अच्छा विचार होगा।
goops17

6
किसी ढांचे के स्रोतों को संपादित करना बहुत बुरा विचार है। यदि आप रूपरेखा को अपडेट करते हैं तो यह आपके ऐप को तोड़ देगा।
कॉन्स्टेंटिन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.