Следуя руководству по 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)), void onPress (Key id) {print ('нажатый $ id'); }
2. Назначьте обратный вызов, который вызывает разные методы для каждой кнопки.
Или вы можете передать параметр, как показано ниже, и использовать переключатель для определения значения параметра и вызова соответствующего метода.
onPressed: () => onButtonPressed ('okButton'),
Но после долгой борьбы я просто не могу этого понять. Можно ли хотя бы по отдельности связать каждую смещенную сетку с их собственной уникальной ссылкой (маршрут страницы, UrlLauncher и т. Д.?)