Виджет, который приспосабливается к размеру детей? - PullRequest
0 голосов
/ 30 апреля 2020

Есть ли во Flutter виджет, который настраивает себя на содержание своих дочерних элементов в строках и столбцах?

Кажется, я не могу найти ничего связанного, и меня постоянно поражают бесконечные ошибки переполнения .....

В качестве примера, скажем, у меня будет 3 виджета в строке, 1 из которых является текстом, который я не могу догадаться, как долго это будет, но мне нужно расширить родительский столько, сколько нужно виджету и в то же время обернуть текст

У меня будет что-то вроде:

Row(
children: [
Expanded(child: Widget1(....)),
Expended(child: Text(.....)),
Expanded(child: Widget2(....))
]
)

Верно?

Я бы хотел родителя строки чтобы расширить столько, сколько нужно для показа дочерних элементов, я хочу выровнять Widget1 и Widget2 по-разному (1-центр, 2-низ). Если я помещу их в столбец, я могу центрировать Widget1, но я не могу поместить Widget2 внизу, потому что, если я помещу столбец в максимальный размер, он переполняется, если я не делаю, он не выравнивается ...

Как Вы бы сделали это?

Я действительно не понимаю логику c, стоящую за вещами макетов inifnite ....

Например, вот где я застрял в данный момент.

return Column(
      mainAxisSize: MainAxisSize.min,
      children: <Widget>[
        Container(
          padding: EdgeInsets.all(10),
          decoration: BoxDecoration(
              boxShadow: [
                BoxShadow(
                    color: Global.findCategory(event.categId).color.withAlpha(150),
                    blurRadius: 20,
                    spreadRadius: -20,
                    offset: Offset(0, 5)
                )
              ],
              color: Colors.white,
              borderRadius: BorderRadius.circular(30)
          ),
          child: Row(
            children: <Widget>[
              Align(
                alignment: Alignment.center,
                child: Padding(
                  padding: const EdgeInsets.all(5.0),
                  child: Container(
                      width: Global.scaleSmallDevice(context) * 64,
                      height: Global.scaleSmallDevice(context) * 64,
                      decoration: BoxDecoration(
                          shape: BoxShape.rectangle,
                          borderRadius: BorderRadius.circular(10),
                          image: DecorationImage(
                              fit: BoxFit.cover,
                              image: event.image
                          )
                      )
                  ),
                )
                ,
              ),
              Flexible(
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  mainAxisSize: MainAxisSize.min,
                  children: <Widget>[
                    CustomText(
                      text: title,
                      color: Global.findCategory(event.categId).color,
                      fontSize: 16,
                    ),
                    Flexible(
                      child: CustomText(
                        text: shortInfo,
                        color: Global.findCategory(event.categId).color,
                        fontSize: 12,
                      ),
                    )
                  ],
                ),
              ),
              Stack(
                alignment: Alignment.bottomCenter,
                children: <Widget>[
                  Align(
                    alignment: Alignment.bottomCenter,
                    child: StatefulBuilder(
                      builder: (context, setState) {
                        IconData buttonIcon = (event.favorite) ? Icons.favorite : Icons.favorite_border;
                        return SplashButton(
                            splashColor: Global.findCategory(event.categId).color,
                            child: Icon(buttonIcon, color: Global.findCategory(event.categId).color, size: 30),
                            onTap: () async {
                              await event.setFavorite(context);
                              setState(() {
                                buttonIcon = (event.favorite) ? Icons.favorite : Icons.favorite_border;
                              });
                            }
                        );
                      },
                    ),
                  ),
                ],
              ),
        ),
      ],
    );
  }

В этом случае я хочу, чтобы виджет StatefulBuilder находился внизу, а весь контейнер был таким же маленьким, как столбец с виджетами CustomText.

Виджет с изображением внутри, который я хочу он будет центрирован, а текст будет полностью доступен для пользователя.

Если я не добавлю столбец в качестве контейнера, он пойдет, как позволяет высота, а сам виджет StatefulBuilder центрируется внизу, в текущем коде он находится в центре .....

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

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