alibaba / alibaba/flutter_boost
[Bug]: onProvideAutofillVirtualStructure自动填充导致的崩溃
- 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