alibaba / flutter_boost

FlutterBoost is a Flutter plugin which enables hybrid integration of Flutter for your existing native apps with minimum efforts
https://github.com/alibaba/flutter_boost
MIT License
6.9k stars 1.22k forks source link

多个FlutterrFragment嵌入Android原生Viewpager,第一个FlutterView不显示 #847

Closed xlyasdasd closed 2 years ago

xlyasdasd commented 3 years ago

Steps to Reproduce

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.business_basketball_flutter_main)
    for (i in 0 until 2) {
        val fragment = FlutterFragment.withNewEngine().url("flutter://basketball/test/login").build<FlutterFragment>()
        mFragments.add(fragment)
    }
    mFragPagerAdapter = MyFragPagerAdapter(supportFragmentManager, mFragments)
    viewPager.adapter = mFragPagerAdapter
    mFragPagerAdapter.notifyDataSetChanged()
}

private class MyFragPagerAdapter(fm: FragmentManager?, private val fragments: List<Fragment>) : FragmentPagerAdapter(fm) {
    override fun getItem(position: Int): Fragment {
        return fragments[position]
    }

    override fun getCount(): Int {
        return fragments.size
    }
}
  1. 使用上面Demo运行任意Flutter页面
  2. 观察发现ViewPager第一个页面显示纯白屏(无Debug标签),第二个页面正常显示

Flutter Boost Version: task/task_v1.12.13_support_hotfixes Target Platform: Android Target OS version/browser: 10 Devices: OPPO A92s

Logs

add your crash log or something else.

[✓] Flutter (Channel v1.12.13-hotfixes, v1.12.13+hotfix.9, on Mac OS X 10.15.5
    19F101, locale zh-Hans-CN)
    • Flutter version 1.12.13+hotfix.9 at /Users/xuleyuan/sdk/flutter
    • Framework revision f139b11009 (5 months ago), 2020-03-30 13:57:30 -0700
    • Engine revision af51afceb8
    • Dart version 2.7.2

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.1)
    • Android SDK at /Users/xuleyuan/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling
      support)
    • Platform android-30, build-tools 30.0.1
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.6, Build version 11E708
    • CocoaPods version 1.9.3

[✓] Android Studio (version 4.0)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 48.1.2
    • Dart plugin version 193.7361
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6222593)

[!] IntelliJ IDEA Ultimate Edition (version 2020.1)
    • IntelliJ at /Applications/IntelliJ IDEA.app
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • For information about installing plugins, see
      https://flutter.dev/intellij-setup/#installing-the-plugins

[✓] Connected device (1 available)
    • PDKM00 • VWCULFNVT8WSCY4P • android-arm64 • Android 10 (API 29)

! Doctor found issues in 1 category.
liweiGe commented 3 years ago

我也遇到了,这什么玩意,只能用换成viewpager2 就能显示

aohanyao commented 3 years ago

显示是可以显示了,但是有没有遇到每次切换都会重新绘制一遍Flutter的?

KevinGong2013 commented 3 years ago

显示是可以显示了,但是有没有遇到每次切换都会重新绘制一遍Flutter的?

单引擎的flutter应用,某一特定时刻只能显示一个页面, 你在切换fragment的时候, 肯定需要重新渲染以显示不同的页面,这是 期望的 正常的 行为

aohanyao commented 3 years ago

显示是可以显示了,但是有没有遇到每次切换都会重新绘制一遍Flutter的?

单引擎的flutter应用,某一特定时刻只能显示一个页面, 你在切换fragment的时候, 肯定需要重新渲染以显示不同的页面,这是 期望的 正常的 行为

感谢回复,我这里列举一下我遇到的问题,希望能帮助后续的人。 1.使用ViewPager2可以达到预期进行显示 2.嵌入的Flutter中需要做细节优化,如:可见加载,需要配合原生进行修改。 3.Flutter中的动画需要进行细节优化:如不可见暂停,可见继续执行。