listview - 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,
),
);
},
);
}
}
解决方案
因此,将 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(),
],
),
);
}
}
推荐阅读
- performance - 按组matlab计算观察次数
- python - 有没有办法修改传递给 seaborn 中 facetgrid 的数据框?
- javascript - 通过 div id 选择 div 内的锚点
- python - 提供随机输出的更简单方法?
- flutter - 如何在应用程序启动时导航到特定路线并在 Flutter 中弹出时显示另一条路线?
- php - 满足 PHP 条件时向 html 元素添加类
- html - 调整 Firefox 移动主视口的大小
- python - 下载 spacy 模型 fr_core_news_lg
- opencv3.0 - 高光谱图像可以存储在 cv::mat 中吗?
- css - 窗口调整大小时如何将CSS框保留在父亲内部