Flutter的Route概念, 移动开发常指Page, 在android中指activity, ios中指viewcontroller, UGUI中常称为Panel\Form\View? 大概说的就是一个页面吧

之前UGUI的开发都是由一个UIManager来管理Open\Close

Flutter的单页面移动应用模式刚接触还是有点难理解的

参考资料

简单页面跳转

为了装作比较洋气, 页面类起名为XXXRoute...

// UIMain.cs 挂载在GameObject上

using Unity.UIWidgets.engine;
using Unity.UIWidgets.material;
using Unity.UIWidgets.widgets; namespace UI
{
public class UIMain : UIWidgetsPanel
{
protected override Widget createWidget()
{
return new MaterialApp(
home: new HomeRoute()
);
}
}
}
// HomeRoute.cs 首页显示一个跳转按钮(为图省事嵌套写法不要模仿, 实用需重构)

using System.Collections.Generic;
using Unity.UIWidgets.material;
using Unity.UIWidgets.widgets;
using UnityEngine; namespace UI
{
public class HomeRoute : StatefulWidget
{
public override State createState()
{
return new HomeRouteState();
}
} class HomeRouteState : State<HomeRoute>
{
public override Widget build(BuildContext context)
{
Scaffold scaffold = new Scaffold(
appBar: new AppBar(
title: new Text("首页")
),
body: new Center(
child: new Column(
children: new List<Widget>
{
new RaisedButton(
child: new Text("跳转到新页面"),
onPressed: () =>
{
Navigator.push(
context,
new MaterialPageRoute(
builder: (context1) => {
return new NewRoute("这是主页传过去的值");
}
)
// 这里async\await的写法好像不能用...也可能是我太菜
).Then((obj) =>
{
Debug.Log($"接到上个窗口的返回值 {obj.ToString()}");
});
}
),
}
)
)
); return scaffold;
}
}
}
// NewRoute.cs 新页面, 显示一个返回按钮. 这里左上角的按钮可以返回, 但没显示对应返回箭头的图片

using System.Collections.Generic;
using Unity.UIWidgets.material;
using Unity.UIWidgets.widgets;
using UnityEngine; namespace UI
{
public class NewRoute : StatefulWidget
{
//这么传值用起来感觉有点扯, 后续观察有没有更好的方式
public object m_Message; public NewRoute(object message) : base()
{
m_Message = message;
} public override State createState()
{
return new NewRouteState(m_Message);
}
} class NewRouteState : State<NewRoute>
{
public object m_Message; public NewRouteState(object message) : base()
{
m_Message = message;
Debug.Log($"首页传过来一个值 {m_Message}");
} public override Widget build(BuildContext context)
{
Scaffold scaffold = new Scaffold(
appBar: new AppBar(
title: new Text("新页面")
),
body: new Center(
child: new Column(
children: new List<Widget>
{
new RaisedButton(
child: new Text("返回"),
onPressed: () =>
{
Navigator.pop(context, "这是一个返回值");
}
)
}
)
)
); return scaffold;
}
}
}

上面实现了两个页面的简单切换, 效果如下图所示

修改为使用命名路由控制

