共计 1053 个字符,预计需要花费 3 分钟才能阅读完成。
Flutter routerlib/routes.dart
import ‘package:flutter/material.dart’;
import ‘package:flutter_sky/screens/home/index.dart’;
import ‘package:flutter_sky/screens/profile/index.dart’;
class Routes{
static final home = new Home();
static final profile = new Profile();
final routes = {
‘/’: (context) => home,
‘/home’: (context) => home,
‘/profile’: (context) => profile
};
Routes(){
runApp(new MaterialApp(
title: ‘flutter sky’,
// initialRoute: ‘/’,
// home: profile,
routes: routes,
));
}
}
上面是一个简单的路由配置代码,假设现在的 APP 有 2 个页面:home, profile。我们拿这个例子来讲一下 flutter 的 routes 配置一些注意的点:首先可以看到注掉的那 2 行代码,分别是 MaterialApp 的两个属性:initialRoute 和 home。
// 声明:以下讨论都是基于不考虑 onGenerateRoute 和 onUnknownRoute 的存在
initialRoute 是启动 APP 的初始页面,也就是用户看到的第一个页面。如果这个属性没有给值,那么会去寻找路由表里面的 ’/’,或者 MaterialApp 的 home 属性。
‘/’ 和 MaterialApp 的 home 属性路由表(也就是我们上面代码里面定义的 routes 变量)里面的 ’/’ 和 MaterialApp 的 home 属性,二者不能同时存在,但是必须有一个存在。
当 initialRoute 没有设置或者 MaterialApp 的 home 属性都是定义了主页面,当 initialRoute 没有定义的时候,用户看到的就是 ’/’ 或者 MaterialApp 的 home 多对应的页面
当 initialRoute 设置了当 initialRoute 和 ’/’ 或者 MaterialApp 的 home 属性同时存在的时候,initialRoute 的优先级高于二者。意思就是如果 initialRoute 定义的页面和 ’/’ 或者 MaterialApp 的 home 设置的页面不同时,用户看到的是 initialRoute 定义的页面。