11. Flutter——Navigator 路由(页面跳转)

6 篇文章 0 订阅
2 篇文章 0 订阅

1. Flutter 中的路由

  • 在 Flutter 中通过 Navigator 组件管理路由导航。 并提供了管理堆栈的方法。如:Navigator.push 和 Navigator.pop
  • Flutter 中给我们提供了两种配置路由跳转的方式:1、基本路由 2、命名路由

2. Flutter 中的基本路由使用

  • 比如我们现在想从 HomePage 组件跳转到 SearchPage 组件。
  • 1、需要在 HomePage 中引入 SearchPage.dart:
import'../SearchPage.dart';
  • 2、在 HomePage 中通过下面方法跳转:
RaisedButton(
	child:Text("跳转页面"), 
	onPressed:(){ 
		Navigator.of(context).push( 
			MaterialPageRoute( 
				builder:(BuildContextcontext){ 
					returnSearchPage(); 
				} 
			) 
		);
	}, 
	color:Theme.of(context).accentColor, 
	textTheme:ButtonTextTheme.primary
)


3. Flutter 中的基本路由跳转传值

  • 比如我们现在想从 HomePage 组件跳转到 SearchPage 组件传值。
  • 1、需要在 HomePage 中引入 SearchPage.dart:
import'../SearchPage.dart';
  • 2、在 HomePage 中通过下面方法跳转:
RaisedButton(
	child:Text("跳转页面"), onPressed:(){ 
		Navigator.of(context).push( 
			MaterialPageRoute( 
				builder:(BuildContextcontext){ 
					returnSearchPage(title:"表单"); //传值 
				} 
			) 
		);
	}, 
	color:Theme.of(context).accentColor,
	textTheme:ButtonTextTheme.primary
)

4. Flutter 中的命名路由

  • 1、配置路由:
import'package:flutter/material.dart';
import'pages/Tabs.dart';
import'pages/Search.dart'; 
import'pages/Form.dart';
voidmain()=>runApp(MyApp()); 
classMyAppextendsStatelessWidget{ 
	@override 
	Widgetbuild(BuildContextcontext){ 
		returnMaterialApp( 
		//home:Tabs(), 
		initialRoute:'/', 
		routes:{ 
			'/':(contxt)=>Tabs(), 
			'/search':(contxt)=>SearchPage(), 
			'/form':(context)=>FormPage(), 
			}, 
		); 
	} 
}
  • 2、路由跳转:
RaisedButton(
	child:Text("跳转页面"), 
	onPressed:(){ 
		Navigator.pushNamed(context,'/search');
		}, 
		color:Theme.of(context).accentColor,
		textTheme:ButtonTextTheme.primary
)

5. Flutter 中的命名路由跳转传值

  • 1、配置路由:
import'package:flutter/material.dart'; 
import'pages/Tabs.dart'; 
import'pages/Search.dart'; 
import'pages/Form.dart';
voidmain()=>runApp(MyApp());
classMyAppextendsStatelessWidget{ 
	finalroutes={ 
		'/':(contxt)=>Tabs(), 
		'/search':(contxt)=>SearchPage(), 
		'/form':(context,{arguments})=>FormPage(arguments:arguments), 
	};
	@override 
	Widgetbuild(BuildContextcontext){ 
		returnMaterialApp( 
			home:Tabs(), 
			onGenerateRoute:(RouteSettingssettings){ 
				finalStringname=settings.name;
				finalFunctionpageContentBuilder=this.routes[name];
				if(pageContentBuilder!=null){ 
					if(settings.arguments!=null){
						finalRouteroute=MaterialPageRoute( 
							builder:(context)=>pageContentBuilder(context,
								arguments:settings.arguments)); 
							returnroute;
					 }else{ 
					 	finalRouteroute=MaterialPageRoute( 
					 		builder:(context)=>pageContentBuilder(context));
					 		returnroute; 
					 } 
				} 
			}); 
	} 
}
  • 2、跳转传值:
RaisedButton( 
	child:Text("跳转到表单演示页面"), 
		onPressed:(){ 
			Navigator.pushNamed(context,'/form',arguments:{ 
				"id":20 
			}); 
		}, 
		color:Theme.of(context).accentColor,
		textTheme:ButtonTextTheme.primary
)
  • 3、接收参数:
import'package:flutter/material.dart';
classFormPageextendsStatelessWidget{ 
	finalMaparguments; 
	FormPage({this.arguments});
	@override 
	Widgetbuild(BuildContextcontext){ 
		returnScaffold( 
			appBar:AppBar( 
				title:Text("搜索"), 
			), 
		body:Text("我是一个表单页面 ${arguments!=null?arguments['id']:'0'}")
		);
	}
}

6. Flutter 中的命名路单独抽离到一 个文件

import'package:flutter/material.dart'; 
import'../pages/Tabs.dart'; 
import'../pages/Search.dart'; 
import'../pages/Form.dart';
finalMap<String,Function>routes={ 
	'/':(contxt,{arguments})=>Tabs(), 
	'/search':(contxt,{arguments})=>SearchPage(arguments:arguments),
	'/form':(context,{arguments})=>FormPage(arguments:arguments), 
};
varonGenerateRoute=(RouteSettingssettings){ 
	// 统一处理 
	finalStringname=settings.name;
	finalFunctionpageContentBuilder=routes[name];
	if(pageContentBuilder!=null){ 
		finalRouteroute=MaterialPageRoute( 
			builder:(context)=>
				pageContentBuilder(context,arguments:settings.arguments));
			returnroute; 
		}
};
import'package:flutter/material.dart'; 
import'routes/Routes.dart'; 
voidmain()=>runApp(MyApp());

classMyAppextendsStatelessWidget{ 
	@override
	Widgetbuild(BuildContextcontext){ 
		returnMaterialApp( 
			initialRoute:'/', 
			onGenerateRoute:onGenerateRoute 
		); 
	} 
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值