这种方式更接近`UIManager.Open("XXX")

// UIMain.cs

    // 在MaterialApp中添加路由映射(一个Dictionary)
public class UIMain : UIWidgetsPanel
{
protected override Widget createWidget()
{
return new MaterialApp(
//home: new HomeRoute(),
initialRoute: "Home",
routes: new Dictionary<string, WidgetBuilder>()
{
{ "Home", (context) => new HomeRoute() },
// 现在不知道怎么传递值过去
{ "New", (context) => new NewRoute(null) },
}
);
}
}
// HomeRoute.cs

//Navigator.push(
// context,
// new MaterialPageRoute(
// builder: (context1) => {
// return new NewRoute("这是主页传过去的值");
// }
// )
// ).Then((obj) =>
// {
// Debug.Log($"接到上个窗口的返回值 {obj.ToString()}");
// }); Navigator.pushNamed(context, "New", "这个值不知道该怎么传过去了").Then((obj) =>
{
Debug.Log($"接到上个窗口的返回值 {obj.ToString()}");
}
);

Navigator.pop不需要改变

使用命名路由控制在打开新页面的时候简短很多, 但暂时不知道要怎么传值过去, UIWidgets给的示例里面也没看到

Unity - UIWidgets 3. 页面跳转的更多相关文章

  1. JSP页面跳转的几种实现方法

    使用href超链接标记      客户端跳转 使用JavaScript               客户端跳转 提交表单                        客户端跳转 使用response ...

  2. web设计页面跳转的方法

    一.asp.net c# 打开新页面或页面跳转 1. 最常用的页面跳转(原窗口被替代):Response.Redirect("newpage.aspx"); 2. 利用url地址打 ...

  3. 前端开发--ppt展示页面跳转逻辑实现

    1. 工程地址:https://github.com/digitalClass/web_page 网站发布地址: http://115.28.30.25:8029/ 2. 今天遇到一个小问题, 同组的 ...

  4. Html中设置访问页面不在后进行其他页面跳转

    Html中设置访问页面不在后进行其他页面跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...

  5. JS打开新页面跳转

      有时候使用js进行页面跳转,想使用 a 标签中 target="_blank" 形式,跳转打开一个新的页面. 可以使用以下脚本,创建一个 a标签,然后模拟点击操作. 代码如下: ...

  6. web页面跳转的几种方式

    可用客户端触发或服务端触发的方式来实现页面跳转. 客户端触发 方式一:使用Javascript 利用window.location对象的href属性.assign()方法或replace()方法来实现 ...

  7. Ajax发送POST请求SpringMVC页面跳转失败

    问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...

  8. 通过配置http拦截器,来进行ajax请求验证用户登录的页面跳转

    在.NET中验证用户是否登录或者是否过期,若需要登录时则将请求转向至登录页面. 这个流程在进行页面请求时是没问题的,能正确进行页面跳转. 然而在使用xmlhttprequest时,或者jq的getJs ...

  9. PHP页面跳转(PHP笔记)

    目前学习到三种方法: 1.调用js跳转 2.header()跳转 3.调用HTML方法实现 因为一直在自己学习没有进入项目,并不知道哪个更常使用. 调用js跳转. <?php //这里是跳转方法 ...

  10. java servlet 几种页面跳转的方法及传值

    java servlet 几种页面跳转的方法及传值   java web 页面之间传值有一下这几种方式1.form 表单传递参数2.url地址栏传递参数3.session4.cookie5.appli ...

随机推荐

  1. EF命令行工具 migrate.exe 进行Code First更新数据库,6.3+使用ef6.exe

    EF命令行工具 migrate.exe 进行Code First更新数据库,6.3+使用ef6.exe 使用EF的Code First迁移可以用于从Visual Studio内部更新数据库,但也可通过 ...

  2. Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: 拒绝连接 (Connection refused) (state=08S01,code=0)

    一:启动hiveserver2服务 二:启动beeline 三:连接hiveserver2(下面的1000000端口号适当改小写因为其超出最大端口号的范围建议改为10000) 如果启动不成功实现我们先 ...

  3. ubuntu 20.04 网络配置

    参考链接:ubuntu 20.04 网络配置 网络配置文件目录:/etc/netplan/ 配置实例 # 静态 network: version: 2 ethernets: ens33: addres ...

  4. Vue报错Custom elements in iteration require 'v-bind:key' directives."错误解决

    错误代码 <swiper> <swiper-item v-for="item in banners"> <a :href="item.lin ...

  5. python-多继承构造函数声明问题

    背景 有场景分别定义两组逻辑,随后有统一入口做基类属性的整合 其中两组逻辑的积累构造函数定义入参不同 设计类继承图如: 实际的使用方式抽象为[使用] 小节 实际开发过程中遇到问题 先说结论 pytho ...

  6. WPF自定义标题栏

    往往原有的标题栏无法满足需求,此时就需要进行自定义标题栏. 重新定义Window的Template 首先,需修改WindowChrome的几个属性 CaptionHeight属性值就是自定义标题栏的高 ...

  7. 【go笔记】简单的http服务

    前言 Go语言通过内置的标准库net/http可以非常方便地实现web服务.不借助任何框架,单凭标准库,50行代码内即可实现简单的web服务. http的ListenAndServe()函数原型: f ...

  8. Matlab机器人工具箱安装教程

    参考以下博客 https://blog.csdn.net/AprilsHell/article/details/90722892

  9. AVR汇编(七):位操作和MCU控制指令

    AVR汇编(七):位操作和MCU控制指令 位操作指令 SBI / CBI SBI 指令用于设置I/O寄存器中的第 b 位, CBI 指令用于清除I/O寄存器中的第 b 位. 例如: SBI DDRB, ...

  10. Kubernetes hostPort 使用

    1.概述 在 Kubernetes 中,hostPort 是一种用于将主机上的特定端口映射到运行在 Pod 内部容器的端口的配置选项.通过使用 hostPort,你可以在主机上暴露容器的服务,从而允许 ...