GithubHelp home page GithubHelp logo

alibaba / flutter_boost Goto Github PK

View Code? Open in Web Editor NEW
6.8K 138.0 1.2K 59.06 MB

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts

Home Page: https://github.com/alibaba/flutter_boost

License: MIT License

Java 25.11% Ruby 0.70% Objective-C 12.62% Dart 40.03% Swift 19.63% Kotlin 0.04% HTML 0.21% Shell 0.51% TypeScript 0.74% Batchfile 0.42%
flutter hybrid-app hybrid-flutter ios android dart

flutter_boost's Introduction


中文文档 中文介绍

Release Note

4.5.4

PS:Null-safety is already supported.

    1. Flutter SDK upgrades do not require Boost upgrades
    1. Simplify the architecture
    1. Simplify the interface
    1. Unified design of double-end interface
    1. Solved the Top Issue
    1. Android does not need to distinguish between AndroidX and Support

FlutterBoost

A next-generation Flutter-Native hybrid solution. FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts. The philosophy of FlutterBoost is to use Flutter as easy as using a WebView. Managing Native pages and Flutter pages at the same time is non-trivial in an existing App. FlutterBoost takes care of page resolution for you. The only thing you need to care about is the name of the page(usually could be an URL). 

Prerequisites

  1. Before proceeding, you need to integrate Flutter into your existing project.
  2. The Flutter SDK version supported by Boost 3.0 is >= 1.22

Flutter SDK version support:

  1. Flutter SDK 3.0 and above, use a version greater than 4.0.1
  2. Flutter SDK 3.0 or below, use v3.0-release.2 or below
  3. The null-safe version that supports Flutter SDK 2.5.x is 3.1.x

Getting Started

Add a dependency in you Flutter project.

Open you pubspec.yaml and add the following line to dependencies:

flutter_boost:
    git:
        url: 'https://github.com/alibaba/flutter_boost.git'
        ref: '4.5.4'

Boost Integration

使用文档

建设文档

FAQ

please read this document: FAQ

License

This project is licensed under the MIT License - see the LICENSE file for details

关于我们

阿里巴巴-闲鱼技术是国内最早也是最大规模线上运行Flutter的团队。

我们在公众号中为你精选了Flutter独家干货,全面而深入。

内容包括:Flutter的接入、规模化应用、引擎探秘、工程体系、创新技术等教程和开源信息。

架构/服务端/客户端/前端/算法/质量工程师 在公众号中投递简历,名额不限哦

欢迎来闲鱼做一个好奇、幸福、有影响力的程序员,简历投递:[email protected]

订阅地址

For English

flutter_boost's People

Contributors

0xzone avatar alexv525 avatar bktoky avatar cheungskei avatar christyuj avatar coldpalelight avatar firewayer avatar gzhongcheng avatar huangyumeng123 avatar jerryfans avatar joechan-cq avatar junhualin avatar kylinchen avatar luckysmg avatar mk-wang avatar nightfallsad avatar nightwolf-chen avatar noborder avatar qianhk avatar rmondjone avatar seedotlee avatar spiciedcrab avatar tjroger avatar vadaski avatar wbqqqq avatar xiaoxiaowesley avatar xujim avatar xujinping avatar yacumima avatar zmtzawqlp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

flutter_boost's Issues

example跑不起来?

as打开example下的android目录,提示dart sdk 找不到,

打开example目录,
一直 D:\flutter\bin\flutter.bat --no-color packages get

怎么没输出结果?

正确的姿势是?

The following MissingPluginException was thrown while activating platform stream on channel NavigationService_event_channel: #19

