Flutter混合开发:启动黑屏处理

2,689 阅读3分钟
登录 注册写文章 首页下载APP

Flutter混合开发:启动黑屏处理

静默加载 关注赞赏支持

Flutter混合开发:启动黑屏处理

0.579 字数 213阅读 348

上一篇 Flutter混合开发:Android接入Flutter 我们讲到在 Flutter混合开发 中主要有、有 addView (页面局部Flutter) 和 setContentView (整个页面Flutter)两种方式。这两种方式在启动页面的时候都会遇到 FlutterView 出现黑屏的情况。

解决思路

延迟 FlutterView 的加载时间。

setContentView

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        View flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root1");
        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
        setContentView(flutterView, layout);
    }
}

这中方式目前没有找到一种很好的方式推迟 FlutterView 的加载时间。

addView

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FrameLayout frameLayout = findViewById(R.id.flutter_root);
        View flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root1");
        FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
        frameLayout.addView(flutterView, layout);
    }
}

这种情况我们可以使用多种方式进行 FlutterView 加载的延迟。

检测FlutterView的第一帧

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      FrameLayout frameLayout = findViewById(R.id.flutter_root);
      frameLayout.setVisibility(View.INVISIBLE);
      FlutterView flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root");
      FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);

      FlutterView.FirstFrameListener listeners = () -> frameLayout.setVisibility(View.VISIBLE);
      flutterView.addFirstFrameListener(listeners);
      frameLayout.addView(flutterView, layout);
  }
}

在View的post方法中延迟执行FlutterView的添加

public class MainActivity extends AppCompatActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      FrameLayout frameLayout = findViewById(R.id.flutter_root);
      FlutterView flutterView = Flutter.createView(MainActivity.this, getLifecycle(), "root");
      FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
      getWindow().getDecorView().post(() -> frameLayout.addView(flutterView, layout));
  }
}

文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦

想阅读作者的更多文章,可以查看我 个人博客 和公共号:

振兴书城 2人点赞 Flutter   静默加载 拥有110钻 (约13.03元) 关注 "小礼物走一走,来简书关注我" 赞赏 广告

推荐阅读更多精彩内容

广告 静默加载关注 拥有110钻 (约13.03元) Java版的7种单例模式 阅读 8 Dart和Java通信源码分析和实践 阅读 86 从JNI_OnLoad看so的加载 阅读 59

精彩继续

李敖前妻胡因梦:遇到一个渣男,她整整消化了40年 阅读 14902 日本最省女孩15年买3栋豪宅:比赚钱更重要的,是做好这3件事 阅读 22986 广告 评论1 赞2 2赞3赞 赞赏