Home > other >  The return type 'Set<GameScreen>' isn't a 'Widget'. Flutter Navigatio
The return type 'Set<GameScreen>' isn't a 'Widget'. Flutter Navigatio

Time:10-30

In home.dart I call a navigation function inside an Elevated Button

 onPressed: (){
  Navigator.of(context).push(
     MaterialPageRoute(
          builder: (context)=>{
                return const GameScreen();
          }
  ));
 },

Which will navigate to GameScreen.

game_screen.dart

import 'package:flutter/material.dart';

class GameScreen extends StatelessWidget {
  const GameScreen({ Key? key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const Scaffold(backgroundColor: Colors.white,);
  }
}

However I get the red squiggly lines under the navigation function saying

The return type "Set<GameScreen>" isn't a "Widget", as required by the closure's context.

Why is this giving me an error and how do I fix this?

CodePudding user response:

Well you're returning a Set<Widget>

The problem is how you're using the arrow operator =>, you cannot use {} and the return keyword with the arrow operator.

The => operator already works like a return. And in your case the {} is being interpreted like a Set literal.

Try this instead:

MaterialPageRoute(
  builder: (context) => const GameScreen();
));

Or this:

MaterialPageRoute(
  builder: (context) {
   return const GameScreen();
  }
));

CodePudding user response:

I think you are confused with typescript, the method syntax is not () => {...}, this would return a Set of ...

Do this instead () {...} (runs ...):

onPressed: () {
  Navigator.of(context).push(
    MaterialPageRoute(
      builder: (context) {
        return const GameScreen();
      }
 ));
},

Rr this () => ... (returns ...):

onPressed: () {
  Navigator.of(context).push(
    MaterialPageRoute(
      builder: (context) => const GameScreen(),
  ));
},
  • Related