【发布时间】:2020-02-08 21:53:34
【问题描述】:
按照StaggeredGridView 上的教程,我成功地构建了一个页面来显示交错的文本网格和一个图标。本教程没有解释如何分别链接每个网格项目。我知道 onTap、GestureDetector、OnPressed,但我不知道如何在这个网格布局中实现这些,以便每个元素都可以链接到不同的材料页面路由(或 _UrlLauncher 等)
child: Material(
child: StaggeredGridView.count(
crossAxisCount: 2,
crossAxisSpacing: 8,
mainAxisSpacing: 16,
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0),
children: < Widget > [
MyItems(Icons.shop, "Tecxt Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
MyItems(Icons.shop, "Text Here", 0xff42a5f5),
],
staggeredTiles: [
StaggeredTile.extent(2, 150.0),
StaggeredTile.extent(1, 150.0),
StaggeredTile.extent(1, 150.0),
StaggeredTile.extent(2, 150.0),
StaggeredTile.extent(1, 150.0),
StaggeredTile.extent(1, 150.0),
StaggeredTile.extent(2, 150.0),
],
),
), //材质
我们为每个“MyItems”创建了一个方法和参数:
Material MyItems(IconData icon, String heading, int color) {
return Material(color: Colors.white,
elevation: 12.0,
shadowColor: Color(0xff2962ff),
borderRadius: BorderRadius.circular(20.0),
child: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: < Widget > [
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: < Widget > [
//Text here
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(heading,
style: TextStyle(
color: new Color(color),
fontSize: 20.0,
),
),
), //text
//icon
Material(
color: new Color(color),
borderRadius: BorderRadius.circular(24.0),
child: Padding(padding: const EdgeInsets.all(16.0),
child: Icon(
icon,
color: Colors.white,
size: 20.0,
),
),
),
],
),
]))),
);
似乎没有任何关于如何解决此问题的信息。我能从作者那里找到的唯一后续是“有几种方法可以解决它”:
-
使用小部件的 Keys 属性
TagButton(onPressed: (k) => onPress(k)), 无效的onPress(键ID){ print('按下$id'); }
2.为每个按钮分配一个调用不同方法的回调
-
或者你可以传递一个如下所示的参数,并使用开关来识别参数值并调用相应的方法。
onPressed: () => onButtonPressed('okButton'),
但经过一番挣扎,我无法理解这一点。是否甚至可以将每个交错网格单独链接到它们自己的唯一链接(页面路由、UrlLauncher 等?
【问题讨论】:
-
在无数小时试图找到答案之后,唯一接近分别链接网格的方法是在每个网格项目上方添加点击事件,但是当我这样做时,这些网格消失了。我想没有解决办法
标签: flutter dart gesturedetector staggered-gridview flutter-onpressed