【问题标题】:Flutter: The getter isn't defined for the typeFlutter:没有为该类型定义 getter
【发布时间】:2020-09-02 00:57:30
【问题描述】:

我卡在页面路由上。

这是来自 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'.

onGenerateRoutenavigatorKey 的类似错误。

【问题讨论】:

  • initialRoute: Routes.homeScreenRoute
  • @pskink onGenerateRoute 和 navigatorKey 怎么样?有没有关于自动路由之类的详细文档?
  • 你试过Routes.homeScreenRoute而不是Router.homeScreenRoute吗?
  • @pskink 错误在我将其更改为 Routes.homeScreenRoute 时消失了,但不确定这是使用自动路由的正确方法。
  • 如果您正在使用该软件包,请先阅读this

标签: flutter dart


【解决方案1】:

在较新版本的颤振中,它有一个已经命名为“Router”的类,所以你只需为你的类“Routes”指定一个不同的名称。

然后使用 Routes.homeScreenRoute 访问您的 main.dart 文件。

【讨论】:

  • 感谢您的回答。如果您提供一些示例代码会更好。
【解决方案2】:

这是真的,

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

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

【讨论】:

    【解决方案3】:

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

    这是我在 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), - 这个 Search 值基本上来自 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,
    );
    

    【讨论】:

      猜你喜欢
      • 2021-10-19
      • 2021-05-21
      • 2021-08-27
      • 2021-05-18
      • 1970-01-01
      • 2021-11-22
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多