V/ActivityThread: updateVisibility : ActivityRecord{3b775cb2 token=android.os.BinderProxy@34eaf405 、MainActivity}} show : false
I/flutter: ══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞══════════════════════════════════════════════════════════
I/flutter: The following MissingPluginException was thrown while activating platform stream on channel
I/flutter: NavigationService_event_channel:
I/flutter: MissingPluginException(No implementation found for method listen on channel
I/flutter: NavigationService_event_channel)
I/flutter: When the exception was thrown, this was the stack:
I/flutter: #0 MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:291:7)
I/flutter:
I/flutter: #1 EventChannel.receiveBroadcastStream. (package:flutter/src/services/platform_channel.dart:437:29)
I/flutter:
I/flutter: #6 ServiceTemplate.listenEvent (package:xservice_kit/ServiceTemplate.dart:69:42)
I/flutter: #7 NavigationService.listenEvent (package:flutter_boost/AIOService/NavigationService/service/NavigationService.dart:40:22)
I/flutter: #8 new ContainerCoordinator (package:flutter_boost/container/container_coordinator.dart:40:23)
I/flutter: #9 ContainerCoordinator.singleton (package:flutter_boost/container/container_coordinator.dart:34:49)
I/flutter: #10 ContainerCoordinator.singleton (package:flutter_boost/container/container_coordinator.dart:34:37)
I/flutter: #11 FlutterBoost.registerPageBuilders (package:flutter_boost/flutter_boost.dart:92:26)
I/flutter: #12 MyAppState.initState (package:design_flutter/main.dart:75:28)
I/flutter: #13 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3830:58)
I/flutter: #14 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)

flutter_boost混合项目,aos打包安装后问题两则

1.部分手机安装报错找不到对应的 libflutter.so。但是又不能把所有so都加进去,包太大了,你们是怎么处理的?类似:
buildTypes {
abiFilters "armeabi-v7a",'arm64-v8a'
}
2.有人尝试过weex和flutter的混合工程吗?我目前的包是 native+weex+flutter,native页面加载正常,weex的framework初始化抛错了:
image

整理了下,上面2个其实是一个问题,
1.不加上 abiFilters 'arm64-v8a',米6的arm64手机,抛出找不到 libflutter.so
2.加上了 abiFilters 'arm64-v8a',weex的集成要求就是不支持 arm64-v8a的so。所以 abiFilters "armeabi-v7a"只有这一项。
那么矛盾来了,加/不加都有问题,请教下有人遇到过吗?这种问题怎么解决?

建议增加路由无法响应方法

正常情况,dart端在这里注册路由实现:FlutterBoost.singleton.registerPageBuilders({});
原生端 - (void)openPage:(NSString *)name params:(NSDictionary *)params animated:(BOOL)animated completion:(void (^)(BOOL))completion;
在这个方法调用路由。

如果这边push了一个未注册的page name。页面会直接红屏报错。
强烈建议在 FlutterBoostPlugin 类新增一个判断页面是否注册的方法

Application 偶现空指针异常

image
这样集成应该不对把,Application中init获取MainAppActivity.sRef.get(); 这时候MainAppActivity还没有启动,可能存在空指针的。
看下异常信息:
image

android 第一次加载flutter的界面很慢

android 第一次加载flutter的界面很慢 缓冲大概3-5秒 之后打开就快了 有没有什么方式在打开APP时就分配flutter资源 使得第一次打开flutter界面更快

原生页面返回到 flutter 页面,状态栏颜色怎么刷新?

flutter 页面状态栏为黑色模式,原生页面A为白色模式。
当跳转到原生的时候,状态栏的颜色变化了,然后切回到 flutter页面,状态栏颜色变成为原生页面A的颜色。 有没有提供一个监听接口,页面重新返回到可视视图的时候,进行回调?

错误: 不兼容的类型: ApplicationLike无法转换为Application

项目中MyApplicationLike 继承了 DefaultApplicationLike 集成了(tinker)
编译时报错
错误: 不兼容的类型: MyApplicationLike无法转换为Application
错误: 不是封闭类: MyApplicationLike

@DefaultLifeCycle(application = "com.MyApplication",
flags = ShareConstants.TINKER_ENABLE_ALL,
loadVerifyFlag = false)
public class MyApplicationLike extends DefaultApplicationLike

