扩展的ListView仅适用于一个嵌套列,但不能超过该嵌套列?我做错了什么?

扩展的ListView仅适用于一个嵌套列,但不能超过该嵌套列?我做错了什么?,listview,flutter,dart,Listview,Flutter,Dart,所以在过去的两天里我一直有这个bug。基于我从Flatter中得到的错误,我在互联网上尝试了很多东西,但一个问题/解决方案会导致另一个问题。或者这根本不是我想要做的。基本上我想要的是: [Header1][Header2][Header3] [LiveFeed1][LiveFeed2][LiveFeed3] 所以我的布局是这样的 第1列->第1行,第2行 行1->Expanded1(),Expanded2(),Expanded3() 行2->展开(ListView1)、展开(ListView2)

所以在过去的两天里我一直有这个bug。基于我从Flatter中得到的错误,我在互联网上尝试了很多东西,但一个问题/解决方案会导致另一个问题。或者这根本不是我想要做的。基本上我想要的是:

[Header1][Header2][Header3]

[LiveFeed1][LiveFeed2][LiveFeed3]

所以我的布局是这样的

第1列->第1行,第2行

行1->Expanded1(),Expanded2(),Expanded3()

行2->展开(ListView1)、展开(ListView2)、展开(ListView3)

目前,我正在尝试让至少一个ListView工作,这样我就有了可以依赖的东西。然而,我能让它工作的唯一方法是:Column(Expanded(ListView)),这不是我想要的。另一种方法是(我不记得了,因为我尝试了这么多的排列)通过使用包覆膜收缩:真。但是出现了两个问题,1我的应用程序出血,2我无法滚动

这是我的代码:

  Widget build(BuildContext context) {
return Scaffold(
  appBar: AppBar(
    leading: Icon(Icons.dashboard),
    actions: <Widget>[
      IconButton(
          icon: Icon(Icons.close),
          onPressed: () {
            _auth.signOut();
            Navigator.pop(context);
            //TODO: Implement logout functionality
          }),
    ],
    title: Text('Title'),
    backgroundColor: Colors.lightBlueAccent,
  ),
  body: SafeArea(
    child: Column(
      children: <Widget>[
        //JobsOnBoardList(),
        rowWithHeader(),
        rowWithDetails(),
      ],
    ),
  ),
  floatingActionButton: getButton(),
);
  }

  Row rowWithHeader() {
return Row(
  children: <Widget>[
    Expanded(
      child: Card(
        child: Text("Header1"),
      ),
    ),
    Expanded(
      child: GestureDetector(
        child: Card(
          child: Text("Header2"),
        ),
      ),
    ),
    Expanded(
      child: Card(
        child: Text("Header3"),
      ),
    ),
  ],
  );
  }

  Row rowWithDetails() {
return Row(
  children: <Widget>[
    Column(
      children: <Widget>[
        OnBoardList(),
      ],
    ),
    Column(
      children: <Widget>[
        OnBoardList(),
      ],
    ),
    Column(
      children: <Widget>[
        OnBoardList(),
      ],
    ),
  ],
   );
 }
 }


class _OnBoardList extends State<OnBoardList> {
final _auth = FirebaseAuth.instance;

@override
void initState() {
// TODO: implement initState
getCurrentUser();
super.initState();
}

void getCurrentUser() async {
try {
  final user = await _auth.currentUser();
  if (user != null) {
    loggedInUser = user;
    print(loggedInUser.email);
  }
} catch (e) {
  print(e);
}
 }

 @override
 Widget build(BuildContext context) {
 return MessageStream();
 }
}

 class MessageStream extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   // TODO: implement build
   return StreamBuilder<QuerySnapshot>(
  //stream: _firestore.collection('messages').snapshots(),
  stream: _firestore.collection(all_jobs_created_collection).orderBy('TimeCreated').snapshots(),
  builder: (context, snapshot) {

    if (!snapshot.hasData) {
      return Center(
        child: CircularProgressIndicator(
          backgroundColor: Colors.lightBlueAccent,
        ),
      );
    }

    final messages = snapshot.data.documents.reversed;
    List<MessageBubble> messageBubbles = [];
    for (var message in messages) {
      final messageText = message.data['Field1'];
      final messageTimeStamp = message.data['Field2'];
      //print("=====Messages======");
      //print(messageText);
      //print(messageTimeStamp);
      final messageBubble = MessageBubble(
        timeStamp: messageTimeStamp,
        text: messageText,
      );
      messageBubbles.add(messageBubble);
    }
    return Expanded(
      child: ListView(
        reverse: true,
        padding: EdgeInsets.symmetric(horizontal: 10.0, vertical: 20.0),
        children: messageBubbles,
      ),
    );
  },
);
 }
}
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
前导:图标(图标.仪表板),
行动:[
图标按钮(
图标:图标(Icons.close),
已按下:(){
_auth.signOut();
Navigator.pop(上下文);
//TODO:实现注销功能
}),
],
标题:文本(“标题”),
背景颜色:Colors.lightBlueAccent,
),
正文:安全区(
子:列(
儿童:[
//JobsOnBoardList(),
rowWithHeader(),
rowWithDetails(),
],
),
),
floatingActionButton:getButton(),
);
}
行rowWithHeader(){
返回行(
儿童:[
扩大(
孩子:卡片(
子项:文本(“标题1”),
),
),
扩大(
儿童:手势检测器(
孩子:卡片(
子项:文本(“标题2”),
),
),
),
扩大(
孩子:卡片(
子项:文本(“标题3”),
),
),
],
);
}
行WithDetails(){
返回行(
儿童:[
纵队(
儿童:[
OnBoardList(),
],
),
纵队(
儿童:[
OnBoardList(),
],
),
纵队(
儿童:[
OnBoardList(),
],
),
],
);
}
}
类_OnBoardList扩展状态{
final _auth=FirebaseAuth.instance;
@凌驾
void initState(){
//TODO:实现initState
getCurrentUser();
super.initState();
}
void getCurrentUser()异步{
试一试{
最终用户=等待_auth.currentUser();
如果(用户!=null){
loggedInUser=用户;
打印(loggedInUser.email);
}
}捕获(e){
印刷品(e);
}
}
@凌驾
小部件构建(构建上下文){
返回MessageStream();
}
}
类MessageStream扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回流生成器(
//流:_firestore.collection('messages').snapshots(),
流:_firestore.collection(所有_作业_创建的_集合).orderBy('TimeCreated').snapshots(),
生成器:(上下文,快照){
如果(!snapshot.hasData){
返回中心(
子对象:循环压缩机指示器(
背景颜色:Colors.lightBlueAccent,
),
);
}
最终消息=snapshot.data.documents.reversed;
列表messageBubbles=[];
for(消息中的var消息){
final messageText=message.data['Field1'];
final messageTimeStamp=message.data['Field2'];
//打印(“=======消息=====”);
//打印(消息文本);
//打印(消息时间戳);
final messageBubble=messageBubble(
时间戳:messageTimeStamp,
text:messageText,
);
messageBubbles.add(messageBubble);
}
扩大回报(
子:ListView(
相反:是的,
填充:边缘组。对称(水平:10.0,垂直:20.0),
孩子们:泡泡,
),
);
},
);
}
}

因此,将列删除到每个ListView并不是单独起作用的。 使用扩展的包装行WithDetails()并不能单独工作

然而,同时做这两件事确实起了作用。因此,我删除了ListView的列(OnBoardList()),并用扩展的小部件包装(rowWithDetails)。我不确定StackOverflow的手续,但Tom和Zvi Karp回答了我的问题。多谢各位

旧代码:

   Row rowWithDetails() {
   return Row(
     children: <Widget>[
       Column(
         children: <Widget>[
           OnBoardList(),
         ],
       ),
       Column(
         children: <Widget>[
           OnBoardList(),
         ],
       ),
       Column(
         children: <Widget>[
           OnBoardList(),
         ],
       ),
     ],
      );
    }
    }
rowWithDetails()行{
返回行(
儿童:[
纵队(
儿童:[
OnBoardList(),
],
),
纵队(
儿童:[
OnBoardList(),
],
),
纵队(
儿童:[
OnBoardList(),
],
),
],
);
}
}
新代码:

       Expanded rowWithDetails() {
       return Expanded(
         child: Row(
           children: <Widget>[
             OnBoardList(),
             OnBoardList(),
             OnBoardList(),
           ],
         ),
       );
     }
   }
扩展行WithDetails(){
扩大回报(
孩子:排(
儿童:[
OnBoardList(),
OnBoardList(),
OnBoardList(),
],
),
);
}
}

当您返回
OnBoardList()的行时,为什么要用
列将每个行包装起来呢?我会将
rowWithDetails()
放在一个
展开的
小部件中,以明确确保为其分配了大小。老实说,我是个新手,我只是按照我正在看的视频中的模式。作为一个整体,我对应用程序开发还不熟悉,我仍然掌握着窍门。为了回答你的问题,Zvi Karp,我不知道我为什么这么做。