onTap не перенаправляет на новую страницу - PullRequest
0 голосов
/ 30 апреля 2020
New to flutter, soft of.  I am having trouble with the onTap of the Search customlisttile to go to another page.  I think the onTapis not being called for some reason.

> class HomeScreen extends StatelessWidget {
> 
>   @override   Widget build(BuildContext context) {
>     return Scaffold(
>       appBar: AppBar(
>         title: Text('Stuff'),
>         backgroundColor: Colors.blue,
>       ),
>       drawer: Drawer(
>         child: ListView(
>           children: <Widget>[
>             DrawerHeader(
>               decoration: BoxDecoration(
>                 gradient: LinearGradient(colors: <Color>[
>                   Colors.red[300],
>                   Colors.red[100],
>                 ])
>               ),
>               child: Container(
>                 child: Column(
>                   children: <Widget>[
>                     Material(
>                       borderRadius: BorderRadius.all(Radius.circular(40.0)),
>                       child: Image.asset('images/Canada_flag.png', width: 100,height: 100,),
>                       ),
>                       Text('Flag', style: TextStyle(color: Colors.white, fontSize: 20.0),)
>                   ],
>                 ),
>                 )),
>             Column(
>               children: <Widget>[
>                 CustomListTile(Icons.search,'Search',()=>{}, 
>                   onTap: (){
>                     Navigator.push(context, MaterialPageRoute(builder: (context)=>SearchPage()));
>                   }),
>               ],
>             ),
>             CustomListTile(Icons.fastfood,'Products',()=>{}),
>             CustomListTile(Icons.add,'Add Products',()=>{}),
>             CustomListTile(Icons.person,'About Us',()=>{}),
>             CustomListTile(Icons.vpn_lock,'Privacy',()=>{}),
>           ],
>         ),)
>     );   } }
> 
> class CustomListTile extends StatelessWidget{
> 
>   IconData icon;   String text;   Function onTap;
> 
>   CustomListTile(this.icon, this.text, this.onTap,);
> 
>   @override   Widget build(BuildContext context) {
>     return Padding(
>       padding: const EdgeInsets.fromLTRB(8.0, 0, 8.0, 0),
>       child: Container(
>         decoration: BoxDecoration(
>           border: Border(bottom: BorderSide(color: Colors.grey.shade400))
>         ),
>         child: InkWell(
>           splashColor: Colors.orangeAccent,
>           onTap: onTap,
>           child: Container(
>             height: 50,
>             child: Row(
>               mainAxisAlignment: MainAxisAlignment.spaceBetween,
>               children: <Widget>[
>                 Row(
>                   children: <Widget>[
>                     Icon(icon),
>                     Padding(
>                       padding: const EdgeInsets.all(8.0),
>                       child: Text(text, style: TextStyle(
>                         fontSize: 16.0
>                       ),
>                       ),
>                     ),
>                   ],
>                 ),
>                 
>                 Icon(Icons.arrow_right)
>               ],
>             ),
>           ),
>         ),
>       ),
>     );   } }

1 Ответ

1 голос
/ 30 апреля 2020

onTap: в class CustomListTile(){} конструктор не является именованным параметром; и избегайте передачи пустых функций стрелок (например, () => {} означает () { return {}; }). Вместо этого вы можете написать как (){}.

Попробуйте это:

class HomeScreen extends StatelessWidget {

   @override   Widget build(BuildContext context) {
     return Scaffold(
       appBar: AppBar(
         title: Text('Stuff'),
         backgroundColor: Colors.blue,
       ),
       drawer: Drawer(
         child: ListView(
           children: <Widget>[
             DrawerHeader(
               decoration: BoxDecoration(
                 gradient: LinearGradient(colors: <Color>[
                   Colors.red[300],
                   Colors.red[100],
                 ])
               ),
               child: Container(
                 child: Column(
                   children: <Widget>[
                     Material(
                       borderRadius: BorderRadius.all(Radius.circular(40.0)),
                       child: Image.asset('images/Canada_flag.png', width: 100,height: 100,),
                       ),
                       Text('Flag', style: TextStyle(color: Colors.white, fontSize: 20.0),)
                   ],
                 ),
                 )),
             Column(
               children: <Widget>[
                 CustomListTile(Icons.search,'Search', (){
                   Navigator.push(context, MaterialPageRoute(builder: (context) => SearchPage()));
                 }),
               ],
             ),
             CustomListTile(Icons.fastfood,'Products',(){}),
             CustomListTile(Icons.add,'Add Products',(){}),
             CustomListTile(Icons.person,'About Us',(){}),
             CustomListTile(Icons.vpn_lock,'Privacy',(){}),
           ],
         ),)
     );   } }

class CustomListTile extends StatelessWidget{

   IconData icon;   String text;   Function onTap;

   CustomListTile(this.icon, this.text, this.onTap,);

   @override   Widget build(BuildContext context) {
     return Padding(
       padding: const EdgeInsets.fromLTRB(8.0, 0, 8.0, 0),
       child: Container(
         decoration: BoxDecoration(
           border: Border(bottom: BorderSide(color: Colors.grey.shade400))
         ),
         child: InkWell(
           splashColor: Colors.orangeAccent,
           onTap: onTap,
           child: Container(
             height: 50,
             child: Row(
               mainAxisAlignment: MainAxisAlignment.spaceBetween,
               children: <Widget>[
                 Row(
                   children: <Widget>[
                     Icon(icon),
                     Padding(
                       padding: const EdgeInsets.all(8.0),
                       child: Text(text, style: TextStyle(
                         fontSize: 16.0
                       ),
                       ),
                     ),
                   ],
                 ),

                 Icon(Icons.arrow_right)
               ],
             ),
           ),
         ),
       ),
     );   } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...