From dd9d72e5e18f452e9db762350fd1d79775b92bff Mon Sep 17 00:00:00 2001
From: "yangwu.jia" <yangwu.jia@taobao.com>
Date: Mon, 11 Nov 2019 17:31:54 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DFLUTTER=5FACTIVITY=5FCREATED?=
 =?UTF-8?q?=20=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../flutterboost/FlutterBoostPlugin.java      |  9 +++--
 .../flutterboost/NewFlutterBoost.java         |  9 +++++
 .../containers/FlutterSplashView.java         | 38 +++++++++++++++++--
 lib/flutter_boost.dart                        | 21 ++++++++++
 4 files changed, 70 insertions(+), 7 deletions(-)

diff --git a/android/src/main/java/com/idlefish/flutterboost/FlutterBoostPlugin.java b/android/src/main/java/com/idlefish/flutterboost/FlutterBoostPlugin.java
index 42add68..b3e2cc2 100644
--- a/android/src/main/java/com/idlefish/flutterboost/FlutterBoostPlugin.java
+++ b/android/src/main/java/com/idlefish/flutterboost/FlutterBoostPlugin.java
@@ -1,14 +1,12 @@
 package com.idlefish.flutterboost;
 
+import android.os.Handler;
 import android.support.annotation.Nullable;
 
 import com.idlefish.flutterboost.interfaces.IContainerRecord;
 
 import java.io.Serializable;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import io.flutter.plugin.common.MethodCall;
 import io.flutter.plugin.common.MethodChannel;
@@ -217,6 +215,9 @@ public class FlutterBoostPlugin {
                         }
 
                         result.success(pageInfo);
+                        NewFlutterBoost.instance().setFlutterPostFrameCallTime(new Date().getTime());
+
+
                     } catch (Throwable t) {
                         result.error("no flutter page found!", t.getMessage(), t);
                     }
diff --git a/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java b/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
index 9ac4c02..6ea0b31 100644
--- a/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
+++ b/android/src/main/java/com/idlefish/flutterboost/NewFlutterBoost.java
@@ -31,6 +31,15 @@ public class NewFlutterBoost {
     private PluginRegistry mRegistry;
     static NewFlutterBoost sInstance = null;
 
+    private  long FlutterPostFrameCallTime=0;
+
+    public long getFlutterPostFrameCallTime(){
+        return FlutterPostFrameCallTime;
+    }
+
+    public void setFlutterPostFrameCallTime(long FlutterPostFrameCallTime){
+         this.FlutterPostFrameCallTime=FlutterPostFrameCallTime;
+    }
     public static NewFlutterBoost instance() {
         if (sInstance == null) {
             sInstance = new NewFlutterBoost();
diff --git a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterSplashView.java b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterSplashView.java
index c74382d..de60241 100644
--- a/android/src/main/java/com/idlefish/flutterboost/containers/FlutterSplashView.java
+++ b/android/src/main/java/com/idlefish/flutterboost/containers/FlutterSplashView.java
@@ -3,6 +3,7 @@ package com.idlefish.flutterboost.containers;
 import android.content.Context;
 import android.graphics.Color;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.support.annotation.NonNull;
@@ -18,6 +19,8 @@ import io.flutter.embedding.android.SplashScreen;
 import io.flutter.embedding.engine.FlutterEngine;
 import io.flutter.embedding.engine.renderer.OnFirstFrameRenderedListener;
 
+import java.util.Date;
+
 /**
  * {@code View} that displays a {@link SplashScreen} until a given {@link FlutterView}
  * renders its first frame.
@@ -39,7 +42,7 @@ public class FlutterSplashView extends FrameLayout {
     @Nullable
     private String previousCompletedSplashIsolate;
 
-    private boolean hasRendered=false;
+    private Handler handler = new Handler();
 
     @NonNull
     private final FlutterView.FlutterEngineAttachmentListener flutterEngineAttachmentListener = new FlutterView.FlutterEngineAttachmentListener() {
@@ -57,11 +60,40 @@ public class FlutterSplashView extends FrameLayout {
 
     @NonNull
     private final OnFirstFrameRenderedListener onFirstFrameRenderedListener = new OnFirstFrameRenderedListener() {
+        int i=0;
         @Override
         public void onFirstFrameRendered() {
-            if (splashScreen != null) {
-                transitionToFlutter();
+
+            if(NewFlutterBoost.instance().platform().whenEngineStart()== NewFlutterBoost.ConfigBuilder.FLUTTER_ACTIVITY_CREATED){
+                long now=new Date().getTime();
+                long flutterPostFrameCallTime=NewFlutterBoost.instance().getFlutterPostFrameCallTime();
+
+                if(flutterPostFrameCallTime!=0&& (now-flutterPostFrameCallTime)>800){
+                    if (splashScreen != null) {
+                        transitionToFlutter();
+                    }
+                    return;
+                }
+
+                handler.postDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        onFirstFrameRenderedListener.onFirstFrameRendered();
+                    }
+                }, 200);
+
+
+            }else{
+                if (splashScreen != null) {
+                    transitionToFlutter();
+                }
             }
+
+
+
+
+
+
         }
     };
 
diff --git a/lib/flutter_boost.dart b/lib/flutter_boost.dart
index 9b89677..e9093da 100755
--- a/lib/flutter_boost.dart
+++ b/lib/flutter_boost.dart
@@ -22,6 +22,7 @@
  * THE SOFTWARE.
  */
 import 'dart:async';
+import 'dart:io';
 
 import 'package:flutter/material.dart';
 import 'container/boost_container.dart';
@@ -60,6 +61,26 @@ class FlutterBoost {
         PrePushRoute prePush,
         PostPushRoute postPush}) {
 
+    if(Platform.isAndroid){
+
+      WidgetsBinding.instance.addPostFrameCallback((_){
+
+        singleton.channel.invokeMethod<Map>('pageOnStart').then((Map pageInfo){
+
+          if (pageInfo == null || pageInfo.isEmpty) return;
+
+          if (pageInfo.containsKey("name") &&
+              pageInfo.containsKey("params") &&
+              pageInfo.containsKey("uniqueId")) {
+
+            ContainerCoordinator.singleton.nativeContainerDidShow(
+                pageInfo["name"], pageInfo["params"], pageInfo["uniqueId"]);
+          }
+        });
+      });
+    }
+
+    
     return (BuildContext context, Widget child) {
       assert(child is Navigator, 'child must be Navigator, what is wrong?');
 
-- 
2.26.2