FlutterMain.startInitialization(getContext());
FlutterBoostPlugin.init(new IPlatform() {
@OverRide
public Application getApplication() {
return MyApplicationLike.this;
}
...

请问这个问题应该怎么解决?谢谢

example代码Flutter跳Native的传参问题

建议修改一下example代码中PageRouter的代码,因为实际上传过来的url是一个Uri,包含参数,示例代码的问题:
1.带参情况下,如果用equals作判断,无法判断准确,用startWith会否好一点?
2.可以把解析参数作为Bundle传入activity的方式补充一下,以方便初学者学习?

Flutter页面启动 Activity页面,如何拿到参数?

Flutter页面代码:
FlutterBoost.singleton.openPage("pagename", {"key":"value"});
Android代码
FlutterBoostPlugin.init(new IPlatform() { ........... /** * start a new activity from flutter page, you may need a activity router. */ @Override public boolean startActivity(Context context, String url, int requestCode) { return PageRouter.openPageByUrl(context, url, requestCode); } .......... });

Flutter启动Android Activity,请问下Android代码 startActivity(Context context, String url, int requestCode)怎么拿到Flutter中传过来的参数key,value????

iOS native 引入flutter_boost后,单独运行 flutter 工程到 iOS 设备报错。

`Error output from Xcode build:

2019-03-13 16:57:58.628 xcodebuild[45539:202925] [MT] PluginLoading: Required plug-in compatibility UUID D7881182-AD00-4C36-A94D-F45FC9B0CF85 for plug-in at path '~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/InjectionPlugin.xcplugin' not present in DVTPlugInCompatibilityUUIDs
** BUILD FAILED **

Xcode's output:

/Users/xzr/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.26/ios/Classes/Service/FlutterServiceTemplate.m:124:36: warning: undeclared selector 'handlers' [-Wundeclared-selector]
if ([self respondsToSelector: @selector(handlers)]) {
^
/Users/xzr/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.26/ios/Classes/Service/FlutterServiceTemplate.m:125:52: warning: undeclared selector 'handlers' [-Wundeclared-selector]
NSArray *handlers = [self performSelector:@selector(handlers)];
^
/Users/xzr/flutter/.pub-cache/hosted/pub.flutter-io.cn/xservice_kit-0.0.26/ios/Classes/Service/FlutterServiceTemplate.m:135:10: warning: block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior [-Wimplicit-retain-self]
[_msgDispatcher dispatch:msg result:result];
^
self->
3 warnings generated.
=== BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
Undefined symbols for architecture arm64:
"___cxa_guard_acquire", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_release", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_abort", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___gxx_personality_v0", referenced from:
-[FLBMemoryInspector deviceMemory] in libflutter_boost.a(FLBMemoryInspector.o)
-[FLBMemoryInspector currentCondition] in libflutter_boost.a(FLBMemoryInspector.o)
isHighterThanIos9() in libflutter_boost.a(FLBMemoryInspector.o)
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
_memoryWarningLimit() in libflutter_boost.a(FLBMemoryInspector.o)
+[Service_NavigationService load] in libflutter_boost.a(Service_NavigationService.o)
+[Service_NavigationService onNativePageResult:uniqueId:key:resultData:params:] in libflutter_boost.a(Service_NavigationService.o)
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)`

原生项目增量覆盖 flutter_boost/example/android/app 后,遇到的问题两则:

  1. BoostFlutterActivity的实现代码,即flutter_boost/android/src 下所有java文件,大家务必自己格式化一下。否则你可能会遇到如下问题:

image

这个比较坑,里面的种种**空格符**会让你的ide各种飙红(代码没问题,格式有问题)。 根本原因不太清楚,不过靠一个一个手动格式化文件,就可以解决!

2.排除万难终于sync success,build的时候遇到了:xservice_kit 里面一个build.grade的问题,具体是:
image

求解这个存在于 :xservice_kit Tasks/other/transformDexArchiveWithExternalLibsDexMerge
需要我在example/app的build.grade 添加什么task吗?

flutter_boost 0.0.39版本无法使用

我在pubspec.yaml中配置了依赖flutter_boost: ^ 0.0.39,但是实际拉下来的版本是flutter_boost-0.0.344版本,而我从来没有配置过这个版本,导致我在main函数初始化报错,找不到registerPageBuilders方法。什么原因???
image
image

ios集成时 使用pod报警导致工程编译失败

下面是pod的信息:
[!] A license was specified in podspec flutter_boost but the file does not exist - /Users/liheng/Desktop/车联网项目/ios_jicheng/my_flutter/.ios/Flutter/.symlinks/flutter_boost/LICENSE

[!] Unable to read the license file ../LICENSE for the spec flutter_boost (0.0.1)

[!] Unable to read the license file ../LICENSE for the spec flutter_boost (0.0.1)

下面是工程编译的报错信息:
Undefined symbols for architecture arm64:
"___cxa_guard_acquire", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_release", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_abort", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___gxx_personality_v0", referenced from:
-[FLBMemoryInspector deviceMemory] in libflutter_boost.a(FLBMemoryInspector.o)
-[FLBMemoryInspector currentCondition] in libflutter_boost.a(FLBMemoryInspector.o)
isHighterThanIos9() in libflutter_boost.a(FLBMemoryInspector.o)
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
_memoryWarningLimit() in libflutter_boost.a(FLBMemoryInspector.o)
+[Service_NavigationService load] in libflutter_boost.a(Service_NavigationService.o)
+[Service_NavigationService onNativePageResult:uniqueId:key:resultData:params:] in libflutter_boost.a(Service_NavigationService.o)
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

error

Undefined symbols for architecture arm64:
"___cxa_guard_acquire", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_release", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___cxa_guard_abort", referenced from:
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
"___gxx_personality_v0", referenced from:
-[FLBMemoryInspector deviceMemory] in libflutter_boost.a(FLBMemoryInspector.o)
-[FLBMemoryInspector currentCondition] in libflutter_boost.a(FLBMemoryInspector.o)
isHighterThanIos9() in libflutter_boost.a(FLBMemoryInspector.o)
getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
_memoryWarningLimit() in libflutter_boost.a(FLBMemoryInspector.o)
+[Service_NavigationService load] in libflutter_boost.a(Service_NavigationService.o)
+[Service_NavigationService onNativePageResult:uniqueId:key:resultData:params:] in libflutter_boost.a(Service_NavigationService.o)
...
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

传参问题

场景:我从flutter跳原生需要传参,原生一个acitivity点击后发现没登录需要跳转flutter登录页面,登录成功需要回传值到这个原生页面,怎么处理?

java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.ViewParent.requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent)' on a null object reference

请教一个问题: 从flutter回退到native页面时,会报下面的错误,日志如下
E/FlutterBoost#: detachFlutterView
E/FlutterView: Uncaught exception while updating semantics
java.lang.NullPointerException: Attempt to invoke interface method 'boolean android.view.ViewParent.requestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent)' on a null object reference
at io.flutter.view.AccessibilityBridge.sendAccessibilityEvent(AccessibilityBridge.java:849)
at io.flutter.view.AccessibilityBridge.createWindowChangeEvent(AccessibilityBridge.java:895)
at io.flutter.view.AccessibilityBridge.updateSemantics(AccessibilityBridge.java:666)
at io.flutter.view.FlutterView.updateSemantics(FlutterView.java:816)
at io.flutter.view.FlutterNativeView.updateSemantics(FlutterNativeView.java:210)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:143)
at android.os.Looper.loop(Looper.java:125)
at android.app.ActivityThread.main(ActivityThread.java:5531)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:971)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:766)
E/FlutterBoost#: onContainerShown
E/FlutterBoost#: attachFlutterView
E/FlutterBoost: FlutterMenuFragment resume
E/FlutterBoost#: onContainerShown

