在Flutter iOS项目中添加SceneDelegate后出现黑屏

cwxwcias  于 12个月前  发布在  iOS
关注(0)|答案(2)|浏览(198)

在将SceneDelegate添加到我的Flutter iOS项目后,当应用程序启动时,我开始遇到黑屏。我通过创建一个名为SceneDelegate.swift的文件添加了SceneDelegate,代码如下。

import Flutter

@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    var window: UIWindow?
    
    func scene(
            _ scene: UIScene,
            willConnectTo session: UISceneSession,
            options connectionOptions: UIScene.ConnectionOptions
        ) {
            guard let windowScene = scene as? UIWindowScene else {
                return
            }

            guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
                preconditionFailure("unable to obtain AppDelegate")
            }

            let window = UIWindow(windowScene: windowScene)

            let flutterEngine = FlutterEngine(name: "FlutterEngine")
            flutterEngine.run()
            GeneratedPluginRegistrant.register(with: flutterEngine)
            
            let viewController = FlutterViewController(
                engine: flutterEngine,
                nibName: nil,
                bundle: nil
            )

            window.rootViewController = viewController
            window.makeKeyAndVisible()
            self.window = window
        }
}

字符串
我的AppDelegate看起来像这样

import Flutter
import UIKit

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {

    override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        
        guard #available(iOS 13, *) else{
            let flutterEngine = FlutterEngine(name: "FlutterEngine")
            flutterEngine.run()
            GeneratedPluginRegistrant.register(with: flutterEngine)
            return super.application(application, didFinishLaunchingWithOptions: launchOptions)
        }
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
    }
}


和我的信息。plist看起来像这样

.
    .
    .
    UIApplicationSceneManifest
    
        UIApplicationSupportsMultipleScenes
        
        UISceneConfigurations
        
            UIWindowSceneSessionRoleApplication
            
                
                    UISceneDelegateClassName
                    $(PRODUCT_MODULE_NAME).SceneDelegate
                
            
        
    
    .
    .
    .


我只支持iOS 14及以上版本。
我试着通过添加日志语句来查看SceneDelegate中的代码是否会被执行,代码确实会执行。尽管如此,屏幕还是黑的。
我也尝试在一个新的Flutter项目中重现这个问题,但无法做到。在新项目中一切正常。所以它是特定于我的Flutter项目的。我想知道我是否错过了向我的应用程序添加SceneDelegate所需的任何步骤。

z8dt9xmd

z8dt9xmd1#

注意事项:故事板中的视图控制器中的视图有一个默认的白色背景色。这是与编程视图控制器中的视图没有默认背景色相比的。如果你不设置视图的背景色,你最终会得到一个黑色窗口。所以在viewDidLoad方法中设置视图控制器的视图颜色,就像这样view.backgroundColor = .白色:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    view.backgroundColor = .white
}

字符串

pprl5pva

pprl5pva2#

一个大骗局:我厌倦了尝试在AppDelegate中显示另一个屏幕,然后在SceneDelegate中运行FlutterEngine。我花了一天的大部分时间在上面,但毫无进展。
我想到的解决方案是在Xcode中将LaunchScreen的背景设置为黑色。然后LaunchScreen在黑色背景上显示徽标(或其他),然后它变为黑色,然后屏幕出现。
我希望有人想出一个更好的解决方案,但我没有更多的周期燃烧的启动画面。

相关问题