Flutter 从手机背景进入后,Flatter显示黑屏

Flutter 从手机背景进入后,Flatter显示黑屏,flutter,Flutter,只有在android上运行时,我才会遇到问题。当我隐藏应用程序,然后在不完全关闭的情况下再次打开它时,就会发生这种情况 该应用程序的基本功能是通过FlatterPlatformView显示Android Sceneform、SceneView或iOS Scenekit SCNView。我试过缓存引擎,但是运气不好,我没有主意了 以下是我的主要活动: private val database = Database(DatabaseDriverFactory(context)) p

只有在android上运行时,我才会遇到问题。当我隐藏应用程序,然后在不完全关闭的情况下再次打开它时,就会发生这种情况

该应用程序的基本功能是通过FlatterPlatformView显示Android Sceneform、SceneView或iOS Scenekit SCNView。我试过缓存引擎,但是运气不好,我没有主意了

以下是我的主要活动:

    private val database = Database(DatabaseDriverFactory(context))
    private lateinit var sceneViewFactory: FlutterSceneViewFactory

    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        registerSceneView(flutterEngine)

        super.configureFlutterEngine(flutterEngine)
    }

    private fun registerSceneView(flutterEngine: FlutterEngine) {
        val viewModel = FlutterSceneViewModel(database)
        sceneViewFactory = FlutterSceneViewFactory(flutterEngine.dartExecutor.binaryMessenger, viewModel)

        GeneratedPluginRegistrant.registerWith(flutterEngine)
        flutterEngine.platformViewsController.registry.registerViewFactory("SceneView", sceneViewFactory)

        FlutterEngineCache.getInstance().put("flutterEngine", flutterEngine)
    }
}
观点:

class FlutterSceneView(context: Context, private val viewModel: FlutterSceneViewModel): PlatformView {
    private val context = context
    private var sceneView = SceneView(context)

    override fun onFlutterViewAttached(flutterView: View) {
        setBIMScene()
        sceneView.resume()
        listenToBackgroundColor()
    }

    private fun setBIMScene() {
        ModelRenderable.builder()
                .setSource(context, R.raw.bimtest)
                .build()
                .thenAccept {
                    addNodeToScene(it)
                }
                .exceptionally {
                    val toast = Toast.makeText(context, "Unable to load BIM renderable", Toast.LENGTH_LONG)
                    toast.setGravity(Gravity.CENTER, 0, 0)
                    toast.show()
                    null
                }
    }

    private fun addNodeToScene(model: ModelRenderable) {
        val transformationSystem = makeTransformationSystem()
        val dragTransformableNode = DragTransformableNode(3f, transformationSystem)
        dragTransformableNode.renderable = model
        sceneView.scene?.addChild(dragTransformableNode)

        dragTransformableNode.select()
        sceneView.scene
                ?.addOnPeekTouchListener { hitTestResult: HitTestResult?, motionEvent: MotionEvent? ->
                    transformationSystem.onTouch(
                            hitTestResult,
                            motionEvent
                    )
                }
    }

    private fun makeTransformationSystem(): TransformationSystem {
        val footprintSelectionVisualizer = FootprintSelectionVisualizer()
        return TransformationSystem(context.resources.displayMetrics, footprintSelectionVisualizer)
    }

    private fun listenToBackgroundColor() {
        viewModel.colorFlow.onEach {
            val newColor = Color.parseColor(it)
            sceneView.setBackgroundColor(newColor)
        }.launchIn(viewModel.viewModelScope)
    }

    override fun getView(): View {
        return sceneView
    }

    override fun dispose() {
        sceneView.destroy()
    }
}
以及它在main.dart中的添加方式:

class BIMHomePage extends StatefulWidget {
  BIMHomePage({Key key, this.viewModel}) : super(key: key);

  final BIMHomePageViewModelType viewModel;

  Widget getPlatformSceneView() {
    final String viewType = "SceneView";
    if (Platform.isAndroid) {
      return AndroidView(viewType: viewType);
    } else if (Platform.isIOS) {
      return UiKitView(viewType: viewType);
    } else {
      return Center(child: Text("Platform view not supported"));
    }
  }

  @override
  BIMHomePageState createState() => BIMHomePageState(viewModel: viewModel, platformSceneView: getPlatformSceneView());
}

class BIMHomePageState extends State<BIMHomePage> {
  BIMHomePageState({this.viewModel, this.platformSceneView}) : super();

  final BIMHomePageViewModelType viewModel;

  final Widget platformSceneView;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: platformSceneView
    );
  }
}
class扩展StatefulWidget{
BIMHomePage({Key,this.viewModel}):super(Key:Key);
最终的BIMHomePageViewModelType视图模型;
小部件getPlatformSceneView(){
最终字符串viewType=“SceneView”;
if(Platform.isAndroid){
返回AndroidView(viewType:viewType);
}else if(Platform.isIOS){
返回UiKitView(viewType:viewType);
}否则{
返回中心(子项:文本(“不支持平台视图”);
}
}
@凌驾
BIMHomePageState createState()=>BIMHomePageState(viewModel:viewModel,platformSceneView:getPlatformSceneView());
}
类BIMHomePageState扩展了状态{
BIMHomePageState({this.viewModel,this.platformSceneView}):super();
最终的BIMHomePageViewModelType视图模型;
最终小部件平台SceneView;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:platformSceneView
);
}
}
整个项目是一个弗兰肯斯坦应用程序,它包含了Native、Flatter、Kotlin多平台和SQLDelight,我只是出于好奇而制作的

任何帮助或想法都会令人惊讶的,谢谢

class BIMHomePage extends StatefulWidget {
  BIMHomePage({Key key, this.viewModel}) : super(key: key);

  final BIMHomePageViewModelType viewModel;

  Widget getPlatformSceneView() {
    final String viewType = "SceneView";
    if (Platform.isAndroid) {
      return AndroidView(viewType: viewType);
    } else if (Platform.isIOS) {
      return UiKitView(viewType: viewType);
    } else {
      return Center(child: Text("Platform view not supported"));
    }
  }

  @override
  BIMHomePageState createState() => BIMHomePageState(viewModel: viewModel, platformSceneView: getPlatformSceneView());
}

class BIMHomePageState extends State<BIMHomePage> {
  BIMHomePageState({this.viewModel, this.platformSceneView}) : super();

  final BIMHomePageViewModelType viewModel;

  final Widget platformSceneView;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: platformSceneView
    );
  }
}