flutter混合(iOS)开发第一步使用(Flutter_Boost)完成页面之间的跳转传值( 三)

书接上回!!!查看上回api

上回咱们说到Flutter内部跳转而且完成传值此次来个Flutter跳转Native而且完成传值bash

Flutter TO Native

上面已经说到第二个Flutter页面了,咱们继续从这里开始app

class SecondRouteWidget extends StatefulWidget {
  final Map<dynamic, dynamic> params;

  SecondRouteWidget(this.params);

  @override
  _SecondRouteWidgetState createState() => _SecondRouteWidgetState();
}

<!--而后接受一下-->
class _SecondRouteWidgetState extends State<SecondRouteWidget> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('secondPage'),
      ),
      body: Center(
        child: Column(
         child: RaisedButton(
              child: Text("跳转原生界面"),
              onPressed: () {
                //          打开原生页面
                <!--这里 open 打开的东西其实就是咱们原生里面 PlatformRouterImp 类里面的 open 方法,
                后面的参数就是咱们 PlatformRouterImp 里面open里面的 url 经过这个 url 咱们能够判断打开咱们相应的界面,
                一、urlParams 传人页面的参数; 如有特殊逻辑,能够经过这个参数设置回调的id 
                二、exts 额外参数 
                三、completion 打开页面的即时回调,页面一旦打开即回调-->
                
                FlutterBoost.singleton.open("sample://LoginPage",
                    urlParams: {"userName": "ryan", "password": "123456"},
                    exts:null(也能够不写这个参数名,他是可选的));
              },
            ),
        ),
      ),
    );
  }
}
复制代码

原生里面咱们在 PlatformRouterImp这个类里面判断一下ide

func open(_ url: String, urlParams: [AnyHashable : Any], exts: [AnyHashable : Any], completion: @escaping (Bool) -> Void) {
        var animated = false;
        if exts["animated"] != nil{
            animated = exts["animated"] as! Bool;
        }
        if url.contains("sample://LoginPage") {
            let vc = JTOrderDetailViewController()
            vc.hidesBottomBarWhenPushed = true
            vc.flutterdata = urlParams
            topVC?.navigationController?.pushViewController(vc, animated: animated);
        } else {
           let vc = FLBFlutterViewContainer.init()
           vc.setName(url, params: urlParams)
           vc.navigation.bar.isHidden = true
           vc.hidesBottomBarWhenPushed = true
           topVC?.navigationController!.pushViewController(vc, animated: animated);
       }
        
        completion(true);
    }
复制代码

这样就打开咱们原生界面了,而且传过来的值也在urlParams这里面,额外参数咱们没有作任何参数传递。post

最后一步咱们原生返回Flutter页面,这里咱们须要本身写一个通道了。它里面没有,直接上代码 咱们在原生里面监听返回按钮的点击事件而后经过FlutterBoostPlugin.sharedInstance().sendEvent这样把东西传过去学习

navigation.bar.backBarButtonItem?.didBack = {
        self.navigationController?.popViewController(animated: true)
        FlutterBoostPlugin.sharedInstance().sendEvent("NativeDetailPageCallback", arguments: ["name":"detailPage","number":"1000"]);
    }
复制代码

咱们在Dart里面ui

//            原生界面返回传值获取
    FlutterBoost.singleton.channel.addEventListener(
        "NativeDetailPageCallback",
            (name, arguments) {
                return handleMsg(name, arguments);
            },
复制代码

这里咱们就能监听到原生传过来的值了。截止到如今基本上完成了从原生到Flutter, 而后FlutterFlutter,Flutter 到原生,之间的全部联系了。this

最后

我是初学者,这里是记录一下本身在学习Flutter_boost时候的学习笔记吧,和你们一块儿分享一下。若是不妥的地方还请路过的大佬不吝赐教!!!!!!url

相关文章
相关标签/搜索