【发布时间】:2021-06-02 20:04:20
【问题描述】:
我正在尝试制作一张卡片列表,其中包含一张图片作为背景,底部的 3 个图标带有各自的文字。 第一张图是这段代码的作用,第二张图是最佳结果,但我不知道该怎么做。
Expanded(
child: GridView.count(
crossAxisCount: 1,
children: <Widget> [
Card(
semanticContainer: true,
clipBehavior: Clip.antiAliasWithSaveLayer,
child: InkWell(
onTap: () {
BlocProvider.of<NavigationBloc> (context).add(NavigationEvents.SystemsPageClickedEvents);
},
child: Column(
children: <Widget> [
Image.asset('assets/images/test.png'),
],
),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
margin: EdgeInsets.all(20.0),
),
Card(
semanticContainer: true,
clipBehavior: Clip.antiAliasWithSaveLayer,
child: InkWell(
onTap: () {
BlocProvider.of<NavigationBloc> (context).add(NavigationEvents.SystemsPageClickedEvents);
},
child: Column(
children: <Widget> [
Image.asset('assets/images/test.png'),
],
),
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10.0),
),
margin: EdgeInsets.all(20.0),
),
]
),
),
如果我使用此代码,我会收到错误:ParentDataWidget 使用不正确。 通常,这意味着 Placed 小部件的 RenderObjectWidget 祖先错误。通常,放置的小部件直接放置在 Stack 小部件中。 Offensive Positioned 当前放置在 ConstrainedBox 小部件内。 最终结果是关于我想要的,因为如您所见,它在一张卡和另一张卡之间创建了太多空间。问题是 Container 但我不知道如何在不使用 height: 180, 的情况下获得相同的结果。如何解决这两个问题?
Expanded(
child: GridView.count(
crossAxisCount: 1,
children: <Widget> [
Stack(
children: [
Container(
height: 180,
child: Positioned.fill(
child: InkWell(
onTap: () {
BlocProvider.of<NavigationBloc> (context).add(NavigationEvents.SystemsPageClickedEvents);
},
child: Image.asset('assets/images/test.png', fit: BoxFit.fill,),
),
),
),
Positioned(
bottom: 140,
left: 0,
right: 0,
child: Container(
height: 60,
color: Colors.green,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 15.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
const Icon(Icons.house),
const Icon(Icons.house),
const Icon(Icons.house),
],
),
),
),
)
],
),
]
),
),
【问题讨论】:
-
对于这种布局,可以使用 Stack
标签: flutter dart flutter-layout