स्पंदन में कॉलम के बच्चों के बीच जगह


115

मेरे पास बच्चों के रूप में Columnदो TextFieldविजेट्स के साथ एक विजेट है और मैं उन दोनों के बीच कुछ स्थान रखना चाहता हूं।

मैंने पहले से ही कोशिश की थी mainAxisAlignment: MainAxisAlignment.spaceAround, लेकिन परिणाम वह नहीं था जो मैं चाहता था।


3
सीधे शब्दों में कहें SizedBox (ऊंचाई: 15.0,), दो TextField के बीच में
anmol.majhail

margin: EdgeInsets.only(left: 200.0, top: 300.0))
user7856586

जवाबों:


142

आप Paddingउन दो विजेट के बीच में विजेट का उपयोग कर सकते हैं या विजेट के साथ उन विजेट को लपेट सकते हैं Padding

अपडेट करें

दो विजेट के बीच स्थान जोड़ने के लिए दो विजेट के बीच में SizedBox विजेट का उपयोग किया जा सकता है और यह कोड को पैडिंग विजेट से अधिक पठनीय बनाता है।

उदाहरण के लिए:

Column(
  children: <Widget>[
    Widget1(),
    SizedBox(height: 10),
    Widget2(),
  ],
),

10
मुझे यकीन है कि इच्छा है कि column-class था कि संपत्ति शामिल है। यह सभी बच्चों के बीच एक पैडिंग प्राप्त करने के लिए कोडिंग समय की बर्बादी होगी।
हारून हज़म

पैडिंग विजेट में आप दो विजेट को कैसे लपेट सकते हैं जब पैडिंग विजेट केवल एक ही चाइल्ड पैरामीटर लेते हैं?
स्कॉट एफएफ़

@ScottF ने कहा कि Paddingविजेट 2 विजेट्स के बीच में जाता है । ऐसा नहीं है कि 2 विजेट के बच्चे बन जाते हैं Padding
marcusljx

2
यह सीधे कहता है "या पैडिंग विजेट के साथ उन विजेट्स को लपेटें" ....
स्कॉट एफए

@ScottF बच्चे को बच्चों के रूप में दो विगेट्स के साथ एक कॉलम या पंक्ति बनाएं।
रिले

143

आप विगेट्स के बीच SizedBoxएक विशिष्ट के साथ रख सकते heightहैं, जैसे:

Column(
  children: <Widget>[
    FirstWidget(),
    SizedBox(height: 100),
    SecondWidget(),
  ],
),

विगेट्स को लपेटने में इस पर प्राथमिकता क्यों दें Padding? पठनीयता! कम दृश्य बॉयलरप्लेट है, कम इंडक्शन और कोड विशिष्ट रीडिंग-ऑर्डर का अनुसरण करता है।


एक आकार बॉक्स जोड़ना एक खाली दृश्य को सही जोड़ने जैसा है? nt कि किसी भी समस्याओं के लिए नेतृत्व करेंगे?
user5381191

SizedBoxकेवल एक सामान्य विजेट है जिसका वांछित आकार है जो लेआउट के दौरान होने की कोशिश करता है, लेकिन कुछ भी प्रस्तुत नहीं करता है। टेक्स्ट या कंटेनर जैसे सभी लीफ विजेट भी खाली हैं, इसलिए यह ठीक है।
मार्सेल

52

आप बच्चों के बीच स्पेस जोड़ने के लिए Wrap()विजेट का उपयोग कर सकते हैं Column()। और बच्चों के बीच समान रिक्ति देने के लिए रिक्ति का उपयोग करें

Wrap(
  spacing: 20, // to apply margin in the main axis of the wrap
  runSpacing: 20, // to apply margin in the cross axis of the wrap
  children: <Widget>[
     Text('child 1'),
     Text('child 2')
  ]
)

1
खड़ी जगह के बीच अंतराल runSpacingके spacingलिए उपयोग करें
अर्पित

यह मेरे काम आया। मुझे लगता है कि यह सब पर सबसे अच्छा समाधान है, लेकिन कॉलम () के बजाय लपेट () के उपयोग की गड़बड़ी क्या होगी?
लीमा

