Flutter - Как выровнять (виджет) виджетов внуков так же, как дочерний - PullRequest
0 голосов
/ 10 марта 2020

Я искал ответ по всему гуглу и поэтому не смог найти его по своему вкусу.

Я использую виджет Stack в качестве макета своей страницы. Внутри этого стека я размещаю все дочерние виджеты с помощью виджета Align. Я пытался создать виджет ListView под моим дочерним элементом Align, но его карты (дочерние элементы) игнорируют выравнивание ListView при значении выравнивания, которое я установил для List, чтобы начать с.

    Align(
      alignment: Alignment(0, -0.28),
      child: Divider(
        color: Color.fromARGB(50, 255, 255, 255),
      ),
    ),
    Align(
      alignment: Alignment(0, -0.20),
      child: ListView(
        children: <Widget>[
          Card(
            child: ListTile(
            leading: Icon(some_icon),
            title: Text("blabla"),
          )),
        ],
      ),
    ),

Я ожидаю элементы ListView для запуска под моим разделителем, так как значение, установленное для вертикального выравнивания, равно -0.20, что ниже выравнивания разделителя (-0.28). Но вот как это выглядит:

enter image description here

Если я удаляю ListView и устанавливаю виджет Card как прямой дочерний элемент Align , позиционирование в порядке. Теперь, как я прочитал в документации, значения выравнивания виджета Align являются респектабельными, так как это only child , так как бы мне добиться того же для дочерних элементов ListView (Rows / ListTiles / Card et c)?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Пожалуйста, попробуйте это ...

      body: Container(
        child: Center(
          child: Padding(
            padding: EdgeInsets.all(10),
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Divider(
                  thickness: 20, // this is for example
                  height: 22, // this is for example
                  color: Colors.red, // this is for example
                ),
                Card (
                    child: ListTile(
                  leading: Icon(Icons.print),
                  title: Text("blabla"),
                )),
              ],
            ),
          ),
        ),
      ),
0 голосов
/ 10 марта 2020

Это всего лишь образец! Изменить как ваше требование. ( Отредактировано )

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: Stack(children: [
      //Your behind widgets here...
      Stack(children: [
        Card(
            color: Colors.white,
            child:
                ListTile(title: Text('1st card', textAlign: TextAlign.center))),
        Align(
          alignment:Alignment(0, -0.20),
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: <Widget>[
              Container(
                height: 2,
                width: double.infinity,
                color: Colors.black,
                margin: EdgeInsets.only(right: 25, left: 25),
              ),
              SizedBox(
                height: 10,
                width: double.infinity,
              ),
              Card(
                  color: Colors.white,
                  child: ListView(shrinkWrap: true, children: [
                    ListTile(
                        title: Text('List card', textAlign: TextAlign.center))
                  ])),
            ],
          ),
        )
      ])
    ]));
  }

Screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...