Docs

demo

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(),
);
}
} class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
} class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text('跳转到 screen2'),
onPressed: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (context) => Screen2(),
));
},
),
));
}
} class Screen2 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: RaisedButton(
child: Text('back'),
onPressed: () {
Navigator.of(context).pop(null);
},
),
),
);
}
}

配置 routes 跳转

import 'package:flutter/material.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Ajnauw',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
routes: <String, WidgetBuilder>{
'/a': (BuildContext context) => MyPage(title: 'page A'),
'/b': (BuildContext context) => MyPage(title: 'page B'),
'/c': (BuildContext context) => MyPage(title: 'page C'),
},
);
}
} class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key); @override
_MyHomePageState createState() => _MyHomePageState();
} class _MyHomePageState extends State<MyHomePage> {
final List<String> _pages = <String>['/a', '/b', '/c'];
String togoPage = '/b'; _handleRadioValueChange(String nv) {
setState(() {
togoPage = nv;
});
} // 返回一个小widget
Widget _generagorRadio(String pageName) {
return GestureDetector(
onTap: () {
_handleRadioValueChange(pageName);
},
child: Container(
decoration: BoxDecoration(
color: Colors.grey[200],
),
margin: EdgeInsets.only(top: 8.0),
child: Row(
children: <Widget>[
Radio(
value: pageName,
onChanged: _handleRadioValueChange,
groupValue: togoPage,
),
Text(pageName),
],
),
),
);
} @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('demo'),
),
body: ListView(
children: <Widget>[
Container(
margin: EdgeInsets.only(left: 8.0, right: 8.0),
child: Column(
children: _pages
.map((String pageName) => _generagorRadio(pageName))
.toList(),
),
),
Container(
margin: EdgeInsets.only(left: 8.0, right: 8.0, top: 8.0),
child: RaisedButton(
onPressed: () {
// 点击触发事件,页面入栈
Navigator.pushNamed(context, togoPage);
},
color: Theme.of(context).primaryColor,
child: Text('跳转新页面 $togoPage'),
),
),
],
),
);
}
} class MyPage extends StatelessWidget {
final String title; MyPage({Key key, this.title}) : super(key: key); @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
),
body: Center(
child: Text(title),
),
);
}
}

动画页面路劲转换

          Navigator.of(context).push(
PageRouteBuilder(
transitionDuration: Duration(milliseconds: 500),
pageBuilder: (context, animation, secondaryAnimation) =>
Screen2(),
transitionsBuilder:
(context, animation, secondaryAnimation, child) {
var begin = Offset(0.0, 1.0);
var end = Offset.zero;
var curve = Curves.ease; var tween = Tween(begin: begin, end: end);
var curvedAnimation = CurvedAnimation(
parent: animation,
curve: curve,
);
return SlideTransition(
position: tween.animate(curvedAnimation),
child: child,
);
},
),
);

pushReplacement

通过推送给定路线替换导航器的当前路线,然后在新路线完成动画输入后处置前一路线

Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => HomePage())
)

设置404页面

    MaterialApp(
navigatorObservers: [routeObserver],
home: HomePage(),
title: 'home',
onUnknownRoute: (RouteSettings settings) {
return MaterialPageRoute(
builder: (context) => Title(
title: '页面未找到',
color: Theme.of(context).primaryColor,
child: Scaffold(
appBar: AppBar(),
body: Center(child: Text('404')),
),
),
settings: RouteSettings(
name: 'not-found',
),
);
},
);

设置不同的进场/出场动画

Navigator.of(context).push(
PageRouteBuilder(
transitionDuration: Duration(milliseconds: 500),
pageBuilder: (context, animation, secondaryAnimation) =>
Scaffold(
backgroundColor: Colors.red,
body: Center(child: Text('page 2')),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.backspace),
onPressed: () => Navigator.of(context).pop(),
),
),
transitionsBuilder: (
context,
Animation<double> animation,
Animation<double> secondaryAnimation,
child,
) {
return SlideTransition(
position: Tween(
// 关键点
begin: animation.status == AnimationStatus.reverse
? const Offset(-1.0, -1.0)
: const Offset(1.0, 1.0),
end: Offset.zero,
).animate(animation),
child: child,
);
}),
);

