Я просто хочу написать код флаттера для архивирования экрана чата. Этот виджет получает имя пользователя и текст сообщения. Длина текста сообщения - 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
),
])));
}
}