Как я могу добавить навигацию в GridView из класса InkWell

#flutter #flutter-layout

Вопрос:

Я создал виджет GridView и добавил простую навигацию к виджету чернильницы. Я хочу переходить на каждую другую страницу при нажатии на разные элементы сетки, но я создал свой вид сетки следующим образом :

  Widget _buildGrid(BuildContext context) => GridView.extent(
      maxCrossAxisExtent: 150,
      padding: const EdgeInsets.all(4),
      mainAxisSpacing: 4,
      crossAxisSpacing: 4,
      children: _buildGridTileList(30, context));

  List<Widget> _buildGridTileList(int count, BuildContext context) =>
      List.generate(
        count,
        (i) => InkWell(
          onTap: () => Navigator.of(context).push(
            MaterialPageRoute(
              builder: (context) =>
                  ParaScreen(), //you can pass the index (i) in the constructor of YourWidget(i) something like this if needed
            ),
          ),
          child: Container(
            decoration: BoxDecoration(border: Border.all(color: Colors.black)),
            child: Image.asset('images/pic$i.jpg'),
          ),
        ),
      );
}
 

Итак, как вы можете видеть , сетки создаются List.generate следующим образом: Примечание: я пытался передать индекс, но это не слишком хорошо получается.

Спасибо

Ответ №1:

Вы можете добавить функцию, которая возвращает другую страницу, когда она имеет другой индекс, функция может выглядеть следующим образом:

     Widget _pageByIndex(int index){
      switch(index){
      case 0:{
       return Page1(); // page that should be navigated to when chose the GridTile number 1 
   
} 
      case 1: {
      return Page2();
    }
    //you can add as much cases as you want
    }
    } 
 

А затем добавьте его в свой обратный вызов onTap следующим образом:

 onTap: () => Navigator.of(context).push(
            MaterialPageRoute(
              builder: (context) =>
                 _pageByIndex(index),
            ),
          ),