请问这是什么原因造成的,怎么解决? 谢谢

请教个问题:addBackPressedListener 怎么具体去覆盖默认物理返回键的回调的?

native--> flutter1-->flutter2
1 flutter1 通过 openPage 方式 打开flutter2, 物理键回退没有问题
2 flutter1 通过 Navigator.push(context, MaterialPageRoute(builder: (context) => FirstRouteWidget()))方式 打开flutter2, 物理键回退会直接到native , 这种场景能不能控制一层一层回退的?

请问如何可以通过BoostContainer.of(context).addBackPressedListener(listener)去覆盖默认物理返回键的回调。

请问下这个方法 BoostContainer.of(context).addBackPressedListener(listener) 具体怎么使用嘛?
flutter 和 Android 原生,分别应该怎么使用的,能详细说明下吗,谢谢

提示FlutterBoost#ManagerNavigatorObserver didPush 但是页面没跳转

进行的跳转是dart内部跳转:

首先定义了路由:

    FlutterBoost.singleton.registerPageBuilders({
      'main': (pageName, params, _) => MyHomePage(),
      'news': (pageName, params, _) => NewsDemo(),
    });

然后跳转:

FlutterBoost.singleton.openPage("news", {});

结果就只打印了个结果,页面没跳,啥情况?

dart跳native activity是可以跳的

