मेरे पास बच्चों के रूप में Column
दो TextField
विजेट्स के साथ एक विजेट है और मैं उन दोनों के बीच कुछ स्थान रखना चाहता हूं।
मैंने पहले से ही कोशिश की थी mainAxisAlignment: MainAxisAlignment.spaceAround
, लेकिन परिणाम वह नहीं था जो मैं चाहता था।
मेरे पास बच्चों के रूप में Column
दो TextField
विजेट्स के साथ एक विजेट है और मैं उन दोनों के बीच कुछ स्थान रखना चाहता हूं।
मैंने पहले से ही कोशिश की थी mainAxisAlignment: MainAxisAlignment.spaceAround
, लेकिन परिणाम वह नहीं था जो मैं चाहता था।
margin: EdgeInsets.only(left: 200.0, top: 300.0))
जवाबों:
आप Padding
उन दो विजेट के बीच में विजेट का उपयोग कर सकते हैं या विजेट के साथ उन विजेट को लपेट सकते हैं Padding
।
अपडेट करें
दो विजेट के बीच स्थान जोड़ने के लिए दो विजेट के बीच में SizedBox विजेट का उपयोग किया जा सकता है और यह कोड को पैडिंग विजेट से अधिक पठनीय बनाता है।
उदाहरण के लिए:
Column(
children: <Widget>[
Widget1(),
SizedBox(height: 10),
Widget2(),
],
),
column
-class था कि संपत्ति शामिल है। यह सभी बच्चों के बीच एक पैडिंग प्राप्त करने के लिए कोडिंग समय की बर्बादी होगी।
Padding
विजेट 2 विजेट्स के बीच में जाता है । ऐसा नहीं है कि 2 विजेट के बच्चे बन जाते हैं Padding
।
आप विगेट्स के बीच SizedBox
एक विशिष्ट के साथ रख सकते height
हैं, जैसे:
Column(
children: <Widget>[
FirstWidget(),
SizedBox(height: 100),
SecondWidget(),
],
),
विगेट्स को लपेटने में इस पर प्राथमिकता क्यों दें Padding
? पठनीयता! कम दृश्य बॉयलरप्लेट है, कम इंडक्शन और कोड विशिष्ट रीडिंग-ऑर्डर का अनुसरण करता है।
SizedBox
केवल एक सामान्य विजेट है जिसका वांछित आकार है जो लेआउट के दौरान होने की कोशिश करता है, लेकिन कुछ भी प्रस्तुत नहीं करता है। टेक्स्ट या कंटेनर जैसे सभी लीफ विजेट भी खाली हैं, इसलिए यह ठीक है।
आप बच्चों के बीच स्पेस जोड़ने के लिए 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')
]
)
runSpacing
के spacing
लिए उपयोग करें
बस इसे इस तरह लपेटने के लिए पैडिंग का उपयोग करें:
Column(
children: <Widget>[
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World!'),
),
Padding(
padding: EdgeInsets.all(8.0),
child: Text('Hello World2!'),
)
]);
आप कंटेनर (पैडिंग ...) या साइज़बॉक्स (ऊंचाई: xx) का भी उपयोग कर सकते हैं। अंतिम सबसे आम है, लेकिन यह दर्शाएगा कि आप अपने विजेट के स्थान को कैसे प्रबंधित करना चाहते हैं, मुझे पैडिंग का उपयोग करना पसंद है यदि अंतरिक्ष वास्तव में विजेट का हिस्सा है और उदाहरण के लिए सूचियों के लिए आकार बॉक्स का उपयोग करें।
इसे करने के कई तरीके हैं, मैं यहां कुछ सूचीबद्ध कर रहा हूं।
उपयोग Container
और कुछ ऊंचाई दे:
Column(
children: <Widget>[
Widget1(),
Container(height: 10), // set height
Widget2(),
],
)
उपयोग Spacer
Column(
children: <Widget>[
Widget1(),
Spacer(), // use Spacer
Widget2(),
],
)
उपयोग Expanded
Column(
children: <Widget>[
Widget1(),
Expanded(child: SizedBox()), // use Expanded
Widget2(),
],
)
उपयोग mainAxisAlignment
Column(
mainAxisAlignment: MainAxisAlignment.spaceAround, // mainAxisAlignment
children: <Widget>[
Widget1(),
Widget2(),
],
)
उपयोग Wrap
Wrap(
direction: Axis.vertical, // make sure to set this
spacing: 20, // set your spacing
children: <Widget>[
Widget1(),
Widget2(),
],
)
Column(
children: <Widget>[
FirstWidget(),
Spacer(),
SecondWidget(),
]
)
स्पेसर [लचीले] विजेट में डालने के लिए एक लचीली जगह बनाता है। (एक कॉलम की तरह)
जिस तरह से कोड पठनीयता के उद्देश्य के लिए SizedBox का उपयोग ऊपर किया गया है, आप उसी तरह से पैडिंग विजेट का उपयोग कर सकते हैं और इसे किसी भी कॉलम के बच्चों के लिए एक पैरेंट विजेट नहीं बनाना है।
Column(
children: <Widget>[
FirstWidget(),
Padding(padding: EdgeInsets.only(top: 40.0)),
SecondWidget(),
]
)
आप इस समस्या को अलग तरीके से हल कर सकते हैं।
यदि आप पंक्ति / स्तंभ का उपयोग करते हैं तो आपको मुख्य अक्ष का उपयोग करना होगा।
यदि आप लपेटें विजेट का उपयोग करते हैं तो आपको रनस्पेसिंग का उपयोग करना होगा: 5, रिक्ति: 10,
कहीं भी आप SizeBox () का उपयोग कर सकते हैं
कॉलम में डिफ़ॉल्ट रूप से कोई ऊंचाई नहीं है, आप अपने कॉलम को कंटेनर में लपेट सकते हैं और अपने कंटेनर में विशिष्ट ऊंचाई जोड़ सकते हैं। तो आप नीचे कुछ का उपयोग कर सकते हैं:
Container(
width: double.infinity,//Your desire Width
height: height,//Your desire Height
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text('One'),
Text('Two')
],
),
),
यहां कई उत्तर हैं लेकिन मैं यहां सबसे महत्वपूर्ण एक डालूंगा जिसका सभी को उपयोग करना चाहिए।
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
]
)
Column(children: <Widget>[
Container(margin: EdgeInsets.only(top:12, child: yourWidget)),
Container(margin: EdgeInsets.only(top:12, child: yourWidget))
]);
आपको अपने कॉलम के बच्चों के बीच SizedBox () विजेट का उपयोग करना पड़ सकता है। आशा है कि यह उपयोगी होगा
आप प्रत्येक बच्चे के बाद रिक्ति जोड़ने के लिए एक सहायक फ़ंक्शन का भी उपयोग कर सकते हैं।
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'),
],
),
);
मुझे यकीन नहीं है कि अगर यह गलत है या एक ही लक्ष्य के लिए एक सहायक समारोह के माध्यम से बच्चों को चलाने के लिए प्रदर्शन जुर्माना है?
आकार बॉक्स मामले में मदद नहीं करेगा, फोन लैंडस्केप मोड में है।
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),
),
),
),
],
)