首页 > 解决方案 > Expanded ListView 仅适用于一个嵌套列,但仅此而已?我究竟做错了什么?

问题描述

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

[标题1][标题2][标题3]

[LiveFeed1][LiveFeed2][LiveFeed3]

所以我的布局是这样的。

Column1->Row1,Row2

第1行->扩展1(),扩展2(),扩展3()

Row2->展开(ListView1),展开(ListView2),展开(ListView3)

目前我只是想让至少一个列表视图以我可以依赖的方式工作。但是,我可以让它工作的唯一方法是: Column(Expanded(ListView)) 这不是我想要的。另一种方法是(我不记得了,因为我尝试了很多排列)是通过使用 shrinkwrap:true。但是出现了两个问题,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,
      ),
    );
  },
);
 }
}

标签: listviewflutterdart

解决方案


因此,将 Column 删除到每个 ListView 并不能单独工作。用 Expanded 包装 rowWithDetails() 不能单独工作。

但是,同时做这两件事。因此,我将列删除到 ListViews (OnBoardList()) 并用扩展的小部件包装 (rowWithDetails)。我不确定 StackOverflow 的形式,但 Tom 和 Zvi Karp 回答了我的问题。谢谢你。

旧代码:

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

新代码:

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

推荐阅读