xcode报错:重复定义了_OBJC_CLASS_$_GeneratedPluginRegistrant

下面是xcode报错的信息:

duplicate symbol OBJC_CLASS$_GeneratedPluginRegistrant in:
/Users/liheng/Library/Developer/Xcode/DerivedData/Build/Intermediates.noindex/ios_test1.build/Debug-iphoneos/ios_test1.build/Objects-normal/arm64/GeneratedPluginRegistrant.o
/Users/liheng/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/FlutterPluginRegistrant/libFlutterPluginRegistrant.a(GeneratedPluginRegistrant.o)
duplicate symbol OBJC_METACLASS$_GeneratedPluginRegistrant in:
/Users/liheng/Library/Developer/Xcode/DerivedData/Build/Intermediates.noindex/ios_test1.build/Debug-iphoneos/ios_test1.build/Objects-normal/arm64/GeneratedPluginRegistrant.o
/Users/liheng/Library/Developer/Xcode/DerivedData/Build/Products/Debug-iphoneos/FlutterPluginRegistrant/libFlutterPluginRegistrant.a(GeneratedPluginRegistrant.o)
ld: 2 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

引入工程后 run 报错

Launching lib/main.dart on iPhone XR in debug mode...
Xcode build done.                                            3.4s
Failed to build iOS app
Error output from Xcode build:
↳
    ** BUILD FAILED **
Xcode's output:
↳
    === BUILD TARGET Runner OF PROJECT Runner WITH CONFIGURATION Debug ===
    Undefined symbols for architecture x86_64:
      "___cxa_guard_acquire", referenced from:
          getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
      "___cxa_guard_release", referenced from:
          getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
      "___cxa_guard_abort", referenced from:
          getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
      "___gxx_personality_v0", referenced from:
          -[FLBMemoryInspector deviceMemory] in libflutter_boost.a(FLBMemoryInspector.o)
          -[FLBMemoryInspector currentCondition] in libflutter_boost.a(FLBMemoryInspector.o)
          isHighterThanIos9() in libflutter_boost.a(FLBMemoryInspector.o)
          getLimit() in libflutter_boost.a(FLBMemoryInspector.o)
          _memoryWarningLimit() in libflutter_boost.a(FLBMemoryInspector.o)
          +[Service_NavigationService load] in libflutter_boost.a(Service_NavigationService.o)
          +[Service_NavigationService onNativePageResult:uniqueId:key:resultData:params:] in 
     libflutter_boost.a(Service_NavigationService.o)
          ...
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

AndroidView去加载webview无法显示

场景:
flutter端 从 A页面跳转到B页面 并且销毁A页面,在B页面通过androidview 加载一个原生的webview页面。但是无法显示出来。