1
Wrap नहीं है, जबकि कॉलम एक विस्तारित विजेट है। इसलिए जब आप माता-पिता के पूरे स्थान का विस्तार करना चाहते हैं, तो आपको स्तंभ या पंक्ति जैसे विस्तारित विजेट्स का उपयोग करना चाहिए, यह आपके मामले पर निर्भर करता है
महदी तोहिदालो

हां, यह प्रत्येक बच्चे को व्यक्तिगत रूप से लपेटने से बहुत बेहतर है। अच्छा सुझाव।
केविन

31

बस इसे इस तरह लपेटने के लिए पैडिंग का उपयोग करें:

Column(
  children: <Widget>[
  Padding(
    padding: EdgeInsets.all(8.0),
    child: Text('Hello World!'),
  ),
  Padding(
    padding: EdgeInsets.all(8.0),
    child: Text('Hello World2!'),
  )
]);

आप कंटेनर (पैडिंग ...) या साइज़बॉक्स (ऊंचाई: xx) का भी उपयोग कर सकते हैं। अंतिम सबसे आम है, लेकिन यह दर्शाएगा कि आप अपने विजेट के स्थान को कैसे प्रबंधित करना चाहते हैं, मुझे पैडिंग का उपयोग करना पसंद है यदि अंतरिक्ष वास्तव में विजेट का हिस्सा है और उदाहरण के लिए सूचियों के लिए आकार बॉक्स का उपयोग करें।


क्या सीएसएस ग्रिड-गैप जैसा कुछ करने का एक तरीका है?
असेम

17

इसे करने के कई तरीके हैं, मैं यहां कुछ सूचीबद्ध कर रहा हूं।

  1. उपयोग Containerऔर कुछ ऊंचाई दे:

    Column(
      children: <Widget>[
        Widget1(),
        Container(height: 10), // set height
        Widget2(),
      ],
    )
    
  2. उपयोग Spacer

    Column(
      children: <Widget>[
        Widget1(),
        Spacer(), // use Spacer
        Widget2(),
      ],
    )
    
  3. उपयोग Expanded

    Column(
      children: <Widget>[
        Widget1(),
        Expanded(child: SizedBox()), // use Expanded
        Widget2(),
      ],
    )
    
  4. उपयोग mainAxisAlignment

    Column(
      mainAxisAlignment: MainAxisAlignment.spaceAround, // mainAxisAlignment
      children: <Widget>[
        Widget1(),
        Widget2(),
      ],
    )
    
  5. उपयोग Wrap

    Wrap(
      direction: Axis.vertical, // make sure to set this
      spacing: 20, // set your spacing
      children: <Widget>[
        Widget1(),
        Widget2(),
      ],
    )
    

8
Column(
  children: <Widget>[
    FirstWidget(),
    Spacer(),
    SecondWidget(),
  ]
)

स्पेसर [लचीले] विजेट में डालने के लिए एक लचीली जगह बनाता है। (एक कॉलम की तरह)


5
कृपया दूसरों को बेहतर तरीके से समझने में मदद करने के लिए अपने उत्तर में कुछ स्पष्टीकरण जोड़ें। कोड केवल उत्तरों को अयोग्य माना जाता है और यह ओपी को उस समस्या को समझने में मदद नहीं कर सकता है जिसे आप मदद करने की कोशिश कर रहे हैं।
माइकल

6

जिस तरह से कोड पठनीयता के उद्देश्य के लिए SizedBox का उपयोग ऊपर किया गया है, आप उसी तरह से पैडिंग विजेट का उपयोग कर सकते हैं और इसे किसी भी कॉलम के बच्चों के लिए एक पैरेंट विजेट नहीं बनाना है।

Column(
  children: <Widget>[
    FirstWidget(),
    Padding(padding: EdgeInsets.only(top: 40.0)),
    SecondWidget(),
  ]
)

2

आप इस समस्या को अलग तरीके से हल कर सकते हैं।

यदि आप पंक्ति / स्तंभ का उपयोग करते हैं तो आपको मुख्य अक्ष का उपयोग करना होगा।

यदि आप लपेटें विजेट का उपयोग करते हैं तो आपको रनस्पेसिंग का उपयोग करना होगा: 5, रिक्ति: 10,

