Как я могу устранить переполненные пиксели в моем коде флаттера? (Длина текста - Dynami c) - PullRequest
0 голосов
/ 14 апреля 2020

Я просто хочу написать код флаттера для архивирования экрана чата. Этот виджет получает имя пользователя и текст сообщения. Длина текста сообщения - Dynami c, и я ограничиваю максимальную пропускную способность внешнего контейнера 200,0. Но когда я добавляю индикатор ошибки в заголовок раздела сообщения, текстовая секция не может нормально переноситься.

И я пытаюсь обернуть текстовую секцию с помощью Flexible, хотя текстовая секция может переноситься, но индикатор ошибки исправлен слева, чего не хочу. так как я могу решить эту проблему !!!

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:bubble/bubble.dart';


class ChatItemWidget extends StatefulWidget {
    final String text;
    final String username;
    final AnimationController animationController;

    ChatItemWidget({
      this.username,
      this.text,
      this.animationController,
    });

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

class _ChatItemWidgetState extends State<ChatItemWidget> {
    Widget buildUsername() {
      return Container(
          child: Text(widget.username,
              style: TextStyle(fontSize: 12.0, fontWeight: FontWeight.w600)));
    }

    Widget buildErrMsgHeader() {
      return Container(
              decoration: BoxDecoration(border: Border.all(color: Colors.red)),
              child: CircleAvatar(
                  backgroundColor: Colors.red,
                  radius: 8.0,
                  child: new Text('!',
                      style: TextStyle(
                          fontSize: 12,
                          fontWeight: FontWeight.w600,
                          color: Colors.white))));
    }

    Widget buildTextSection() {
      return Container(
          constraints: BoxConstraints(maxWidth: 200.0),
          decoration: BoxDecoration(border: Border.all(color: Colors.red)),
          child: Row(
            mainAxisSize: MainAxisSize.min,
            mainAxisAlignment: MainAxisAlignment.end, children: [
            buildErrMsgHeader(),
            Bubble(
                    margin: BubbleEdges.only(top: 5),
                    shadowColor: Colors.green,
                    elevation: 2,
                    alignment: Alignment.topRight,
                    nip: BubbleNip.rightTop,
                    color: Color.fromARGB(255, 225, 255, 199),
                    child: Expanded(
                      child:Column(
                        children: [Text(
                      widget.text,
                      overflow: TextOverflow.ellipsis,
                      style: TextStyle(color: Colors.black),
                    )])),
      )]));
    }

    Widget buildTimeStamp(int nowTimeStamp) {
    // var nowTimeStamp = DateTime.now().millisecondsSinceEpoch;
      return Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              margin: EdgeInsets.symmetric(vertical: 20.0),
              child: Text(
                DateFormat('dd MMM kk:mm')
                    .format(DateTime.fromMillisecondsSinceEpoch(nowTimeStamp)),
                style: TextStyle(
                    color: Colors.grey,
                    fontSize: 12.0,
                    fontStyle: FontStyle.normal),
              ),
            )
          ]);
    }

    Widget buildUserPic() {
      return Container(
        // height: 40.0,
        alignment: Alignment.centerRight,
        margin: const EdgeInsets.only(left: 16.0),
        child: new CircleAvatar(
          radius: 25.0,
          child: new Text(
            widget.username[0].toUpperCase(),
            style: TextStyle(color: Colors.redAccent),
          ),
        ),
      );
    }
    @override
    Widget build(BuildContext context) {
      return new SizeTransition(
          sizeFactor: new CurvedAnimation(
              parent: widget.animationController, curve: Curves.easeOut),
          axisAlignment: 0.0,
          child: Container(
              margin: EdgeInsets.symmetric(vertical: 8.0),
              child: Column(children: <Widget>[
                buildTimeStamp(widget.timestamp),
                Row(
                  children: <Widget>[
                    Column(
                        crossAxisAlignment: CrossAxisAlignment.end,
                        children: <Widget>[
                          // new Text(_name, style: Theme.of(context).textTheme.subhead),
                          buildUsername(),
                          buildTextSection(),
                        ]),
                    buildUserPic()
                  ],
                  mainAxisAlignment:
                      MainAxisAlignment.end, // aligns the chatitem to right end
                ),
              ])));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...