flutter_boost
flutter_boost copied to clipboard
我flutter升级到最新 运行example_new 出现问题 Activity无法转换为ExclusiveAppComponent<Activity>
/flutter_boost-master/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java:167: 错误: 不兼容的类型: Activity无法转换为ExclusiveAppComponent<Activity> getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle());
我修改了下FlutterBoostActivity文件 在外层包裹了一层ExclusiveAppComponent
但又出现其他问题 , 我使用BoostNavigator.instance.pop(result); 在android原生界面得不到参数, 不知道和这个有没有关系.
@Zhaoss
可以考虑先暂时将 Flutter SDK 切换到2.5.x
请问下有兼容最新的Flutter SDK的计划吗?
同样的问题,升级了最新的flutter之后无法使用
@DavidMGT 作为临时解决方案,可以自己先「造」一个ExclusiveAppComponent,返回正确的Activity,应该可以工作。
@DavidMGT 作为临时解决方案,可以自己先「造」一个ExclusiveAppComponent,返回正确的Activity,应该可以工作。
临时解决方案,示例如下:
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java
index ab28533..1608eb5 100644
--- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java
+++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java
@@ -152,7 +152,7 @@ public class FlutterBoostActivity extends FlutterActivity implements FlutterView
private void performAttach() {
if (!isAttached) {
// Attach plugins to the activity.
- getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle());
+ getFlutterEngine().getActivityControlSurface().attachToActivity(delegate, getLifecycle());
if (platformPlugin == null) {
platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java
index b4ead66..5f954e6 100644
--- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java
+++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java
@@ -43,6 +43,17 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView
private boolean isAttached = false;
private boolean isFinishing = false;
+ class FakeExclusiveAppComponent implements io.flutter.embedding.android.ExclusiveAppComponent<Activity> {
+ public void detachFromFlutterEngine() {
+ // do nothing.
+ }
+
+ public Activity getAppComponent() {
+ return getActivity();
+ }
+ }
+ private FakeExclusiveAppComponent fakeAppComponent = new FakeExclusiveAppComponent();
+
// @Override
public void detachFromFlutterEngine() {
/**
@@ -303,7 +314,7 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView
private void performAttach() {
if (!isAttached) {
// Attach plugins to the activity.
- getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle());
+ getFlutterEngine().getActivityControlSurface().attachToActivity(fakeAppComponent, getLifecycle());
if (platformPlugin == null) {
platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
@DavidMGT 作为临时解决方案,可以自己先「造」一个ExclusiveAppComponent,返回正确的Activity,应该可以工作。
临时解决方案,示例如下:
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java index ab28533..1608eb5 100644 --- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java +++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java @@ -152,7 +152,7 @@ public class FlutterBoostActivity extends FlutterActivity implements FlutterView private void performAttach() { if (!isAttached) { // Attach plugins to the activity. - getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle()); + getFlutterEngine().getActivityControlSurface().attachToActivity(delegate, getLifecycle()); if (platformPlugin == null) { platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel()); diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java index b4ead66..5f954e6 100644 --- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java +++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java @@ -43,6 +43,17 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView private boolean isAttached = false; private boolean isFinishing = false; + class FakeExclusiveAppComponent implements io.flutter.embedding.android.ExclusiveAppComponent<Activity> { + public void detachFromFlutterEngine() { + // do nothing. + } + + public Activity getAppComponent() { + return getActivity(); + } + } + private FakeExclusiveAppComponent fakeAppComponent = new FakeExclusiveAppComponent(); + // @Override public void detachFromFlutterEngine() { /** @@ -303,7 +314,7 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView private void performAttach() { if (!isAttached) { // Attach plugins to the activity. - getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle()); + getFlutterEngine().getActivityControlSurface().attachToActivity(fakeAppComponent, getLifecycle()); if (platformPlugin == null) { platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
请问这个能出个release tag吗?
@DavidMGT 作为临时解决方案,可以自己先「造」一个ExclusiveAppComponent,返回正确的Activity,应该可以工作。
临时解决方案,示例如下:
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java index ab28533..1608eb5 100644 --- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java +++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostActivity.java @@ -152,7 +152,7 @@ public class FlutterBoostActivity extends FlutterActivity implements FlutterView private void performAttach() { if (!isAttached) { // Attach plugins to the activity. - getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle()); + getFlutterEngine().getActivityControlSurface().attachToActivity(delegate, getLifecycle()); if (platformPlugin == null) { platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel()); diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java index b4ead66..5f954e6 100644 --- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java +++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterBoostFragment.java @@ -43,6 +43,17 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView private boolean isAttached = false; private boolean isFinishing = false; + class FakeExclusiveAppComponent implements io.flutter.embedding.android.ExclusiveAppComponent<Activity> { + public void detachFromFlutterEngine() { + // do nothing. + } + + public Activity getAppComponent() { + return getActivity(); + } + } + private FakeExclusiveAppComponent fakeAppComponent = new FakeExclusiveAppComponent(); + // @Override public void detachFromFlutterEngine() { /** @@ -303,7 +314,7 @@ public class FlutterBoostFragment extends FlutterFragment implements FlutterView private void performAttach() { if (!isAttached) { // Attach plugins to the activity. - getFlutterEngine().getActivityControlSurface().attachToActivity(getActivity(), getLifecycle()); + getFlutterEngine().getActivityControlSurface().attachToActivity(fakeAppComponent, getLifecycle()); if (platformPlugin == null) { platformPlugin = new PlatformPlugin(getActivity(), getFlutterEngine().getPlatformChannel());
使用这个临时解决方案之后,进入Flutter页面 -- 退出Flutter页面 -- 再进入Flutter页面的时候,会报错,报错信息如下,你那边没这问题吗?
@0xZOne 这个临时解决方案怎么用的
这个问题还存在,建议写在install文档中,把坑明示出来。
这个问题真得没有更好的方案吗 好麻烦 各种适配
我也遇到了这个问题
我也遇到这个问题了
+1
这个是很严重的问题难道没人来解决下吗
@0xZOne , 我看了你的pr,后面你不是重新修改了吗?,你的最新修改是不是已经被合并进去了?
+1 求解决
@0xZOne , 我看了你的pr,后面你不是重新修改了吗?,你的最新修改是不是已经被合并进去了?
是的,已经合到官方主线了。 如果使用的是Flutter3.0的话,这个问题的修复方案,可以参考:https://github.com/0xZOne/flutter_boost/commit/40a79d5e6e0d76eb7128a65230d8ac3796f7ae3b
@0xZOne , 我看了你的pr,后面你不是重新修改了吗?,你的最新修改是不是已经被合并进去了?
是的,已经合到官方主线了。 如果使用的是Flutter3.0的话,这个问题的修复方案,可以参考:0xZOne@40a79d5
我现在升级到flutter 3.0,发现还是报错呢。
@edison0951 Flutter3.0虽然拥有了接口,但FlutterBoost这边也要做相应的修改才行。请参考:0xZOne@40a79d5
+1
我修改了下FlutterBoostActivity文件 在外层包裹了一层ExclusiveAppComponent 我现在用的是这个v3.0-null-safety-release.2.1,刚刚你发的这个修改是不是没合并进去?
我修改了下FlutterBoostActivity文件 在外层包裹了一层ExclusiveAppComponent 我现在用的是这个v3.0-null-safety-release.2.1,刚刚你发的这个修改是不是没合并进去?
这个修改: https://github.com/0xZOne/flutter_boost/commit/40a79d5e6e0d76eb7128a65230d8ac3796f7ae3b 是给需要的同学一个参考,没有合并到主线。
我修改了下FlutterBoostActivity文件 在外层包裹了一层ExclusiveAppComponent 我现在用的是这个v3.0-null-safety-release.2.1,刚刚你发的这个修改是不是没合并进去?
这个修改: 0xZOne@40a79d5 是给需要的同学一个参考,没有合并到主线。 我看了那个修改,应该会修改到源代码吧,这样后面升级就很困难了。
最新主线已经支持Flutter3.0