alibaba / alibaba/flutter_boost

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

Open
#2,234 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Dart
Stars
7.2k
Forks
1.3k
PR merge metrics
No merged PRs in 30d

Description

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

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

### 解决方案

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by inspecting FlutterView.onProvideAutofillVirtualStructure and the TextInputPlugin lifecycle, then trace how CachedEngineFragmentBuilder and FlutterBoostFragment create and attach the engine. Reproduce Android autofill during fragment startup, and consider the issue done when autofill no longer crashes while the Flutter view is being initialized.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, dart, java, kotlin
Domain
mobile
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.