Flutter: pionowo środkowa kolumna

104

Jak wyśrodkować kolumnę w pionie we Flutterze? Użyłem widżetu „nowe centrum”. Użyłem widżetu „nowe centrum”, ale nie wyśrodkowuje on mojej kolumny w pionie? Wszelkie pomysły byłyby pomocne ....

@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),),
        ],
      ),
    ),
  );
}
Zeusox
źródło

Odpowiedzi:

176

Rozwiązanie zaproponowane przez Aziza to:

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

Nie znajdowałby się dokładnie w środku z powodu wypełnienia:

padding: new EdgeInsets.all(25.0),

Aby dokładnie wyśrodkować kolumnę - przynajmniej w tym przypadku - należałoby usunąć wypełnienie.

Zeusox
źródło
48

Próbować:

Column(
 mainAxisAlignment: MainAxisAlignment.center,
 crossAxisAlignment: CrossAxisAlignment.center,
 children:children...)
aziza
źródło
2
Próbowałem tego wcześniej. Czy wyśrodkowuje, ale nie DEAD go wyśrodkowuje?
Zeusox
3
To był problem z wypełnieniem. Teraz działa dobrze, dzięki!
Zeusox
17

W przypadku Column użyj:

mainAxisAlignment: MainAxisAlignment.center

Wyrównuje swoje elementy podrzędne do środka swojej macierzystej przestrzeni w pionie

Deepak Swain
źródło
13

Spróbuj tego. Wyśrodkowuje w pionie i poziomie.

Center(
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: children,
  ),
)
Lucas Chwe
źródło
12

Możesz kontrolować, jak wiersz lub kolumna wyrównuje swoje elementy podrzędne za pomocą właściwości mainAxisAlignment i crossAxisAlignment. W przypadku rzędu główna oś przebiega poziomo, a oś poprzeczna - pionowo. W przypadku słupa główna oś przebiega pionowo, a oś poprzeczna - poziomo.

 mainAxisAlignment: MainAxisAlignment.center,
 crossAxisAlignment: CrossAxisAlignment.center,
DuhAlonso
źródło
6

Inne rozwiązanie!

Jeśli chcesz ustawić widżety w środkowej formie pionowej, możesz użyć do tego ListView. na przykład: użyłem trzech przycisków i dodałem je w ListView, po którym następuje

shrinkWrap: true -> Z tym ListView zajmuje tylko potrzebne miejsce.

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(),
  ));
}

Wynik: wprowadź opis obrazu tutaj

jitsm555
źródło
Właśnie tego potrzebowałem. Uwielbiam sposób, w jaki łączy się tutaj Center i ListView.
Julian Otto
4

U mnie problem polegał na tym, że był rozszerzony wewnątrz kolumny, którą musiałem usunąć i zadziałało.

Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[
            Expanded( // remove this
              flex: 2,
              child: Text("content here"),
            ),
          ],
        )
Eric
źródło
3

Podczas korzystania z kolumny użyj tego w widżecie kolumny:

mainAxisAlignment: MainAxisAlignment.center

Ustawia swoje dzieci (dzieci) do środka swojej macierzystej przestrzeni. Przestrzeń jest jego główną osią, tj. Pionowo

lub zawiń kolumnę widżetem Centrum:

Center(
  child: Column(
    children: <ListOfWidgets>,
  ),
)

jeśli to nie rozwiąże problemu, zawiń kontener nadrzędny widżetem Expanded.

Expanded(
   child:Container(
     child: Column(
       mainAxisAlignment: MainAxisAlignment.center,
       children: children,
     ),
   ),
)
ThejasSatheesh
źródło
1

Możesz użyć. mainAxisAlignment:MainAxisAlignment.center Spowoduje to przejście materiału przez środek kolumny. `crossAxisAlignment: CrossAxisAlignment.center 'Spowoduje to wyrównanie elementów w środku w rzędzie.

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

Po prostu użyj. Center ( Child: Column () ) lub rapuj za pomocą widżetu Padding. I dostosuj dopełnienie tak, aby dzieci w kolumnie były w środku.

SR Keshav
źródło