原生(IOS,Android)跳转到Flutter的传值

Flutter 与 Android iOS 原生的通信有以下四种方式:

BasicMessageChannel 实现 Flutter 与 原生(Android 、iOS)双向通信

(转载https://blog.csdn.net/zl18603543572/article/details/96043692

MethodChannel 实现 Flutter 与 原生原生(Android 、iOS)双向通信

EventChannel 实现 原生原生(Android 、iOS)向Flutter 发送消息(上文已经介绍过)

route传参方式(本文主要介绍这种)

回归主题,我们来实现最基本的原生跳转Flutter传值问题,安卓和IOS通用。以下列举IOS的代码与Flutter的代码

原生OC代码:

FlutterViewController* flutterViewController = [[FlutterViewController alloc] initWithProject:nil nibName:nil bundle:nil];

   flutterViewController.modalPresentationStyle = UIModalPresentationFullScreen;

    [flutterViewController setInitialRoute:@"page?{\"id\":\"123\"}"];

  [self presentViewController:flutterViewController animated:YES completion:nil];

page是Flutter的dart页面,传id=123的参数给flutter,这个地方也可以写成    NSString *str = [NSString stringWithFormat:@"page?%@",AAA];(AAA是IDdic的json字符串。 NSDictionary*IDdic =@{@"id":@"123"};字典转json字符串的代码我就不贴了)

FLutter代码(main.dart):

import 'dart:ui';

import 'package:flutter/material.dart';

import 'package:flutter/services.dart';

import 'page.dart';

void main() {

SystemUiOverlayStyle systemUiOverlayStyle =SystemUiOverlayStyle(statusBarColor:Colors.transparent);

  SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);

  runApp(MaterialApp(

home: _widgetRoute(window.defaultRouteName,),

  ));

}


Widget _Route(String params){

//解析路由参数

  String pageName =Util.getPageName(params);

  Map<   String,dynamic>  pageParams =Util.getNativeParams(params);

  print(pageName+'名字');

  print(pageParams.toString()+'参数');

  //跳转页面

  switch(pageName){

case 'page':

return pageHome(mapParam:pageParams,);

    case 'XXX':

return xxxPage(mapParam:pageParams,);

    default:

return null;

  }

}

其中的Util.dart文件为

import 'package:flutter/services.dart';

import 'dart:convert';

class Util {

///路由参数

  static getPageName(String route){

String pageName =route;

    if (route.indexOf("?") != -1)

//截取

      pageName =route.substring(0,route.indexOf("?"));

    return pageName;

  }

///参数

  static parseNativeParams(String route){

MapnativeParams = {};

    if(route.indexOf("?") != -1){

nativeParams =json.decode(route.substring(route.indexOf("?") +1));

    }

return nativeParams;

//    return nativeParams['pageParams'] ?? "{}";

  }

}

最后跳转过去的页面里面

class pageHome extends StatefulWidget {

MapmapParam;

  pageHome({this.mapParam});

  @override

  _State createState() =>_State();

}

class _State extends State<pageHome> with WidgetsBindingObserver {....后面就不写了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.IOS原生跳转flutter页面时的传值。在flutter页面初始化之前注册通知,在flutter页面初始化里...
    小白奔哥阅读 7,091评论 0 3
  • 如何在现有的iOS工程中接入Flutter(详见原文) 本文是参考 官方文档,加上自己的爬坑经验,总结出的,供大家...
    Andy__M阅读 13,254评论 21 31
  • Flutter使用了一个灵活的系统,允许您调用特定平台的API,Flutter平台特定的API支持不依赖于代码生成...
    我是酷阅读 4,692评论 0 1
  • 今天冬至。食堂管理员昨天就准备好了饺子,用作今天早上的早餐。 传说冬至那天不吃饺子的话冬天会冻耳朵,所以今天要吃饺...
    宏123阅读 715评论 0 1
  • 古诗词中表现爱情的,灿若河汉,皎似秋月。佳作频出,读之令人心向往之。 有“野有蔓草,零露漙兮。有美一人,清扬婉兮”...
    点绛唇兮阅读 3,607评论 0 0