原生(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 with WidgetsBindingObserver {....后面就不写了

你可能感兴趣的:(原生(IOS,Android)跳转到Flutter的传值)