Flutter系列(六) 中如何跳转界面

您好,欢迎关注我,本篇文章是关于 Flutter 的系列文,从简单的 Flutter 介绍开始,一步步带你了解进入 Flutter 的世界。你最好有一定的移动开发经验,如果没有也不要担心,在我的专栏底部给我留言,我会尽我的能力给你解答。

上一篇专栏,我带大家用Flutter实现了一个完整的可自定义配置的 PageView 指示器。这篇专栏,我会教大家在Flutter中如何实现界面跳转

在Android中,我们会使用Intent来进行界面间的跳转,用startActivityForResult来处理界面跳转完成后的回调;在iOS中,我们使用Pages进行页面跳转。

页面跳转

在Flutter中页面跳转方式有两种:

方法一:
直接跳转

Navigator.push(context, new MaterialPageRoute(builder: (context) => new SecondScreen()),);

方法二:
通过路由跳转

void main() {
  runApp(MaterialApp(
    home: MyAppHome(), // becomes the route named ‘/‘
    routes: <String, WidgetBuilder> {
      ‘/a‘: (BuildContext context) => MyPage(title: ‘page A‘),
      ‘/b‘: (BuildContext context) => MyPage(title: ‘page B‘),
      ‘/c‘: (BuildContext context) => MyPage(title: ‘page C‘),
    },
  ));
}

Navigator.of(context).pushNamed(‘/b‘);

根据Flutter的文档,routes的灵感来源于reactjs,routes可以翻译为路由,可以看到这种routes的思路在目前的设计中彼此借鉴,routes的思路不仅在前端流行,比如在vue、reactjs、Angular中用到,而且在后端应用中也非常成熟。

关闭页面

使用Navigator.pop()方法可以直接

Navigator.pop(context);

也可以直接带参数回调。

Navigator.of(context).pop({"lat":43.821757,"long":-79.226392});

利用第三方库实现页面传值

Fluro是一个基于Flutter的路由传参库,它可以通过url传递参数。

new Container(
              height: 30.0,
              color: Colors.blue,
              child:new FlatButton(
                child: const Text(‘传递帐号密码‘),
                onPressed: () {
                  var bodyJson = ‘{"user":1281,"pass":3041}‘;
                  router.navigateTo(context, ‘/home/$bodyJson‘);
                  // Perform some action
                },
              )),
          );

接收

class Home extends StatefulWidget{
  final String _result;
  Home(this._result);
    @override
  createState() => new HomeState();
}