कहीं भी आप SizeBox () का उपयोग कर सकते हैं


1

कॉलम में डिफ़ॉल्ट रूप से कोई ऊंचाई नहीं है, आप अपने कॉलम को कंटेनर में लपेट सकते हैं और अपने कंटेनर में विशिष्ट ऊंचाई जोड़ सकते हैं। तो आप नीचे कुछ का उपयोग कर सकते हैं:

Container(
   width: double.infinity,//Your desire Width
   height: height,//Your desire Height
   child: Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      children: <Widget>[
         Text('One'),
         Text('Two')
      ],
   ),
),

1

यहां कई उत्तर हैं लेकिन मैं यहां सबसे महत्वपूर्ण एक डालूंगा जिसका सभी को उपयोग करना चाहिए।

1. स्तंभ

 Column(
          children: <Widget>[
            Text('Widget A'), //Can be any widget
            SizedBox(height: 20,), //height is space betweeen your top and bottom widget
            Text('Widget B'), //Can be any widget
          ],
        ),

2. लपेट

     Wrap(
          direction: Axis.vertical, // We have to declare Axis.vertical, otherwise by default widget are drawn in horizontal order
            spacing: 20, // Add spacing one time which is same for all other widgets in the children list
            children: <Widget>[
              Text('Widget A'), // Can be any widget
              Text('Widget B'), // Can be any widget
            ]
        )


0

आपको अपने कॉलम के बच्चों के बीच SizedBox () विजेट का उपयोग करना पड़ सकता है। आशा है कि यह उपयोगी होगा


यदि आपके पास कोई नया प्रश्न है, तो कृपया प्रश्न पूछें बटन पर क्लिक करके पूछें । इस प्रश्न का लिंक शामिल करें यदि यह संदर्भ प्रदान करने में मदद करता है। - रिव्यू से
ब्रूनो

यह प्रश्न का उत्तर प्रदान नहीं करता है। एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी कर पाएंगे ; इसके बजाय, ऐसे उत्तर प्रदान करें जिन्हें पूछने वाले से स्पष्टीकरण की आवश्यकता न हो । - समीक्षा से
राम शर्मा

0

आप प्रत्येक बच्चे के बाद रिक्ति जोड़ने के लिए एक सहायक फ़ंक्शन का भी उपयोग कर सकते हैं।

List<Widget> childrenWithSpacing({
  @required List<Widget> children,
  double spacing = 8,
}) {
  final space = Container(width: spacing, height: spacing);
  return children.expand((widget) => [widget, space]).toList();
}

तो, दी गई सूची का उपयोग कॉलम के बच्चों के रूप में किया जा सकता है

Column(
  children: childrenWithSpacing(
    spacing: 14,
    children: [
      Text('This becomes a text with an adjacent spacing'),
      if (true == true) Text('Also, makes it easy to add conditional widgets'),
    ],
  ),
);

मुझे यकीन नहीं है कि अगर यह गलत है या एक ही लक्ष्य के लिए एक सहायक समारोह के माध्यम से बच्चों को चलाने के लिए प्रदर्शन जुर्माना है?


-1

आकार बॉक्स मामले में मदद नहीं करेगा, फोन लैंडस्केप मोड में है।

body: Column(
      mainAxisAlignment: MainAxisAlignment.spaceBetween,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: <Widget>[
        Expanded(
           child: Container(
            margin: EdgeInsets.all(15.0),
            decoration: BoxDecoration(
              color: Color(0xFF1D1E33),
              borderRadius: BorderRadius.circular(10.0),
            ),
          ),
        ),
        Expanded(
           child: Container(
            margin: EdgeInsets.all(15.0),
            decoration: BoxDecoration(
              color: Color(0xFF1D1E33),
              borderRadius: BorderRadius.circular(10.0),
            ),
          ),
        ),
        Expanded(
           child: Container(
            margin: EdgeInsets.all(15.0),
            decoration: BoxDecoration(
              color: Color(0xFF1D1E33),
              borderRadius: BorderRadius.circular(10.0),
            ),
          ),
        ),
      ],
     )
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.