Возвращаемый тип » Установить» не является «Виджетом». Навигация по флаттеру

#flutter

Вопрос:

В home.dart я вызываю функцию навигации внутри кнопки с повышенным уровнем

  onPressed: (){
  Navigator.of(context).push(
     MaterialPageRoute(
          builder: (context)=>{
                return const 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,);
  }
}
 

Однако я получаю красные волнистые линии под функцией навигации, говорящие

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

Почему это дает мне ошибку и как это исправить?

Ответ №1:

Я думаю, что вы путаете с машинописным текстом, синтаксиса метода нет () => {...} , это вернет Set ...

Сделайте это вместо () {...} этого (работает ... ):

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

Или это () => ... (возвращает ... ):

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

Ответ №2:

Что ж, ты возвращаешь Set<Widget>

Проблема в том , как вы используете оператор со стрелкой => , вы не можете использовать {} и return ключевое слово с оператором со стрелкой.

=> Оператор уже работает как return А. И в вашем случае {} это интерпретируется как литерал набора.

Попробуйте это вместо этого:

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

Или это:

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

Комментарии:

1. А, понял! Спасибо