Ошибка при назначении маршрутов Flutter с использованием обозначения {} - PullRequest
0 голосов
/ 06 мая 2020

Я использую The Complete 2020 Flutter Development Bootcamp с Dart, и этот код взят прямо из видео:

import 'package:flutter/material.dart';
import 'screen0.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/', (context) => Screen0(),
      },
    );
  }
}

Код не компилируется с ошибкой The argument type 'Set<Object>' can't be assigned to the parameter type 'Map<String, Widget Function(BuildContext)>'.

Если я приведу объект маршрутов, то получится

import 'package:flutter/material.dart';
import 'screen0.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/', (context) => Screen0(),
      } as Map<String, WidgetBuilder>,
    );
  }
}

Код компилируется, но вылетает при запуске с ошибкой type '_CompactLinkedHashSet<Object>' is not a subtype of type 'Map<String, (BuildContext) => in type cast

Видео должно быть достаточно актуальным -date, это похоже на недавнее изменение. Может ли кто-нибудь сказать мне, что я делаю не так, или как я должен к этому подойти?

Версия:

Flutter 1.12.13+hotfix.9 • channel stable • https://github.com/flutter/flutter.git
Framework • revision f139b11009 (5 weeks ago) • 2020-03-30 13:57:30 -0700
Engine • revision af51afceb8
Tools • Dart 2.7.2

Ответы [ 2 ]

2 голосов
/ 06 мая 2020

Проблема с вашего route. Вы использовали запятую , вместо двоеточия :

Здесь

'/', (context) => Screen0() //The comma should be a colon.

Замените запятую на двоеточие вот так ...

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/': (context) => Screen0()
      } as Map<String, WidgetBuilder>,
    );
  }
}
1 голос
/ 06 мая 2020

Вы получаете сообщение об ошибке, потому что не добавили точку с запятой. Проверьте код ниже: он работает отлично.

Замените его своим кодом:

import 'package:flutter/material.dart';
import 'screen0.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: '/',
      routes: {
        '/' : (context) => Screen0(),
      },
    );
  }
}

Вам не хватает точки с запятой. Надеюсь, это поможет

...