Flutter: คอลัมน์กลางแนวตั้ง


96

วิธีจัดคอลัมน์ในแนวตั้งใน Flutter ฉันใช้วิดเจ็ต "ศูนย์ใหม่" แล้ว ฉันใช้วิดเจ็ต "ศูนย์ใหม่" แต่ไม่ได้อยู่ตรงกลางคอลัมน์ของฉันในแนวตั้ง? มีความคิดที่จะเป็นประโยชน์ ....

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text("Thank you"),
    ),
    body: new Center(
      child: new Column(
        children: <Widget>[
          new Padding(
            padding: new EdgeInsets.all(25.0),
            child: new AnimatedBuilder(
              animation: animationController,
              child: new Container(
                height: 175.0,
                width: 175.0,
                child: new Image.asset('assets/angry_face.png'),
              ),
              builder: (BuildContext context, Widget _widget) {
                return new Transform.rotate(
                  angle: animationController.value * 6.3,
                  child: _widget,
                );
              },
            ),
          ),
          new Text('We are glad we could serve you...', style: new TextStyle(
              fontSize: 16.0,
              fontWeight: FontWeight.w600,
              color: Colors.black87),),
          new Padding(padding: new EdgeInsets.symmetric(vertical: 5.0, horizontal: 0.0)),
          new Text('We appreciate your feedback ! !', style: new TextStyle(
              fontSize: 13.0,
              fontWeight: FontWeight.w200,
              color: Colors.black87),),
        ],
      ),
    ),
  );
}

คำตอบ:


164

วิธีแก้ไขตามที่ Aziz เสนอจะเป็น:

Column(
  mainAxisAlignment: MainAxisAlignment.center,
  crossAxisAlignment: CrossAxisAlignment.center,
  children:children,
)

มันจะไม่อยู่ตรงกลางแน่นอนเนื่องจากช่องว่างภายใน:

padding: new EdgeInsets.all(25.0),

ในการทำให้คอลัมน์อยู่ตรงกลาง - อย่างน้อยในกรณีนี้คุณจะต้องลบช่องว่างภายใน


45

ลอง:

Column(
 mainAxisAlignment: MainAxisAlignment.center,
 crossAxisAlignment: CrossAxisAlignment.center,
 children:children...)

2
พยายามก่อนหน้านี้ มันอยู่ตรงกลาง แต่มันไม่ได้อยู่ตรงกลาง?
Zeusox

3
มันเป็นปัญหาการขยาย ตอนนี้ใช้งานได้ดีขอบคุณ!
Zeusox

17

ด้วยคอลัมน์ให้ใช้:

mainAxisAlignment: MainAxisAlignment.center

จัดเรียงลูกของมันให้อยู่ตรงกลางของอวกาศแม่ในแนวตั้ง


11

คุณควบคุมวิธีที่แถวหรือคอลัมน์จัดแนวชายด์โดยใช้คุณสมบัติ mainAxisAlignment และ crossAxisAlignment สำหรับแถวแกนหลักจะทำงานในแนวนอนและแกนกากบาทจะทำงานในแนวตั้ง สำหรับคอลัมน์แกนหลักจะทำงานในแนวตั้งและแกนกากบาทจะทำงานในแนวนอน

 mainAxisAlignment: MainAxisAlignment.center,
 crossAxisAlignment: CrossAxisAlignment.center,


5

ทางออกอื่น!

หากคุณต้องการตั้งค่าวิดเจ็ตในรูปแบบแนวตั้งตรงกลางคุณสามารถใช้ ListView ได้ เช่น: ฉันใช้ปุ่มสามปุ่มและเพิ่มเข้าไปใน ListView ซึ่งตามด้วย

shrinkWrap: true -> ด้วย ListView นี้ใช้พื้นที่ที่ต้องการเท่านั้น

import 'package:flutter/material.dart';

class List extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final button1 =
        new RaisedButton(child: new Text("Button1"), onPressed: () {});
    final button2 =
        new RaisedButton(child: new Text("Button2"), onPressed: () {});
    final button3 =
        new RaisedButton(child: new Text("Button3"), onPressed: () {});
    final body = new Center(
      child: ListView(
        shrinkWrap: true,
        children: <Widget>[button1, button2, button3],
     ),
    );

    return new Scaffold(
        appBar: new AppBar(
          title: Text("Sample"),
        ),
        body: body);
  }
}    
void main() {
  runApp(new MaterialApp(
    home: List(),
  ));
}

เอาท์พุต: ป้อนคำอธิบายภาพที่นี่


4

สำหรับฉันปัญหาคือมีการขยายภายในคอลัมน์ซึ่งฉันต้องลบและใช้งานได้

Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Expanded( // remove this
              flex: 2,
              child: Text("content here"),
            ),
          ],
        )

1

คุณสามารถใช้. mainAxisAlignment:MainAxisAlignment.center สิ่งนี้จะส่งผ่านศูนย์กลางในคอลัมน์อย่างชาญฉลาด `` crossAxisAlignment: CrossAxisAlignment.center 'สิ่งนี้จะจัดแนวรายการให้อยู่ตรงกลางในแถวอย่างชาญฉลาด

Container( alignment:Alignment.center, Child: Column () )

เพียงแค่ใช้ Center ( Child: Column () ) หรือแร็พด้วยวิดเจ็ต Padding และปรับ Padding เพื่อให้คอลัมน์ย่อยอยู่ตรงกลาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.