Как заполнить виджет высоты родительского (или получить родительский размер) во флаттере? - PullRequest
0 голосов
/ 09 мая 2019

Я новичок, чтобы трепетать, и у меня возникли проблемы с моим ListView. Мой ListView содержит много элементов, элемент ListView содержит содержание вопросов и некоторые комментарии пользователей.

Высота элемента автоматически определяется его дочерней высотой, также высота первых дочерних элементов (контейнер DeepOrange ниже) зависит от высоты родительского элемента (это не элемент ListView), его высота должна быть заполнена до родительского пункт.

Размер элементов ListView зависит от размера дочерних элементов, также первый виджет (контейнер ниже) в элементе также зависит от родительского элемента.

Как я могу это сделать?

Мне очень очень жаль, английский не мой язык приматов, мой английский очень плохой. Вот мой код:

import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart';

class MainPage extends StatefulWidget {
  const MainPage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MainPageState createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  var items = List.generate(10, (index) => index);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        children: items.map((item) => Row(
          /*I can't compute the real rendered height of the item by it's children content, because it's possible contain many replay message, different font size etc.*/
          children: <Widget>[
            Container(
              width: 5.0,
              /**
               * I want to fill the height to parent widget of the container,
               * (I want to make an timeline widget, it's should max height to its parent.)
               * but i can't get parent items size, or double.infinity etc,
               */
              height: 80.0, // How to fill the height to parent of the property? or how to get parent item size (or actually rendered height)?
              color: Colors.deepOrange,
            ),
            SizedBox(width: 10.0,),
            Expanded(
              child: Column(
                mainAxisSize: MainAxisSize.min,
                children: <Widget>[
                  Text("there is long comment of users, there is long comment of users, there is long comment of users, there is long comment of users, there is long comment of users, $item"),
                  /*
                  Also here is a lists of replay message by another user.
                  * */
                  Column(children: <Widget>[
                    Text("replay 1"),
                    Text("replay 2"),
                    Text("replay 3"),
                    Text("replay N"),
                  ],),
                  Row(
                    children: <Widget>[
                      IconButton(icon: Icon(Icons.favorite)),
                      IconButton(icon: Icon(Icons.delete)),
                      IconButton(icon: Icon(Icons.message)),
                    ],
                  )
                ],
              ),
            ),
          ],
        ),).toList(),
      ),
    );
  }
}

enter image description here

Я просто хочу подогнать этот фиолетовый контейнер по высоте к родительскому контейнеру. Заранее спасибо.

1 Ответ

1 голос
/ 09 мая 2019

Заверните свой список в контейнер.Затем установите высоту на размер экрана.Вы можете получить это через MediaQuery.

var screenSize = MediaQuery.of(context).size;
Container(
   height: screenSize.height,
   width: screenSize.width,
   child: ListView(...));
...