010-flutter dart代码后台执行,没有界面的情况下

一 前言

使用flutter使用混合开发可以在android 和 ios 下只需要开发一套代码就可以运行了,真的很方便,但是我们平常使用的时候都是有界面的情况下开发flutter.那么有一种情况是,如果我只是在原生的界面,但是又想只用一套代码就可以处理ios或者android的逻辑,并且没有flutter界面,这个时候需要有一种方式可以让dart在后台执行代码,比如相同的网络请求,不需要在ios或者Android又要实现两边,不知道如何处理,网上搜了下也没有,后来得知一种情况可以,链接如下:https://flutter.dev/docs/development/packages-and-plugins/background-processes
该链接下使用的样例github为https://github.com/bkonyi/FlutterGeofencing.git

二 FlutterGeofencing主要后台处理逻辑

将FlutterGeofencing下载下来跑了之后,里面有一些额外的代码,但是我们主要想要的代码是后台执行的逻辑
主要看几个地方
GeofencingService类当中的startGeofencingService方法
010-flutter dart代码后台执行,没有界面的情况下_第1张图片
看到这段代码,大概知道其实就是创建了一个没有界面的FlutterNativeView,然后通过这个NativeView去创建MethodHandler,
通道方法plugins.flutter.io/geofencing_plugin_background
相对应处理的方法在callback_dispatcher.dart文件中
010-flutter dart代码后台执行,没有界面的情况下_第2张图片
mBackgroundChannel调用的方法最终会在这里回调,这里是我自己写的测试方法,将原来的一些代码注释了

在上面startGeofencingService方法中有一个需要注意的是看到需要有一个callbackHandle对象,该对象为一个int值,该值的获取在main.dart文件中的initPlatformState方法最终调用了GeofencingManager.initialize()里面通过该GeofencingPlugin.initializeService通道方法的callback.toRawHandle()方法获取一个值存储到本地,然后在原生代码处再获取
callback的获取是通过PluginUtilities.getCallbackHandle去获取
010-flutter dart代码后台执行,没有界面的情况下_第3张图片

三 Demo处理

010-flutter dart代码后台执行,没有界面的情况下_第4张图片
github:https://github.com/MugWorld/ExecutingDartInTheBackground

附言

参考:https://github.com/bkonyi/FlutterGeofencing.git
https://flutter.dev/docs/development/packages-and-plugins/background-processes

你可能感兴趣的:(Flutter)