Flutter:未为该类型定义吸气剂

时间:2020-05-16 05:03:29

标签: flutter dart

我被页面路由困住了。

这是main.dart中的代码

import 'package: test/routes/router.gr.dart';
import 'package:flutter/material.dart';
import 'package:test/splash_screen.dart';
import 'package:test/home_screen.dart';

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          debugShowCheckedModeBanner: false,
          initialRoute: Router.homeScreenRoute,
          onGenerateRoute: Router.onGenerateRoute,
          navigatorKey: Router.navigatorKey,

        );
      }
    }

这是从自动路由器生成的router.gr.dart文件。

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:auto_route/auto_route.dart';
import 'package:test/home_screen.dart';
import 'package:test/viewownprofile.dart';
import 'package:test/view_other_profile.dart';

abstract class Routes {
  static const homeScreenRoute = '/';
  static const viewownProfile = '/viewown-profile';
  static const viewotherProfile = '/viewother-profile';
  static const all = {
    homeScreenRoute,
    viewownProfile,
    viewotherProfile,
  };
}

class Router extends RouterBase {
  @override
  Set<String> get allRoutes => Routes.all;

  @Deprecated('call ExtendedNavigator.ofRouter<Router>() directly')
  static ExtendedNavigatorState get navigator =>
      ExtendedNavigator.ofRouter<Router>();

  @override
  Route<dynamic> onGenerateRoute(RouteSettings settings) {
    switch (settings.name) {
      case Routes.homeScreenRoute:
        return MaterialPageRoute<dynamic>(
          builder: (context) => HomeScreen(),
          settings: settings,
        );
      case Routes.viewownProfile:
        return MaterialPageRoute<dynamic>(
          builder: (context) => ViewOwnProfile(),
          settings: settings,
        );
      case Routes.viewotherProfile:
        return MaterialPageRoute<dynamic>(
          builder: (context) => ViewOtherProfile(),
          settings: settings,
        );
      default:
        return unknownRoutePage(settings.name);
    }
  }
}

这是Homescreen.dart的代码。

import 'package:flutter/material.dart';

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar (title: Text('Home')),
        body: Center(
          child: Card(
            color: Colors.grey[300],
            elevation: 10.0,
            child: Container(
                height: 100.0,
                width: 100.0,
                alignment: Alignment.center,
                child: Text(
                  'Welcome Home!',
                  textAlign: TextAlign.center,
                  style: TextStyle(
                    fontSize: 20.0
                  ),
                )
            ),
          ),
        )
    );
  }
}

main.dart文件出现错误。下面是错误。

The getter 'homeScreenRoute' isn't defined for the type 'Router'.
Try importing the library that defines 'homeScreenRoute', correcting the name to the name of an existing getter, or defining a getter or field named 'homeScreenRoute'.

onGenerateRoute navigatorKey 的类似错误。

3 个答案:

答案 0 :(得分:1)

在较新版本的flutter中,它具有一个已经命名为“ Router”的类,因此只有您必须为您的“ Routes”类赋予一个不同的名称。

,然后将Routes.homeScreenRoute用户访问到main.dart文件。

答案 1 :(得分:1)

这是真的,

在较新版本的 flutter 中,它有一个名为“Router”的类,因此您只需在 router.gr.dart 文件中为类“Router”指定一个不同的名称。

您可以将类名从“Router”更改为=>“RouterAuto”

答案 2 :(得分:1)

正如你所看到的答案,我仍然想给出一些详细的代码。

这是我在 Flutter 2 之前的工作代码。因为我还没有迁移到 Flutter 2。

剩下的所有代码都是一样的,只是这个文件需要一些修改。

Router.dart

import 'package:apppath/search.dart';
import 'package:apppath/settings.dart';
import 'package:apppath/login.dart';

@MaterialAutoRouter(
  routes: [
    // initial route is named "/"
    MaterialRoute(page: AnimatedSplashScreen, initial: true),
    MaterialRoute(page: Search),
    MaterialRoute(page: Settings),
    MaterialRoute(page: Login),

  ],
)
class $Router {}

MaterialRoute(page: Settings), - 这个搜索值基本上来自 dart 文件。 我的 StatefulWidget 名称是 Settings,同样需要添加 MaterialRoute(page: Settings), 例如

class Settings extends StatefulWidget {
  @override
  _SettingsState createState() => _SettingsState();
}

class _SettingsState extends State<Settings> {
other codes

如何使用。

ExtendedNavigator.of(context).push(
    Routes.settings,
);