我怎样才能使每个网格平铺都可以点击,从而在Flutter中进入新的页面

我怎样才能使每个网格平铺都可以点击,从而在Flutter中进入新的页面,flutter,gridview,onclick,Flutter,Gridview,Onclick,我需要以下代码的帮助。。。我已经创建了一个特定数量的瓷砖网格。。。我想能够在每个瓷砖上单独点击,并在点击后打开一个新的页面。我如何在android studio中做到这一点 class GridOne extends StatefulWidget { @override _GridOneState createState() => new _GridOneState(); } class _GridOneState extends State<GridOne> {

我需要以下代码的帮助。。。我已经创建了一个特定数量的瓷砖网格。。。我想能够在每个瓷砖上单独点击,并在点击后打开一个新的页面。我如何在android studio中做到这一点

class GridOne extends StatefulWidget {

  @override
  _GridOneState createState() => new _GridOneState();
}

class _GridOneState extends State<GridOne> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: GridView.count(
        crossAxisCount: 6,
        children: List.generate(
          947,
          (index) {
            return Card(
              elevation: 10.0,
              color: Color(0xFF184946),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(20.0),
              ),
              child: Padding(
                padding: const EdgeInsets.all(8.0),
                child: Container(
                  color: Color(0xFF184946),
                  child: Center(
                    child: Text(
                      '$index',
                      style: TextStyle(fontSize: 18, color: Color(0xFFFCF8F8)),
                    ),
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
class GridOne扩展StatefulWidget{
@凌驾
_GridOneState createState()=>new_GridOneState();
}
类GridOneState扩展了状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
正文:GridView.count(
交叉轴计数:6,
子项:List.generate(
947,
(索引){
回程卡(
标高:10.0,
颜色:颜色(0xFF184946),
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0),
),
孩子:填充(
填充:常数边集全部(8.0),
子:容器(
颜色:颜色(0xFF184946),
儿童:中心(
子:文本(
“$index”,
样式:TextStyle(fontSize:18,颜色:color(0xFFFCF8F8)),
),
),
),
),
);
},
),
),
);
}
导入“包装:颤振/材料.飞镖”;
类GridOne扩展了StatefulWidget{
@凌驾
_GridOneState createState()=>new_GridOneState();
}
类GridOneState扩展了状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
正文:GridView.count(
交叉轴计数:6,
子项:List.generate(
947,
(索引){
返回原材料按钮(
已按下:(){
///导航码会在这里出现
},
孩子:卡片(
标高:10.0,
颜色:颜色(0xFF184946),
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0),
),
孩子:填充(
填充:常数边集全部(8.0),
子:容器(
颜色:颜色(0xFF184946),
儿童:中心(
子:文本(
“$index”,
样式:TextStyle(fontSize:18,颜色:color(0xFFFCF8F8)),
),
),
),
),
),
);
},
),
),
);
}

我们可以将
小部件
包装在
手势检测器
中,以使用
onTap()
方法:

return GestureDetector(
   onTap: () {
     // let's use the magic of Navigator to navigate to another screen
     Navigator.push(
       context,
       MaterialPageRoute(builder: (context) => SecondScreen()), // second screen widget
     );
   },
   child: Card(
     elevation: 10.0,
     color: Color(0xFF184946),
     shape: RoundedRectangleBorder(
       borderRadius: BorderRadius.circular(20.0),
     ),
     child: Padding(
       padding: const EdgeInsets.all(8.0),
       child: Container(
         color: Color(0xFF184946),
         child: Center(
           child: Text(
             '$index',
             style: TextStyle(fontSize: 18, color: Color(0xFFFCF8F8)),
           ),
         ),
       ),
     ),
   ),
);
我们的完整片段将是:

class GridOne extends StatefulWidget {

  @override
  _GridOneState createState() => new _GridOneState();
}

class _GridOneState extends State<GridOne> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: GridView.count(
        crossAxisCount: 6,
        children: List.generate(
          947,
          (index) {
            return GestureDetector(
               onTap: () {
                 // let's use the magic of Navigator to navigate to another screen
                 Navigator.push(
                   context,
                   MaterialPageRoute(builder: (context) => SecondScreen()), // second screen widget
                 );
               },
               child: Card(
                 elevation: 10.0,
                 color: Color(0xFF184946),
                 shape: RoundedRectangleBorder(
                   borderRadius: BorderRadius.circular(20.0),
                 ),
                 child: Padding(
                   padding: const EdgeInsets.all(8.0),
                   child: Container(
                     color: Color(0xFF184946),
                     child: Center(
                       child: Text(
                         '$index',
                         style: TextStyle(fontSize: 18, color: Color(0xFFFCF8F8)),
                       ),
                     ),
                   ),
                 ),
               ),
            );
          },
        ),
      ),
    );
  }
class GridOne扩展StatefulWidget{
@凌驾
_GridOneState createState()=>new_GridOneState();
}
类GridOneState扩展了状态{
@凌驾
小部件构建(构建上下文){
归还新脚手架(
正文:GridView.count(
交叉轴计数:6,
子项:List.generate(
947,
(索引){
返回手势检测器(
onTap:(){
//让我们使用Navigator的魔力导航到另一个屏幕
导航器。推(
上下文
MaterialPage路由(生成器:(上下文)=>SecondScreen(),//SecondScreen小部件
);
},
孩子:卡片(
标高:10.0,
颜色:颜色(0xFF184946),
形状:圆形矩形边框(
边界半径:边界半径。圆形(20.0),
),
孩子:填充(
填充:常数边集全部(8.0),
子:容器(
颜色:颜色(0xFF184946),
儿童:中心(
子:文本(
“$index”,
样式:TextStyle(fontSize:18,颜色:color(0xFFFCF8F8)),
),
),
),
),
),
);
},
),
),
);
}

感谢您的回复,但我想将每个网格磁贴上的lib文件夹中有947个页面…您提供的示例有没有办法做到这一点?请注意,这是我与flifter的第一个项目,我仍在学习您是否通过api获取页面名称?如何获取此页面上的名称?我所做的是在android的lib文件夹中创建947个页面。每个页面显示一首歌曲的歌词…总共有947个歌词。我的目标是将页面链接到gridview上的每个索引块,正如上面的代码所示…我直接从android studio创建了这些页面-我不使用api或其他服务器,因为我希望它可以被脱机访问ine for usershow是否希望代码决定哪个网格属于哪个页面?如果歌词页面的布局相同,则只创建一个页面并将歌词保存在db中。使用API服务调用它们。使所有内容都动态化。这将很容易扩展应用程序的范围。
class GridOne extends StatefulWidget {

  @override
  _GridOneState createState() => new _GridOneState();
}

class _GridOneState extends State<GridOne> {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: GridView.count(
        crossAxisCount: 6,
        children: List.generate(
          947,
          (index) {
            return GestureDetector(
               onTap: () {
                 // let's use the magic of Navigator to navigate to another screen
                 Navigator.push(
                   context,
                   MaterialPageRoute(builder: (context) => SecondScreen()), // second screen widget
                 );
               },
               child: Card(
                 elevation: 10.0,
                 color: Color(0xFF184946),
                 shape: RoundedRectangleBorder(
                   borderRadius: BorderRadius.circular(20.0),
                 ),
                 child: Padding(
                   padding: const EdgeInsets.all(8.0),
                   child: Container(
                     color: Color(0xFF184946),
                     child: Center(
                       child: Text(
                         '$index',
                         style: TextStyle(fontSize: 18, color: Color(0xFFFCF8F8)),
                       ),
                     ),
                   ),
                 ),
               ),
            );
          },
        ),
      ),
    );
  }