class HomeState extends State<Home>{
  @override
  Widget build(BuildContext context) {
    return new Center(
      child: new Scaffold(
        appBar: new AppBar(
          title: new Text("个人主页"),
        ),
        body:new Center(child:  new Text(widget._result)),
      )
    );
  }

总结
本文介绍了Flutter中如何进行界面跳转,下一篇专栏我会教大家如何发布Flutter代码到公共库。

原文地址:https://blog.51cto.com/14295695/2414326

时间: 2024-11-10 08:18:43

Flutter系列(六) 中如何跳转界面的相关文章

Flutter系列之如何发布 Flutter 代码到公共库

您好,欢迎关注我,本篇是关于 Flutter 系列的第六篇,从简单的 Flutter 介绍开始,一步步带你了解进入 Flutter 的世界.你最好有一定的移动开发经验,如果没有也不要担心,在我的专栏底部给我留言,我会尽我的能力给你解答. 上一篇专栏,写的很简单但是也很实用,讲的是在Flutter中如何进行界面间的跳转.这篇专栏我教大家如何发布一个自己写的Flutter开源库 还是已我之前教大家用Flutter实现无限循环的Banner用Flutter实现的无限滑动Banner请添加链接描述,大家

Flutter系列(三) 整体架构

您好,欢迎关注我的专栏,本篇是关于 Flutter 系列的第三篇,从简单的 Flutter 介绍开始,一步步带你了解进入 Flutter 的世界.你最好有一定的移动开发经验,如果没有也不要担心,在我的专栏底部给我留言,我会尽我的能力给你解答. 上篇文章我们介绍了用 Flutter 开发第一个跨平台应用程序,相信大家一定印象深刻,本篇文章介绍 Flutter 平台的整体架构. 一.核心原则 之前专栏有提到过,Flutter 的SDK中包括一个现代的响应式框架.一个2D渲染引擎.现成的widget和

智能路由器-OpenWRT 系列六 (远程迅雷离线下载)

OpenWRT 系列教程 智能路由器-OpenWRT 系列一 (OpenWRT 刷机) 智能路由器-OpenWRT 系列二 (OpenWRT初始配置) 智能路由器-OpenWRT 系列三 (OpenWRT安装LuCI&网络配置) 智能路由器-OpenWRT 系列四 (挂载移动设备) 智能路由器-OpenWRT 系列五 (NAS-SMB家庭共享) 智能路由器-OpenWRT 系列六 (远程迅雷离线下载) 下载 Xware1.0.31,参考地址 http://luyou.xunlei.com/thr

iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种功能,有两种方法. 1.通过方法 - (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion跳转 相

C语言快速入门系列(六)

C语言快速入门系列(五) C语言指针加强 本节引言: 上一节我们对C语言中的指针进行了初步的了解,学习了指针的定义,与普通变量 一维数组,二维数组,字符串之间的使用!在本节中我们将会学习一些新的知识点, 函数,结构体与共用体,枚举类型以及类型定义符typedef! 本节学习路线图: 本节正文 函数 ps:空函数就是什么都不做的函数,开发过程中不需要马上实现的,先写空函数!简单的空函数:void abc(){   } 结构体 共用体: 代码示例2: 建立一个共用体类型,当输入的时学生类型时,要求输

【C++自我精讲】基础系列六 PIMPL模式

0 前言 很实用的一种基础模式. 1 PIMPL解释 PIMPL(Private Implementation 或 Pointer to Implementation)是通过一个私有的成员指针,将指针所指向的类的内部实现数据进行隐藏. 2 PIMPL优点 举例: //x.h class X { public: void Fun(); private: int i; //add int i; }; //c.h #include <x.h> class C { public: void Fun()

iOS流布局UICollectionView系列六——将布局从平面应用到空间

iOS流布局UICollectionView系列六--将布局从平面应用到空间 一.引言 前面,我们将布局由线性的瀑布流布局扩展到了圆环布局,这使我们使用UICollectionView的布局思路大大迈进了一步,这次,我们玩的更加炫一些,想办法将布局应用的空间,你是否还记得,在管理布局的item的具体属性的类UICollectionViewLayoutAttributrs类中,有transform3D这个属性,通过这个属性的设置,我们真的可以在空间的坐标系中进行布局设计.iOS系统的控件中,也并非

Netty4.x中文教程系列(六) 从头开始Bootstrap

Netty4.x中文教程系列(六) 从头开始Bootstrap 其实自从中文教程系列(五)一直不知道自己到底想些什么.加上忙着工作上出现了一些问题.本来想就这么放弃维护了.没想到有朋友和我说百度搜索推荐了我的文章.瞬间有点小激动啊.决定自己要把这个教程系列完善下去.这里诚挚的想支持我的盆友们道歉.真的是让你们失望了.我居然有想放弃的这种丧心病狂的念头.以后绝对不会了. 其实伴随着对Netty的逐步深入学习.感觉自己对netty的了解仍然有所欠缺.加上笔者语文课是美术老师教的.所以..说多了都是泪

Cocos2d-x 系列六之数据操作

一.定时器  在cocos2d-x中, 类似定时器的操作,不需要额外的写Timer,实际上,在Node元素中,已经添加了定时执行的功能: 先来看看在Node中的定义 // ... bool Node::isScheduled(SEL_SCHEDULE selector) { return _scheduler->isScheduled(selector, this); } void Node::scheduleUpdate() { scheduleUpdateWithPriority(0); }