Flutter 小部件在颤振中占用了最大的空间

Flutter 小部件在颤振中占用了最大的空间,flutter,dart,Flutter,Dart,我在StreamBuilder中有一些小部件(消息气泡),但是当消息气泡适应内部文本的大小时,它们会占用尽可能多的空间。 这是主屏幕的代码: @override Widget build(BuildContext context) { return SafeArea( child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [

我在StreamBuilder中有一些小部件(消息气泡),但是当消息气泡适应内部文本的大小时,它们会占用尽可能多的空间。 这是主屏幕的代码:

@override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.spaceBetween,
        children: [
          StreamBuilder<QuerySnapshot>(
            stream: _firestore.collection('messages').snapshots(),
            builder: (context, snapshot){
              List<Widget> messagesWidgets = [];
              if (snapshot.hasData){
                final messages = snapshot.data.docs;
                for (var message in messages){
                  final messageText = message.data()['text'];
                  final messageSender = message.data()['sender'];

                  final messageWidget = MessageBubble(
                    text: messageText,
                    sender: messageSender,
                  );
                  messagesWidgets.add(messageWidget);
                }
              }

              return Expanded(
                child: ListView(
                  //padding: EdgeInsets.symmetric(horizontal: 0.0, vertical: 20.0),
                  children: messagesWidgets,
                ),
              );
            },
          ),
          Container(
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              children: [
               Expanded(
                 flex: 6,
                 child: TextInput(
                   textAlign: TextAlign.left,
                   onChanged: (value){
                      messageText = value;
                   },
                   hintText: 'Type a message',
                 ),
               ),
                Expanded(
                  flex: 1,
                  child: Button(
                    child: Icon(Icons.send, color: background,),
                    function: (){
                      if(messageText.trim() == '') return;
                      _firestore.collection('messages').add({
                        'text': messageText,
                        'sender': Usr.email,
                      });
                      setState(() {
                        messageText = '';
                      });
                    },
                    tag: 'hey2d2',
                  ),
                ),
              ],
            ),
          ),
        ],
      ),
    );
下面是我的意思的截图:

之所以发生这种情况,是因为
ListView
小部件自动强制其子部件占用所有可用宽度。通过使用
Align
小部件包装消息气泡容器,可以绕过此行为。见下文:

@覆盖
小部件构建(构建上下文){
返回对齐(
//将“对齐”的对齐设置为“左中心”。
对齐:alignment.centerLeft,
子:容器(
...
),
);
}
@override
  Widget build(BuildContext context) {
    return Container(
      child: Padding(
        padding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
        child: Material(
          elevation: 10.0,
          borderRadius: BorderRadius.circular(30.0),
          color: Colors.white,
            child: Padding(
              padding: EdgeInsets.symmetric(vertical: 10.0, horizontal: 20.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  Text(
                    '$sender',
                    style: TextStyle(
                      fontSize: 15.0,
                      fontWeight: FontWeight.bold,
                      color: background,
                    ),
                  ),
                  Text(
                      '$text',
                    style: TextStyle(
                      fontSize: 15.0,
                      color: background,
                    ),
                  ),
                ],
              ),
            ),
        ),
      ),
    );