在 FutureBuilder 的情况下,我应该如何获得一组可滚动的小部件而不会溢出
How should I get a scrollable set of widgets without overflow in case of FutureBuilder
我的代码中有一个 FutureBuilder,它根据从 Firestore 获取的数据生成一个小部件列表。我希望屏幕可以滚动而不会出现任何溢出错误。这是我的代码:
FutureBuilder<QuerySnapshot>(
future:
FirebaseFirestore.instance.collection('Assignments').get(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Column(
children: snapshot.data?.docs.map((doc) {
return Column(
children: [
Subject(
dataMap: doc.data() as Map<dynamic, dynamic>),
Divide()
],
);
}).toList() ??
[],
);
} else {
// or your loading widget here
return Text("Loading....");
}
},
),
这是我在屏幕上得到的输出:
我希望这个屏幕可以滚动。我使用了 SingleChildScrollview,但这使全屏可滚动,而我只希望“分配”标题下方的小部件列表可滚动。
您可以使用一个 ListView
而不是多个 Column
。 ListView
是可滚动的,因此您不会遇到溢出小部件的任何问题。 ListView.Builder
构造函数采用 itemCount
和 builder
,您只需 return 每个 ListItem 的小部件。
那么您的 FutureBuilder 将如下所示:
FutureBuilder<QuerySnapshot>(
future:
FirebaseFirestore.instance.collection('Assignments').get(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return Column(
children: [
Subject(
dataMap: snapshot.data.docs[index].data() as Map<dynamic, dynamic>),
Divide()
],
);
},
);
} else {
// or your loading widget here
return Text("Loading....");
}
},
),
我的代码中有一个 FutureBuilder,它根据从 Firestore 获取的数据生成一个小部件列表。我希望屏幕可以滚动而不会出现任何溢出错误。这是我的代码:
FutureBuilder<QuerySnapshot>(
future:
FirebaseFirestore.instance.collection('Assignments').get(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return Column(
children: snapshot.data?.docs.map((doc) {
return Column(
children: [
Subject(
dataMap: doc.data() as Map<dynamic, dynamic>),
Divide()
],
);
}).toList() ??
[],
);
} else {
// or your loading widget here
return Text("Loading....");
}
},
),
这是我在屏幕上得到的输出:
我希望这个屏幕可以滚动。我使用了 SingleChildScrollview,但这使全屏可滚动,而我只希望“分配”标题下方的小部件列表可滚动。
您可以使用一个 ListView
而不是多个 Column
。 ListView
是可滚动的,因此您不会遇到溢出小部件的任何问题。 ListView.Builder
构造函数采用 itemCount
和 builder
,您只需 return 每个 ListItem 的小部件。
那么您的 FutureBuilder 将如下所示:
FutureBuilder<QuerySnapshot>(
future:
FirebaseFirestore.instance.collection('Assignments').get(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasData) {
return ListView.builder(
itemCount: snapshot.data.docs.length,
itemBuilder: (context, index) {
return Column(
children: [
Subject(
dataMap: snapshot.data.docs[index].data() as Map<dynamic, dynamic>),
Divide()
],
);
},
);
} else {
// or your loading widget here
return Text("Loading....");
}
},
),