Flutter路由跳转及参数传递

本文要介绍的知识点

  • 用路由推出一个新页面
  • 打开新页面时,传入参数
  • 参数的回传

路由

做Android/iOS原生开发的时候,要打开一个新的页面,你得知道你的目标页面对象,然后初始化一个Intent或者ViewController,再通过startActivity或者pushViewController来推出一个新的页面,不能跟web一样,直接丢一个链接地址就跳转到新的页面。当然,可以自己去加一个中间层来实现这些功能。
Flutter里面是原生支持路由的。Flutter的framework提供了路由跳转的实现。我们可以直接使用这些功能。

Flutter路由介绍

Flutter里面有路由支持所有的路由场景,push、pop页面,页面间的参数传递等等。flutter里面的路由可以分成两种,一种是直接注册,不能传递参数。另一种要自己构造实例,可以传递参数。我们暂时把它们规为静态路由和动态路由。

静态路由的注册

在新建一个MD风格的App的时候,可以传入一个routes参数来定义路由。但是这里定义的路由是静态的,它不可以向下一个页面传递参数。

return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter实例'),
      routes: <String, WidgetBuilder> {
        // 这里可以定义静态路由,不能传递参数
        '/router/second': (_) => new SecondPage(),
        '/router/home': (_) => new RouterHomePage(),
      },
    );

  

静态路由的使用

push一个新页面,pushNamed方法是有一个Future的返回值的,所以静态路由也是可以接收下一个页面的返回值的。但是不能向下一个页面传递参数。

Navigator.of(context).pushNamed('/router/second');

// 带返回值
Navigator.of(context).pushNamed('/router/second').then((value) {
                    // dialog显示返回值
                    _showDialog(context, value);
                  })

  

pop回上一个页面

Navigator.of(context).pop('这个是要返回给上一个页面的数据');

  

动态路由的使用

当需要向下一个页面传递参数时,要用到所谓的动态路由,自己生成页面对象,所以可以传递自己想要的参数。

Navigator.of(context).push(new MaterialPageRoute(builder: (_) {
                    return new SecondPage(title: '路由是个好东西,要进一步封装');
                  }));

  

也可以用PageRouterBuilder来自定义打开动画

Navigator.of(context).push(new PageRouteBuilder(pageBuilder:
            (BuildContext context, Animation<double> animation,
                Animation<double> secondaryAnimation) {
          return new RefreshIndicatorDemo();
        }, transitionsBuilder: (
          BuildContext context,
          Animation<double> animation,
          Animation<double> secondaryAnimation,
          Widget child,
        ) {
          // 添加一个平移动画
          return BRouter.createTransition(animation, child);
        }));

  

平移的变换

/// 创建一个平移变换
  /// 跳转过去查看源代码,可以看到有各种各样定义好的变换
  static SlideTransition createTransition(
      Animation<double> animation, Widget child) {
    return new SlideTransition(
      position: new Tween<Offset>(
        begin: const Offset(1.0, 0.0),
        end: const Offset(0.0, 0.0),
      ).animate(animation),
      child: child, // child is the value returned by pageBuilder
    );
  }

  

转载于:https://www.cnblogs.com/pythonClub/p/10633247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题属于技术问题,可以回答。Audit usage of navigator.userAgent, navigator.appVersion, and navigator.platform可以用于检查和识别浏览器类型和版本号,以便在网站和应用程序中做出相应的调整和优化。但是,在使用时需要注意安全问题,避免被黑客利用。建议使用一些安全的库和工具来提高安全性。 ### 回答2: 使用 navigator.userAgent、navigator.appVersion 和navigator.platform 主要是为了获取用户的浏览器和操作系统信息,以便在开发网页时做出相应的适配和优化。但是,使用这些属性时需要注意以下几点。 首先,navigator.userAgent 属性返回用户代理字符串,其中包含了关于浏览器的详细信息。开发者可以利用这个信息来判断用户使用的浏览器类型、版本和浏览器的厂商等。然而,需要注意的是,用户代理字符串可以被用户篡改,因此不能完全依赖它来确定用户的真实环境。 其次,navigator.appVersion 属性返回浏览器的版本信息。如果开发者需要了解用户浏览器的具体版本,可以使用这个属性。然而,由于不同的浏览器可能返回不同格式的版本信息,需要谨慎处理和兼容。 最后,navigator.platform 属性返回用户操作系统的信息。通过这个属性,开发者可以了解用户的操作系统类型,如Windows、Mac、Linux等。根据操作系统的不同,可以针对性地进行功能展示和优化。然而,需要注意的是,有些用户可能会使用虚拟机或伪造的操作系统,从而造成信息不准确。 总的来说,使用这些属性可以帮助开发者获取用户的浏览器和操作系统信息,但在使用过程中需要注意信息的准确性和可靠性。为了更好地适配用户的环境,建议开发者结合其他技术和手段,如Feature Detection、Progressive Enhancement等来完成开发工作。 ### 回答3: 在使用navigator.userAgent、navigator.appVersion和navigator.platform时,我们需要注意以下几点: 1. navigator.userAgent: 它包含了浏览器厂商、版本号和操作系统等信息。我们可以通过它来判断用户使用的浏览器和操作系统类型。但是需要注意的是,由于其内容可以由用户修改,所以不能完全依赖它来进行精确的浏览器和操作系统判断。 2. navigator.appVersion: 它包含了浏览器的版本号和操作系统的版本号等信息。我们可以通过它来确定用户使用的浏览器和操作系统的具体版本。同样需要注意的是,用户可以修改这些信息,所以不能100%依赖它来进行判断。 3. navigator.platform: 它返回操作系统的平台信息,比如"Win32"表示Windows 32位系统,"MacIntel"表示Mac系统等。我们可以通过它来判断用户使用的操作系统平台。但同样需要注意的是,用户可以修改这个信息,所以不能完全依赖它来确定用户的操作系统。 综上所述,虽然我们可以使用这些属性来判断用户使用的浏览器和操作系统的类型和版本,但由于这些信息是可以被用户修改的,所以在进行判断时需要小心,不要仅依赖这些属性进行关键性的操作,而应该结合其他更可靠的方式,如服务器端验证等来确保安全性和准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值