diff --git a/docs/install.md b/docs/install.md
index 488df06a..b3cf5a40 100755
--- a/docs/install.md
+++ b/docs/install.md
@@ -167,8 +167,6 @@ implementation project(':flutter_boost')
-
-
```
然后点击右上角的sync同步一下,就会开始一些下载和同步的进程,等待完成
@@ -181,23 +179,41 @@ public class App extends Application {
public void onCreate() {
super.onCreate();
FlutterBoost.instance().setup(this, new FlutterBoostDelegate() {
+
+ private void startActivityForResult(Intent intent, int requestCode) {
+ FlutterViewContainer topContainer = FlutterBoost.instance().getTopContainer();
+ if (topContainer instanceof FlutterFragment) {
+ //如果是从FlutterBoostFragment唤起的新页面,只有使用FlutterFragment进行start,才能收到result
+ ((FlutterFragment) topContainer).startActivityForResult(intent, requestCode);
+ } else if (topContainer instanceof FlutterActivity) {
+ ((FlutterActivity) topContainer).startActivityForResult(intent, requestCode);
+ } else {
+ FlutterBoost.instance().currentActivity().startActivityForResult(intent,
+ requestCode);
+ }
+ }
+
@Override
public void pushNativeRoute(FlutterBoostRouteOptions options) {
//这里根据options.pageName来判断你想跳转哪个页面,这里简单给一个
- Intent intent = new Intent(FlutterBoost.instance().currentActivity(), YourTargetAcitvity.class);
- FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
+ //TODO 这里的currentActivity在FlutterBoost延迟初始化+第一个页面是FlutterBoostFragment时,可能存在NPE,
+ //TODO 建议使用自己管理的堆栈的顶层Activity
+ Context context = FlutterBoost.instance().currentActivity();
+ Intent intent = new Intent(context, YourTargetAcitvity.class);
+ startActivityForResult(intent, options.requestCode());
}
@Override
public void pushFlutterRoute(FlutterBoostRouteOptions options) {
+ Context context = FlutterBoost.instance().currentActivity();
Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(FlutterBoostActivity.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);
+ .build(context);
+ startActivityForResult(intent, options.requestCode();
}
}, engine -> {
});
@@ -325,21 +341,3 @@ FlutterBoost.instance().setup(application, delegate: delegate) { engine in
```
到此为止,所有的前置内容均已完成
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/example/android/app/src/main/java/com/idlefish/flutterboost/example/MyFlutterBoostDelegate.java b/example/android/app/src/main/java/com/idlefish/flutterboost/example/MyFlutterBoostDelegate.java
index 0c786dea..687d84a7 100644
--- a/example/android/app/src/main/java/com/idlefish/flutterboost/example/MyFlutterBoostDelegate.java
+++ b/example/android/app/src/main/java/com/idlefish/flutterboost/example/MyFlutterBoostDelegate.java
@@ -1,5 +1,6 @@
package com.idlefish.flutterboost.example;
+import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
@@ -7,36 +8,68 @@
import com.idlefish.flutterboost.FlutterBoostDelegate;
import com.idlefish.flutterboost.FlutterBoostRouteOptions;
import com.idlefish.flutterboost.containers.FlutterBoostActivity;
+import com.idlefish.flutterboost.containers.FlutterViewContainer;
+import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.android.FlutterActivityLaunchConfigs.BackgroundMode;
+import io.flutter.embedding.android.FlutterFragment;
public class MyFlutterBoostDelegate implements FlutterBoostDelegate {
+ private Context getCurrentContext() {
+ FlutterViewContainer topContainer = FlutterBoost.instance().getTopContainer();
+ Context context = null;
+ if (topContainer != null) {
+ context = topContainer.getContextActivity();
+ }
+ if (context == null) {
+ context = FlutterBoost.instance().currentActivity();
+ }
+ return context;
+ }
+
+ private void startActivityForResult(Intent intent, int requestCode) {
+ FlutterViewContainer topContainer = FlutterBoost.instance().getTopContainer();
+ if (topContainer instanceof FlutterFragment) {
+ //如果是从FlutterBoostFragment唤起的新页面,只有使用FlutterFragment进行start,才能收到result
+ ((FlutterFragment) topContainer).startActivityForResult(intent, requestCode);
+ } else if (topContainer instanceof FlutterActivity) {
+ ((FlutterActivity) topContainer).startActivityForResult(intent, requestCode);
+ } else {
+ FlutterBoost.instance().currentActivity().startActivityForResult(intent,
+ requestCode);
+ }
+ }
+
@Override
public void pushNativeRoute(FlutterBoostRouteOptions options) {
- Intent intent = new Intent(FlutterBoost.instance().currentActivity(), NativePageActivity.class);
- FlutterBoost.instance().currentActivity().startActivityForResult(intent, options.requestCode());
+ Context context = getCurrentContext();
+ Intent intent = new Intent(context, NativePageActivity.class);
+ startActivityForResult(intent, options.requestCode());
}
@Override
public void pushFlutterRoute(FlutterBoostRouteOptions options) {
- Class extends FlutterBoostActivity> activityClass = options.opaque() ? FlutterBoostActivity.class : TransparencyPageActivity.class;
+ Class extends FlutterBoostActivity> activityClass = options.opaque() ?
+ FlutterBoostActivity.class : TransparencyPageActivity.class;
Intent intent = new FlutterBoostActivity.CachedEngineIntentBuilder(activityClass)
.destroyEngineWithActivity(false)
// 注意:这里需要回传dart带过来的uniqueId,否则页面退出时传参可能失败。
// 但,如果是从Native打开Flutter页面,请不要给uniqueId赋*任何值*!!!
.uniqueId(options.uniqueId())
- .backgroundMode(options.opaque() ? BackgroundMode.opaque : BackgroundMode.transparent)
+ .backgroundMode(options.opaque() ? BackgroundMode.opaque :
+ BackgroundMode.transparent)
.url(options.pageName())
.urlParams(options.arguments())
- .build(FlutterBoost.instance().currentActivity());
- FlutterBoost.instance().currentActivity().startActivity(intent);
+ .build(getCurrentContext());
+ startActivityForResult(intent, options.requestCode());
}
@Override
public boolean popRoute(FlutterBoostRouteOptions options) {
//自定义popRoute处理逻辑,如果不想走默认处理逻辑返回true进行拦截
- Toast.makeText(FlutterBoost.instance().currentActivity().getApplicationContext(), "Add customized popRoute handler here", Toast.LENGTH_SHORT).show();
+ Toast.makeText(FlutterBoost.instance().currentActivity().getApplicationContext(), "Add " +
+ "customized popRoute handler here", Toast.LENGTH_SHORT).show();
return false;
}
}
diff --git a/example/lib/tab/simple_widget.dart b/example/lib/tab/simple_widget.dart
index f091f47c..e7612ea9 100644
--- a/example/lib/tab/simple_widget.dart
+++ b/example/lib/tab/simple_widget.dart
@@ -94,7 +94,14 @@ class _SimpleWidgetState extends State
'open native page',
style: TextStyle(fontSize: 22.0, color: Colors.black),
)),
- onTap: () => BoostNavigator.instance.push("native"),
+ onTap: () => BoostNavigator.instance.push("native").then(
+ (value) {
+ if (mounted) {
+ ScaffoldMessenger.of(context)
+ ..removeCurrentSnackBar()
+ ..showSnackBar(SnackBar(content: Text("$value")));
+ }
+ }),
),
InkWell(
child: Container(