如何使 ListView.Builder 的项目显示在屏幕宽度内?
How To Make ListView.Builder's items appear within the screen width?
是否可以使用一个 ListView.Builder 将其所有项目填充到屏幕宽度内的不同行?
目前,我的临时方法有 2 ListView.Builders。这将我的清单减半。我希望 ListView.Builder 在屏幕宽度限制内显示列表中的所有内容。如果不够 space,则将兴趣填充到另一行。
列表名称为interests,是一个字符串列表
Padding(
padding: const EdgeInsets.fromLTRB(6, 6, 0, 0),
child: Container(
height: MediaQuery.of(context).size.height * 0.039,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.all(1),
itemCount: 5,
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border:
Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal:
MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height *
0.0045),
child: Text(
interests[index],
style: TextStyle(fontSize: 12),
));
}),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(6, 3, 0, 0),
child: Container(
height: MediaQuery.of(context).size.height * 0.039,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.all(1),
itemCount: 4,
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border:
Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal:
MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height *
0.0045),
child: Text(
interests[5 + index],
style: TextStyle(fontSize: 12),
));
}),
),
),
My current example: 2个Listviews可能流出屏幕。
我想要的结果:
Container bubbles filling up within screen's width如果最后一个气泡溢出屏幕,它会自动形成一个新行。
Flutter 的 Wrap
小部件提供了这个功能。
默认情况下 Wrap
放置其子项 horizontally
并在其子项超出给定限制时自动包装其子项。
这样用,
// Suppose you have data like this.
List<String> interests = ['Bollywood','Biryani','Running','Punjabi','Dancing'];
// Use them inside build function like this
Container(
height: MediaQuery.of(context).size.height * 0.039,
child: Wrap(
children: interests.map((interest) => Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height * 0.0045
),
child: Text(
interest,
style: TextStyle(fontSize: 12),
),
)).toList()
),
),
结果是这样
是否可以使用一个 ListView.Builder 将其所有项目填充到屏幕宽度内的不同行?
目前,我的临时方法有 2 ListView.Builders。这将我的清单减半。我希望 ListView.Builder 在屏幕宽度限制内显示列表中的所有内容。如果不够 space,则将兴趣填充到另一行。
列表名称为interests,是一个字符串列表
Padding(
padding: const EdgeInsets.fromLTRB(6, 6, 0, 0),
child: Container(
height: MediaQuery.of(context).size.height * 0.039,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.all(1),
itemCount: 5,
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border:
Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal:
MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height *
0.0045),
child: Text(
interests[index],
style: TextStyle(fontSize: 12),
));
}),
),
),
Padding(
padding: const EdgeInsets.fromLTRB(6, 3, 0, 0),
child: Container(
height: MediaQuery.of(context).size.height * 0.039,
child: ListView.builder(
shrinkWrap: true,
scrollDirection: Axis.horizontal,
padding: const EdgeInsets.all(1),
itemCount: 4,
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border:
Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal:
MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height *
0.0045),
child: Text(
interests[5 + index],
style: TextStyle(fontSize: 12),
));
}),
),
),
My current example: 2个Listviews可能流出屏幕。
我想要的结果: Container bubbles filling up within screen's width如果最后一个气泡溢出屏幕,它会自动形成一个新行。
Flutter 的 Wrap
小部件提供了这个功能。
默认情况下 Wrap
放置其子项 horizontally
并在其子项超出给定限制时自动包装其子项。
这样用,
// Suppose you have data like this.
List<String> interests = ['Bollywood','Biryani','Running','Punjabi','Dancing'];
// Use them inside build function like this
Container(
height: MediaQuery.of(context).size.height * 0.039,
child: Wrap(
children: interests.map((interest) => Container(
margin: EdgeInsets.only(right: 9),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.yellow[100])),
padding: EdgeInsets.symmetric(
horizontal: MediaQuery.of(context).size.width * 0.030,
vertical: MediaQuery.of(context).size.height * 0.0045
),
child: Text(
interest,
style: TextStyle(fontSize: 12),
),
)).toList()
),
),
结果是这样