在Flutter中,MaterialPageRoute
是一种常用的路由类型,用于在应用的不同页面之间进行导航。Route
是一个抽象类,定义了路由的基本行为。MaterialPageRoute
继承自 PageRouteBuilder
,而 PageRouteBuilder
又实现了 Route
接口。
当你遇到“类型 'MaterialPageRoute<dynamic>' 不是类型 'Route<String>' 的子类型”这个错误时,通常是因为你在使用 Navigator.push
或 Navigator.of(context).push
方法时,传递了一个不兼容的路由类型。
material.dart
包中的 MaterialPageRoute
。material.dart
包中的 MaterialPageRoute
。Navigator.push
或 Navigator.of(context).push
时,传递的是 MaterialPageRoute
类型。Navigator.push
或 Navigator.of(context).push
时,传递的是 MaterialPageRoute
类型。Route<String>
类型的变量,你可以这样使用:Route<String>
类型的变量,你可以这样使用:以下是一个完整的示例,展示了如何在 Flutter 中使用 MaterialPageRoute
进行导航:
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home Screen'),
),
body: Center(
child: ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(builder: (context) => SecondScreen()),
);
},
child: Text('Go to Second Screen'),
),
),
);
}
}
class SecondScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Second Screen'),
),
body: Center(
child: Text('Welcome to the Second Screen!'),
),
);
}
}
通过以上步骤,你应该能够解决“类型 'MaterialPageRoute<dynamic>' 不是类型 'Route<String>' 的子类型”这个问题。
领取专属 10元无门槛券
手把手带您无忧上云