Flutter 页面入栈和出栈的更多相关文章

  1. [Xcode 实际操作]三、视图控制器-(5)使用UINavigationController视图入栈和出栈

    目录:[Swift]Xcode实际操作 本文将演示使用导航控制器的几个跳转方式 选择编辑第二个视图控制器文件 import UIKit //定义一个全局变量,用来记录当前显示区域的视图的编号 clas ...

  2. N个数依次入栈,出栈顺序有多少种?

    对于每一个数来说,必须进栈一次.出栈一次.我们把进栈设为状态‘1’,出栈设为状态‘0’.n个数的所有状态对应n个1和n个0组成的2n位二进制数.由于等待入栈的操作数按照1‥n的顺序排列.入栈的操作数b ...

  3. C++中栈的出栈,入栈规则:A,B,C,D,E

    考题: 栈底至栈顶一次存放元素 ABCD 在第五个元素E入栈之前  栈中元素可以出栈,则出栈序列可能是_____a d___________. a.  ABCED b.  DBCEA   c.  CD ...

  4. N个数依次入栈,出栈顺序有多少种

    题目:N个数依次入栈,出栈顺序有多少种? 首先介绍一下卡特兰数:卡特兰数前几项为 : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 2 ...

  5. HDU 1022 Train Problem I[给出两个长n的串,入栈和出栈顺序,判断入栈顺序是否可以匹配出栈顺序]

    Train Problem I 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 As the new term comes, the Ignatius Train Sta ...

  6. php 栈、 出栈、入栈

    最近在面试的时候被问到栈,回来做个总结,希望对大家有帮助 栈是线性表的一种,他的特点是后入先出,可以这么理解,栈就像一个存东西的盒子,先放进去的在最底层,后放进去的在上层,因为上层的东西把底层的东西压 ...

  7. flask 源码专题(三):请求上下文和应用上下文入栈与出栈

    1.请求上下文和应用上下文入栈 # 将ctx入栈,但是内部也将应用上下文入栈 ctx.push() def push(self): # 获取到的 top == ctx top = _request_c ...

  8. python栈的实现(入栈,出栈)

    #coding=utf-8 class Stack(): def __init__(st,size):#栈的初始化 st.stack=[]; st.size=size; st.top=-1 def p ...

  9. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

随机推荐

  1. 2018-2019-1-20165221&20165225 《信息安全系统设计》实验五:通讯协议设计

    2018-2019-1-20165221&20165225 <信息安全系统设计>-实验五:通讯协议设计 OpenSSL学习: 简介: OpenSSL是为网络通信提供安全及数据完整性 ...

  2. 2018-2019-2 20165325《网络对抗技术》Exp0 Kali安装 Week1

    2018-2019-2 20165325<网络对抗技术>Exp0 Kali安装 Week1 一.安装kali VMware上学期已经有了,主要是下载Kali-Linux-2019.1-vm ...

  3. springboo+nginx测试负载均衡

    1:之前只是用nginx调用了boot_8044这一个服务,这次新建一个boot_8055服务,并在linux上启动: 两个boot我都是放在 /myprojects 目录下的(自定义,能启动就行) ...

  4. springboot 中页面跳转问题:window.location.href

    我的一个HTML页面 点击注册 本该到注册页面,但是却一直跳到同目录的一个Error.html文件夹下 该页面: 删掉Error.html还不行:会报错,而且改变window.location.hre ...

  5. jsp参数乱码解决

    iframe src引入jsp,?跟着的中文参数会乱码 解决方法: var CJJG=encodeURI(encodeURI(value.data.CJJG));//js里面转码一次 //jsp页面里 ...

  6. 分割字符串和截取字符串:split 和substring

    //按“,”截取字符串 String id="123123,234534,453456"; String[] idArry = id.trim().split(",&qu ...

  7. C++—模板(2)类模板与其特化

    我们以顺序表为例来说明,普通顺序表的定义如下: typedef int DataType; //typedef char DataType; class SeqList { private : Dat ...

  8. Python3——坦克大战

    # coding=utf-8 # Version:python3.6.1 __date__ = '2018/9/20 18:51' __author__ = 'Lgsp_Harold' import ...

  9. [转] webpack中配置Babel

    一.安装 npm install --save-dev babel-loader babel-core babel-preset-env 二.在webpack.config.js中配置module 1 ...

  10. RabbitMQ安装手册

    1.   下载 下载地址:http://www.rabbitmq.com/download.html 2.   windows下安装 2.1.  安装Erlang 下载:http://www.erla ...