我被页面路由困住了。
这是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 的类似错误。
答案 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,
);