Пузырь чата сообщений с подробностями

#flutter #flutter-layout

Вопрос:

Итак, я новичок в сцене Флаттера, и у меня возникли некоторые проблемы с завершением пузырька сообщений для приложения для практики чата. Это работает нормально, вот так:

https://i.ibb.co/1qstjqR/now.jpg

Код, который генерирует пузырь, выглядит следующим образом:

 Widget bubble(){
return Padding(
  padding: padding(),
  child: Row(
    mainAxisAlignment:
    mine ? MainAxisAlignment.end : MainAxisAlignment.start,
    children: <Widget>[
      SizedBox(height: 30),
      Flexible(
          child: Row(
            mainAxisAlignment:
            mine ? MainAxisAlignment.end : MainAxisAlignment.start,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [

              //BUBBLE TAIL
              mine
                  ? Container()
                  : Transform(
                alignment: Alignment.center,
                transform: Matrix4.rotationY(math.pi),
                child: CustomPaint(
                  painter: CustomShape(colorChat),
                ),
              ),
              
              Flexible(
                child: Container(
                  padding: EdgeInsets.all(10),
                  decoration: BoxDecoration(
                    color: colorChat,
                    borderRadius: border(),
                  ),
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.end,
                    children: [

                      //MESSAGE STR CONTENT
                      Text(
                        messageStr,
                        textAlign: TextAlign.justify,
                        style: TextStyle(fontSize: 16),
                      ),

                      //TIMESTAMP (AND DETAIL IN FUTURE)
                      Padding(
                        padding: const EdgeInsets.only(top: 5),
                        child: Text(
                          dateTimeStr,
                          style: TextStyle(color: Colors.white, fontSize: 10),
                        ),
                      ),
                    ],
                  ),
                ),
              ),

              //BUBBLE TAIL
              mine ? CustomPaint(painter: CustomShape(colorChat)) : Container(),
            ],
          )),
    ],
  ),
);
 

Проблема в следующем: я пытаюсь поместить строку, содержащую более подробную информацию о сообщении (например, расширение и размер файла), в ту же строку даты и времени, в крайнем левом углу.

Самое близкое, что мне удалось сделать, — это код ниже:

 Padding(
      padding: const EdgeInsets.only(top: 5),
      child: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          Expanded(                
            child: Align(
              alignment: Alignment.centerLeft,
              child: Text(
                "some detail",
                style: TextStyle(color: Colors.white, fontSize: 10),
              ),
            ),
          ),
          Align(
            alignment: Alignment.centerRight,
            child: Text(
              dataMsg,
              style: TextStyle(color: Colors.white, fontSize: 10),
            ),
          ),
        ],
      ),
    )
 

Но это делает пузырь всегда большим:

https://i.ibb.co/JjYx0vY/detail-bad.jpg

Это из-за Расширения. Но без этого первый виджет выравнивания не работает и остается крайним справа.

Как бы мне хотелось, чтобы это было:

https://i.ibb.co/gt633Gc/detail-ok.jpg

Спасибо!

Ответ №1:

Удалите развернутые и выровняйте виджеты. И добавьте свойство mainAxisAlignment: MainAxisAlignment.конец виджета строки.

 Padding(
          padding: const EdgeInsets.only(top: 5),
          child: Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              Text(
                "some detail",
                style: TextStyle(color: Colors.white, fontSize: 10),
              ),
              Align(
                alignment: Alignment.centerRight,
                child: Text(
                  "hello",
                  style: TextStyle(color: Colors.white, fontSize: 10),
                ),
              ),
            ],
          ),
        )
 

Комментарии:

1. Спасибо за вашу помощь! Я думаю, что я пробовал что-то подобное, потому что я уже видел этот результат раньше: пузырьки становятся больше, а тексты выравниваются вправо i.ibb.co/MDgDR9x/changes.jpg