Я не могу центрировать более одного виджета в стеке

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

Widget _body() {
  return Stack(
    children: <Widget>[
      Positioned(
        left: 0,
        child: Text("Text here"),
      ),
      Align(
        child: Text(
          "First Centered Text",
          style: TextStyle(color: Colors.black87, fontSize: 30),
        ),
      ),
      Align(
        child: Text(
          "Second Centered Text",
          style: TextStyle(color: Colors.black87, fontSize: 30),
        ),
      ),
    ],
  );
}

Я хочу достичь этого введите описание изображения здесь

Будет ли Positioned работать на вас или вы хотите пойти только с Align?

CopsOnRoad 08.04.2019 16:04

У меня все работает, я не хочу, чтобы это было написано с фиксированными значениями пикселей.

jozeru 08.04.2019 16:09

Я думаю, что вам лучше использовать Align, и вы должны указать там фиксированное значение, однако, если вам не нравится фиксированный подход, лучший способ — использовать Column.

CopsOnRoad 08.04.2019 16:12

Если я использую столбец, я не могу использовать анимацию sizedTransition.

jozeru 08.04.2019 16:14

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

CopsOnRoad 08.04.2019 16:15

Я добавил изображение.

jozeru 08.04.2019 16:51

Решение сработало? Пожалуйста, дайте мне знать, если у вас возникнут дополнительные проблемы.

CopsOnRoad 08.04.2019 18:59
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
28
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Widget _buildBody() {
  return Stack(
    alignment: Alignment.center,
    children: <Widget>[
      Align(
        alignment: Alignment(0, -0.95),
        child: Image.asset('assets/images/profile.jpg', width: 200, height: 200, fit: BoxFit.cover,),
      ),
      Align(
        alignment: Alignment(0, -0.35),
        child: Text("Centered Text"),
      ),
      Align(
        alignment: Alignment(0, -0.1),
        child: Text("Second centered text"),
      ),
      Align(
        alignment: Alignment(0, 0.1),
        child: CircularProgressIndicator(),
      )
    ],
  );
}

Да, это то, что я хочу. Однако мне нужно подумать о размере изображения прямо сейчас :) Должен автоматически рассчитываться дробь в зависимости от размера изображения. Использование статических жестко закодированных значений может вызвать проблемы.

jozeru 09.04.2019 19:20

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

CopsOnRoad 09.04.2019 19:22

Если вы хотите пойти с Align, вот то, что вам нужно.

Widget _body() {
  return Stack(
    alignment: Alignment.center,
    children: <Widget>[
      Positioned(
        top: 0,
        left: 0,
        child: Text("Text here"),
      ),
      Align(
        child: Text(
          "Centered Text",
          style: TextStyle(color: Colors.black87, fontSize: 30),
        ),
      ),
      Align(
        alignment: Alignment(0.0, 0.1), // change this value to place it below the 1st centered widget
        child: Text(
          "Second Centered Text",
          style: TextStyle(color: Colors.black87, fontSize: 30),
        ),
      ),
    ],
  );
}

Другие вопросы по теме