我将 CustomScrollView 与 SliverGrid 一起使用。我使用以下命令在网格项之间添加空间:mainAxisSpacing:8,crossAxisSpacing:8。但是是否可以在第一列之前和最后一列之后添加空间(边距/填充)。我尝试将 SliverGrid 包裹在 Padding 中,但出现错误:
RenderViewport 期望有一个 RenderSliver 类型的子代,但收到了一个 RenderPadding 类型的子代。
渲染对象需要特定类型的子对象,因为它们在布局和绘制期间与其子对象进行协调。例如,RenderSliver 不能是 RenderBox 的子级,因为 RenderSliver 不理解
请帮助我如何添加 GridView 的开始和结束边距。
我是一名 android 开发人员,并且是 flutter 的新手。
我想创建一个GridView与wrap content项目高度(我的截图用钢笔绘制)。但是我已经尝试过以下代码,它只给了我方形网格项。我想知道如何获取高度环绕内容网格项,但我不知道也找不到如何获取它。请帮忙。谢谢你。
class CategoryItem extends StatelessWidget {
final Category category;
CategoryItem({Key key, @required this.category})
: assert(category != null),
super(key: key);
@override
Widget build(BuildContext context) {
return Card(
child: Text(
category.name,
style: TextStyle(fontSize: 34.0, fontWeight: FontWeight.bold),
),
color: Colors.amberAccent,
);
}
}
class CategoryGrid extends StatefulWidget {
final List<Category> items;
const CategoryGrid({Key key, this.items}) : super(key: key);
@override
_CategoryGridState createState() => _CategoryGridState();
}
class _CategoryGridState extends State<CategoryGrid> {
@override
Widget build(BuildContext context) …Run Code Online (Sandbox Code Playgroud) 我想显示大小可变的小部件列表。
Flutter 的 Wrap 非常适合我的布局需求。
final List<dynamic> someItems;
return SingleChildScrollView(
child: Wrap(
children: someItems.map((item) => _createTile(context, item)).toList(),
),
scrollDirection: Axis.vertical,
);
Run Code Online (Sandbox Code Playgroud)
但是一个致命的问题是,Wrap 不能懒惰地创建小部件。例如,如果上图中显示的 Tile 小部件少于 100 个,但数据列表的数量更多,Wrap 甚至会创建不可见的小部件。
// The result of taking a log once for each item when configuring Wrap with a list of 1000 data.
I/flutter ( 4437): create Widget 0
I/flutter ( 4437): create Widget 1
I/flutter ( 4437): create Widget 2
I/flutter ( 4437): create Widget 3
I/flutter ( 4437): create Widget 4
I/flutter ( …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个凸起按钮的gridview,但是在网格的各行之间有大量空间,如下图所示:
我正在用页面底部的代码实现GridView:
如您所见,我设置了:
SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 150, mainAxisSpacing: 4, crossAxisSpacing: 4),
Run Code Online (Sandbox Code Playgroud)
我曾希望设置主轴间距和横轴间距会删除这些间距。
我还尝试过在大小框中返回gridview并将其更改为SliverGridWithFixedCount,但似乎没有任何更改。
我不确定我在布局中做错了什么吗?
谢谢你的帮助
body: Column(
children: <Widget>[
Flexible(
child: filtersGridView(),
),
],
),
);
}
}
class filtersGridView extends StatefulWidget {
@override
_filtersGridViewState createState() => _filtersGridViewState();
}
class _filtersGridViewState extends State<filtersGridView> {
final List <DocumentSnapshot> documents;
_filtersGridViewState({this.documents});
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance.collection('categories').snapshots(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (!snapshot.hasData) {
return Center(child: const Text('Loading events...'));
}
return GridView.builder(
gridDelegate:
SliverGridDelegateWithMaxCrossAxisExtent(maxCrossAxisExtent: 150, mainAxisSpacing: 4, crossAxisSpacing: 4), …Run Code Online (Sandbox Code Playgroud) 我试图从右到左填充网格视图数据,因为应用程序是阿拉伯语,一切都是 RTL。
我正在使用 Stream builder 来填充数据和以下 Gridview 小部件
Widget productGrid(List<Product> products) => GridView.count(
crossAxisCount: 3,
reverse: true,
controller: _scrollController,
padding: EdgeInsets.all(4.0),
childAspectRatio: 8.0 / 14,
children: products
.map(
(product) => MyBookList(item: product),
)
.toList(),
);
Run Code Online (Sandbox Code Playgroud)
有什么方法可以水平反转项目填充方向,就像reverse参数从底部到顶部垂直填充一样。谢谢你。