flutter-boost的集成与基本使用(android与flutter的混合开发)

flutter-boost的集成与基本使用(android与flutter的混合开发),第1张

一、flutter-boost的集成:

        截至今日,flutter-boost的最新版本应该是V3.0-preview.9,所以接下来将会在该版本的基础上简单介绍它的集成与使用。

        flutter端所需要做的:

        (1)在flutter module下的pubspec.yaml中添加flutter-boost的依赖,如下图:                  

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.0
  flutter_boost:
    git:
      url: 'https://github.com/alibaba/flutter_boost.git'
      ref: 'v3.0-preview.9'

         (2)如果工程中已经存在一个你自定义的WidgetsFlutterBinding,那么可直接将BoostFlutterBinding混入你已实现的类;如果没有自定义的需求那么以下代码可供参考:

class CustomFlutterBinding extends WidgetsFlutterBinding
    with BoostFlutterBinding {}

                 BoostFlutterBinding用于接管flutter app的生命周期,务必接入!!!

        (3)在dart入口函数中初始化BoostFlutterBinding,如下所示:

class CustomFlutterBinding extends WidgetsFlutterBinding
    with BoostFlutterBinding {}

void main() {
  //在runApp之前确保BoostFlutterBinding初始化
  CustomFlutterBinding();
  runApp(MyApp());
  if (Platform.isAndroid) {
    SystemUiOverlayStyle systemUiOverlayStyle =
        SystemUiOverlayStyle(statusBarColor: Colors.blue);
    SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
  }
}

         至此,flutter部分的flutter-boost已经集成完毕。

        android端需要做的:

        (1)在app的build.gradle中增加以下依赖:

implementation project(':flutter_boost')
implementation project(path: ':flutter_boost')

        (2)在androidmanifest中添加以下代码(具体用途将会在下面基础使用中说明):

 
      
        
 
 

        (3)在MyApplication(自己定义的application中)的onCreate()方法中添加以下代码:

        //alibaba flutter_booster android端配置集成
        FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {
            @Override
            public void pushNativeRoute(FlutterBoostRouteOptions options) {
                //这里的ToAndroidActivity是自己定义的,作为flutter跳原生的页面
                Intent intent = new Intent(FlutterBoost.instance().currentActivity(), ToAndroidActivity.class);
                FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
            }

            @Override
            public void pushFlutterRoute(FlutterBoostRouteOptions options) {
                //这里的ToFlutterActivity是自己定义的,作为原生跳flutter页面的容器
                Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(ToFlutterActivity.class)
                        .backgroundMode(FlutterActivityLaunchConfigs.BackgroundMode.transparent)
                        .destroyEngineWithActivity(false)
                        .uniqueId(options.uniqueId())
                        .url(options.pageName())
                        .urlParams(options.arguments())
                        .build(FlutterBoost.instance().currentActivity());
                FlutterBoost.instance().currentActivity().startActivity(intent);
            }
        }, engine -> {
        });

        到此android端就集成完毕了,接下来会说他的使用。

        注意:flutter-boost暂不支持null-safety,如果想要使用请保证dart sdk版本低于2.9以及flutter版本低于flutter2.0!!!!!

二、flutter-boost的使用:

        使用包含基础使用(单纯跳转和携带参数),以及结合methodChannel进行跳转后的与安卓原生的方法交互及数据传递。

        (1)基础使用:

        这里不做太多介绍,给出alibaba的文档:

        https://github.com/alibaba/flutter_boost/blob/master/docs/routeAPI.md

        唯一想说的就是,路由跳转的声明,代码如下:

//flutter页面入口
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State {
  ///路由表
  static Map routerMap = {
    'addDevicesPage': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings,
          pageBuilder: (_, __, ___) {
            return AddDevicesPage(title: "添加设备");
          });
    },
    'settingsPage': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings,
          pageBuilder: (_, __, ___) {
            return SettingsPage(title: "设置");
          });
    },
    'personalInfoPage': (settings, uniqueId) {
      return PageRouteBuilder(
          settings: settings,
          pageBuilder: (_, __, ___) {
            return SettingsPage(title: "个人资料");
          });
    },
  };

  Route routeFactory(RouteSettings settings, String uniqueId) {
    FlutterBoostRouteFactory func = routerMap[settings.name];
    if (func == null) {
      return null;
    }
    return func(settings, uniqueId);
  }

  @override
  Widget build(BuildContext context) {
    return FlutterBoostApp(routeFactory);
  }
}

        (2)结合methodChannel进行跳转后的与安卓原生的方法交互及数据传递:

        大部分场景不会只做简单的跳转,虽然flutter也提供了网络请求框架,但是个人还是倾向于使用android原生进行数据层的 *** 作,这样就涉及到了利用MethodChannel进行原生方法的调用,具体的用法,在我另一篇文章《糅合flutter-boost与MethodChannel的使用方法》。

        最后,本人也是flutter初学者,在踩坑中学习,记录自己的flutter学习过程。希望能和大家一起进步。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/997067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存