初步定位:
1、flutterview 是单例,所以FlutterPluginRegistry的attach的时候,context是A页面的。
2、在PlatformViewFactory 的create 方法里面 context是SingleViewPresentation持有的,也就是A页面的context。但是A已经销毁了,所以显示不出来。

问题:有些手机是android 9.0的可以显示出来的,但是我手头上的一个pad是7.0的就无法显示。

这个有解吗?

vs code 打开example ,跳转到flutter页面报错

Build fingerprint: 'Rock/odin/odin:7.1.1/NMF26F/1547630572:user/dev-keys'
Revision: '0'
ABI: 'arm64'
pid: 2729, tid: 2797, name: 1.gpu >>> com.taobao.idlefish.flutterboostexample <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xa36be5c002
x0 0000007f6b658000 x1 0000007f6b658a7c x2 0000000000000000 x3 0000000000002640
x4 0000007f6b65a640 x5 0000007f6e9fb598 x6 0000000000000000 x7 0000007f6b658a7c
x8 0000000000000000 x9 0000007f6b658a7c x10 0000002400804002 x11 0000000000000003
x12 0000000000000000 x13 000000a36be5c002 x14 0000000000000a30 x15 0000000000000000
x16 0000000000000130 x17 0000000000000000 x18 0000007f6e9fb5e4 x19 0000007f6a7b9000
x20 0000007f81fd6300 x21 0000000000000001 x22 0000000000000af4 x23 0000007f6b658a30
x24 0000007f6dda983f x25 0000000000000001 x26 0000007f6dda982f x27 0000007f6b658000
x28 0000007f8171c000 x29 0000007f6e9fbdc0 x30 0000007f8144ab44
sp 0000007f6e9fb2a0 pc 0000007f8144a4b8 pstate 0000000060000000
backtrace:
#00 pc 00000000009984b8 /system/vendor/lib64/libllvm-glnext.so
#1 pc 0000000000998b40 /system/vendor/lib64/libllvm-glnext.so
#2 pc 000000000090b508 /system/vendor/lib64/libllvm-glnext.so
#3 pc 00000000009aa1e8 /system/vendor/lib64/libllvm-glnext.so (_Z21QGLCLoadProgramBinaryPvS_mP23QGLC_LINKPROGRAM_RESULT+84)
#4 pc 0000000000179c78 /system/vendor/lib64/egl/libGLESv2_adreno.so (_ZN17EsxShaderCompiler21LoadProgramBinaryBlobEP10EsxContextP10EsxProgramPKvmP10EsxInfoLog+184)
#5 pc 000000000016110c /system/vendor/lib64/egl/libGLESv2_adreno.so (_ZN10EsxProgram17LoadProgramBinaryEP10EsxContextjPKvi+172)
#6 pc 00000000000fd328 /system/vendor/lib64/egl/libGLESv2_adreno.so (_ZN10EsxContext15GlProgramBinaryEjjPKvi+136)
#7 pc 000000000013f330 /system/vendor/lib64/egl/libGLESv2_adreno.so (_ZN21EsxGlApiParamValidate15GlProgramBinaryEP11EsxDispatchjjPKvi+592)
#8 pc 00000000000e2b04 /system/vendor/lib64/egl/libGLESv2_adreno.so (glProgramBinary+68)
#9 pc 0000000000816794 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#10 pc 000000000081424c /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#11 pc 0000000000814b20 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#12 pc 00000000007b9ef0 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#13 pc 00000000007bb3c8 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#14 pc 00000000007c8298 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#15 pc 00000000007c8194 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#16 pc 00000000007b60cc /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#17 pc 00000000007b64f4 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#18 pc 00000000007c7248 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)
#19 pc 00000000009224b8 /data/app/com.taobao.idlefish.flutterboostexample-1/lib/arm64/libflutter.so (offset 0x690000)

Question: 和 hybrid_stack_manager 定位上的区别?

flutter_boosthybrid_stack_manager 目测都是闲鱼推出的、用来管理混合栈的解决方案.

由于 hybrid_stack_manager 需要在 Flutter 源码里添加一行代码,尝试了一下就放弃了(看上去关注度和活跃度也都不高).

这次又推出的 flutter_boost ,号称 “新一代Flutter-Native混合解决方案”。请问和 hybrid_stack_manager 实现的作用上,或者二者的定位上,有什么较大的区别么?

请教一个问题

看了本项目的ios demo, 初始界面的时候有一个 tab 是使用了 flutter页面, 想问如果不需要这种,只在2级以上的页面,某项操作后触发跳转到 flutter 页面,那么怎么进行初始化?

+ (instancetype)shared {
    static FlutterModule *module = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        module = [[FlutterModule alloc] init];
    });
    return module;
}

- (instancetype)init {
    if (self = [super init]) {
        self.router = [[FlutterRouter alloc] init];
    }
    return self;
}

- (void)setup {
    [FlutterBoostPlugin.sharedInstance startFlutterWithPlatform:self.router
                                                        onStart:^(FlutterViewController *fvc) {
    }];
}


- (void)jumpLifeDetailWithCatId:(NSInteger)cateId
                            tid:(NSString *)tid
                 pushController:(nonnull UIViewController *)pushController {
    NSString *type = [PostTool getLifeTableNameWithCatId:cateId];
    self.router.navigationController = pushController.navigationController;
    [self.router openPage:@"life_detail" params:@{@"cateId": @(cateId), @"tid": tid, @"type": type} animated:YES completion:^(BOOL finished) {

    }];
}

然后我这边是在 appdelegate 的入口调用 [[xxx shared] setup];

但是我打开的页面为空白

`xservice_kit` spelling incorrect.

I found some getHanlderBlockForType: spelling error in xservice_kit, but I cannot found any repo for it. So issued it here because I find the xservice_kit author same as this project.

引入boost后,单独打开flutter项目不行吗?

╞══════════════════════════════════════════════════════════
I/flutter ( 3068): The following MissingPluginException was thrown while activating platform stream on channel
I/flutter ( 3068): NavigationService_event_channel:
I/flutter ( 3068): MissingPluginException(No implementation found for method listen on channel
I/flutter ( 3068): NavigationService_event_channel)
I/flutter ( 3068):
I/flutter ( 3068): When the exception was thrown, this was the stack:
I/flutter ( 3068): #0 MethodChannel.invokeMethod
I/flutter ( 3068):
I/flutter ( 3068): #1 EventChannel.receiveBroadcastStream.
I/flutter ( 3068):
I/flutter ( 3068): #6 ServiceTemplate.listenEvent
I/flutter ( 3068): #7 NavigationService.listenEvent
I/flutter ( 3068): #8 new ContainerCoordinator
I/flutter ( 3068): #9 ContainerCoordinator.singleton
I/flutter ( 3068): #10 ContainerCoordinator.singleton
I/flutter ( 3068): #11 FlutterBoost.registerPageBuilders
I/flutter ( 3068): #12 _MyAppState.initState
I/flutter ( 3068): #13 StatefulElement._firstBuild
I/flutter ( 3068): #14 ComponentElement.mount
I/flutter ( 3068): #15 Element.inflateWidget
I/flutter ( 3068): #16 Element.updateChild
I/flutter ( 3068): #17 ComponentElement.performRebuild
I/flutter ( 3068): #18 Element.rebuild
I/flutter ( 3068): #19 ComponentElement._firstBuild
I/flutter ( 3068): #20 ComponentElement.mount
I/flutter ( 3068): #21 Element.inflateWidget
I/flutter ( 3068): #22 Element.updateChild
I/flutter ( 3068): #23 ComponentElement.performRebuild
I/flutter ( 3068): #24 Element.rebuild
I/flutter ( 3068): #25 ComponentElement._firstBuild
I/flutter ( 3068): #26 StatefulElement._firstBuild
I/flutter ( 3068): #27 ComponentElement.mount
I/flutter ( 3068): #28 Element.inflateWidget
I/flutter ( 3068): #29 Element.updateChild
I/flutter ( 3068): #30 RenderObjectToWidgetElement._rebuild
I/flutter ( 3068): #31 RenderObjectToWidgetElement.mount
I/flutter ( 3068): #32 RenderObjectToWidgetAdapter.attachToRenderTree.
I/flutter ( 3068): #33 BuildOwner.buildScope
I/flutter ( 3068): #34 RenderObjectToWidgetAdapter.attachToRenderTree
I/flutter ( 3068): #35 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.attachRootWidget
I/flutter ( 3068): #36 runApp
I/flutter ( 3068): #37 main
I/flutter ( 3068): #38 _runMainZoned.. (dart:ui/hooks.dart:189:25)
I/flutter ( 3068): #43 _runMainZoned. (dart:ui/hooks.dart:180:5)
I/flutter ( 3068): #44 _startIsolate. (dart:isolate/runtime/libisolate_patch.dart:300:19)
I/flutter ( 3068): #45 _RawReceivePortImpl._handleMessage (dart:isolate/runtime/libisolate_patch.dart:171:12)
I/flutter ( 3068): (elided 8 frames from package dart:async)
I/flutter ( 3068): ════════════════════════════════════════════════════════════════════════════════════════════════════

