Skip to content

[Bug]: onProvideAutofillVirtualStructure自动填充导致的崩溃 #2234

@barryly

Description

@barryly

请描述遇到的问题,以及您所期望的正确的结果

java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.plugin.editing.TextInputPlugin.onProvideAutofillVirtualStructure(android.view.ViewStructure, int)' on a null object reference
at io.flutter.embedding.android.FlutterView.onProvideAutofillVirtualStructure(SourceFile:6)
at android.view.View.dispatchProvideStructure(View.java:10706)
at android.view.View.dispatchProvideAutofillStructure(View.java:10698)
at android.view.ViewGroup.dispatchProvideAutofillStructure(ViewGroup.java:3718)
at android.view.ViewGroup.dispatchProvideAutofillStructure(ViewGroup.java:3741)
at android.view.ViewGroup.dispatchProvideAutofillStructure(ViewGroup.java:3741)
at android.view.ViewGroup.dispatchProvideAutofillStructure(ViewGroup.java:3741)
at android.app.assist.AssistStructure$WindowNode.(AssistStructure.java:539)
at android.app.assist.AssistStructure.(AssistStructure.java:2371)
at android.app.ActivityThread.handleRequestAssistContextExtras(ActivityThread.java:4268)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2588)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:257)
at android.os.Looper.loop(Looper.java:368)
at android.app.ActivityThread.main(ActivityThread.java:8848)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:572)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049)

请说明如何操作会遇到上述问题

项目是混合开发的,就是首页有三个tab,每个tab里面都是一个继承FlutterBoostFragment后的Fragment,然后通过 meFlutterFragment =
FlutterBoostFragment.CachedEngineFragmentBuilder(MeFlutterFragment::class.java)
.url("me_page")
.urlParams(params)
.build()

这种方式去启动flutter里面的界面。

但现在发现在一些自动填充功能的手机上,会导致填充崩溃,java.lang.NullPointerException: Attempt to invoke virtual method 'void io.flutter.plugin.editing.TextInputPlugin.onProvideAutofillVirtualStructure(android.view.ViewStructure, int)' on a null object reference

查看代码发现FlutterView里面有这个
@OverRide
public void onProvideAutofillVirtualStructure(@nonnull ViewStructure structure, int flags) {
super.onProvideAutofillVirtualStructure(structure, flags);
textInputPlugin.onProvideAutofillVirtualStructure(structure, flags);
}

这里可能会有一些启动的时机不对导致textInputPlugin为空报错

请问有没有比较好的方法能够解决这个问题。

在下面填入关键复现代码


class MeFlutterFragment : FlutterBoostFragment() {
    private val uniqueId: String? = null

    override fun onResume() {
        super.onResume()
        CacheManager.getInstance().calcCacheSize(true)
        setStatusBarColor()
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val containerManager = FlutterContainerManager.instance()
        val top = containerManager.topContainer
        if(top!=null && top !is MeFlutterFragment){
            top.detachFromEngineIfNeeded()
        }
        return super.onCreateView(inflater, container, savedInstanceState)
    }


  meFlutterFragment =
            FlutterBoostFragment.CachedEngineFragmentBuilder(MeFlutterFragment::class.java)
                .url("me_page")
                .urlParams(params)
                .build()

flutterboost的版本是5.0.2

复现的平台

Android

Flutter SDK版本

3.22.2

FlutterBoost版本

5.0.2

是否延迟初始化FlutterBoost

No

解决方案

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions