Flutter:未为该类型定义 getter

Iro*_*nic 5 dart flutter

我被困在页面路由上。

这是 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,

        );
      }
    }
Run Code Online (Sandbox Code Playgroud)

这是从自动路由器生成的 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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这是 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
                  ),
                )
            ),
          ),
        )
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我在 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'.
Run Code Online (Sandbox Code Playgroud)

onGenerateRoutenavigatorKey 也有类似的错误。

Bri*_*hod 5

在较新版本的 flutter 中,它已经有一个名为“Router”的类,因此您只需为“Routes”类指定一个不同的名称即可。

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

  • 感谢你的回答。如果能给出一些示例代码就更好了。 (2认同)