java.lang.IllegalStateException: Activity has been destroyed

  1. 请教一个问题: 现象描述
    1首页打开首页,MainActivity,(比如地址为@1),

  2. 点击flutter页面,进行 GeneratedPluginRegistrant.registerWith(registry); 注册,此时
    alreadyRegisteredWith 方法返回false,进行注册
    public static void registerWith(PluginRegistry registry) {
    if (alreadyRegisteredWith(registry)) {
    return;
    }
    xx.registerWith(registry.registrarFor("xx")); //这个地方就注册了一次,里面调用了registrar.activity();
    }

    public static void registerWith(PluginRegistry.Registrar registrar) {
    final MethodChannel channel = new MethodChannel(registrar.messenger(), "xx");
    channel.setMethodCallHandler(sInstance);
    mActivity = registrar.activity(); // 这个地方一直是第一次MainActivity
    }

private static boolean alreadyRegisteredWith(PluginRegistry registry) {
final String key = GeneratedPluginRegistrant.class.getCanonicalName();
if (registry.hasPlugin(key)) {
return true;
}
registry.registrarFor(key);
return false;
}
3. 退出flutter,再次进入flutter alreadyRegisteredWith 返回TRUE, 没有问题
4. 退出首页,再次打开 MainActivity,(此时地址变为@2),这两次的MainActivity 是不一样的,第一次的已经销毁了,但是 进入flutter页面 alreadyRegisteredWith 还是返回TRUE,不会重新进行注册,为什么?
5. MainActivity 包含了fragment,
没有退出首页时,第一次 activity.getFragmentManager() 不为空,
再次进入后,不会重新注册, 注册的地方用到的 mActivity = registrar.activity(),还是第一次的activity,但是第一次的已经销毁了了 activity.getFragmentManager() 为空了

错误日志
java.lang.IllegalStateException: Activity has been destroyed
at android.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1350)
at android.app.BackStackRecord.commitInternal(BackStackRecord.java:729)
at android.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:709)

2, 怎么退出首页之后,再次打开,重新注册,{alreadyRegisteredWith 方法返回false,进行注册}?

  1. native--> flutter1-->flutter2 , 顶部回退可以正常回退, flutter2-->flutter1-->native;
    按物理键返回,直接返回到native了,请问怎么实现控制,一层一层回退?

无法加载Flutter页面的WebView

BoostFlutterActivity能够正常打开Flutter页面,但是页面的WebView无法加载,一直在转圈,而我直接加载该Flutter页面,可以正常显示WebView页面
image

image

flutter 侧滑返回到原生界面

一个页面中存在了一个横向的 listview, 侧滑返回到原生出现手势冲突,有方法解决么,有使用到 FDFullscreenPopGesture, listview 的右滑手势无效了。直接就返回到原生页面

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.