路由跳转
Navigator.of(context).push(MaterialPageRoute(builder: (BuildContext context) {
return const SearchPage();
}))
页面跳转携带参数 父组件NewsPage(title:"参数")
import 'package:flutter/material.dart';
class NewsPage extends StatefulWidget {
final String title;
const NewsPage({super.key,this.title="新闻"});
@override
State<NewsPage> createState() => _NewsPageState();
}
class _NewsPageState extends State<NewsPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: const Center(child: Text("新闻页面")),
);
}
}
返回上一页
Navigator.pop(context);
先在main文件配置路由信息,然后使用 Navigator.pushNamed(context, "/news")进行跳转。
initialRoute: "/",
routes: {
"/": (context) => const Tabs(),
"/form": (context) => const FormPage(),
"/search": (context) => const SearchPage(),
"/news": (context) => const NewsPage(),
},
命名路由携带参数
可以先进行抽离成routers.dart 里面包括定义路由,再用函数来接收第二步,
onGenerateRoute = onGenerateRoute(RouteSettings settings)...
Map routes = {
"/": (context) => const Tabs(),
"/form": (context, {arguments}) => FormPage(
arguments: arguments,
),
"/search": (context) => const SearchPage(),
"/news": (context) => const NewsPage(),
};
2、路由每次跳转都会触发的函数onGenerateRoute()
onGenerateRoute: (RouteSettings settings) {
final String? name = settings.name;
final Function? pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = MaterialPageRoute(
builder: (context) => pageContentBuilder(context,
arguments: settings.arguments));
return route;
} else {
final Route route = MaterialPageRoute(
builder: (context) => pageContentBuilder(context));
return route;
}
}
return null;
},
3、路由跳转
Navigator.pushNamed(context, "/shop",
arguments: {"title": "命名路由传值", "aid": "20"});
4、返回上一级
Navigator.of(context).pop();
Navigator.of(context).pushReplacementNamed("/registerthird");
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(builder: (BuildContext context) {
return const Tabs();
}), (route) => false);
在路由文件引入
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
CupertinoPageRoute
MaterialPageRoute
var onGenerateRoute = (RouteSettings settings) {
final String? name = settings.name;
final Function? pageContentBuilder = routes[name];
if (pageContentBuilder != null) {
if (settings.arguments != null) {
final Route route = CupertinoPageRoute(
builder: (context) =>
pageContentBuilder(context, arguments: settings.arguments));
return route;
} else {
final Route route =
CupertinoPageRoute(builder: (context) => pageContentBuilder(context));
return route;
}
}
return null;
};