Bundle.main.resourcePath 在我的 flutter 插件中返回 nil,之前工作正常

Bundle.main.resourcePath returning nil in my flutter plugin, after working fine previously

我制作了一个测试 flutter 应用程序,它使用我制作的插件,该插件仅检索我的 .app 中资源文件夹的路径,并将其 returns 到我的 dart 代码。

这在使用插件生成的示例项目中工作得很好,并且以前与我的应用程序一起工作过。在此之后我有一段时间没有使用该插件并且它一直未被使用,直到最近因为我现在实际使用它所以再次将它包含在我的代码中。现在这个插件似乎不适用于我添加它的任何项目,即使是新制作的项目。

我的插件由以下飞镖代码组成:

import 'dart:async';

import 'package:flutter/services.dart';

class MacBundleUtils {
  static const MethodChannel _channel =
      const MethodChannel('mac_bundle_utils');

  static Future<String?> get getResourcesDir async {
    final String? resDir = await _channel.invokeMethod('getResourcesDir');
    return resDir;
  }
}

和这个 swift 代码:

import Cocoa
import FlutterMacOS

public class MacBundleUtilsPlugin: NSObject, FlutterPlugin {
  public static func register(with registrar: FlutterPluginRegistrar) {
    let channel = FlutterMethodChannel(name: "mac_bundle_utils", binaryMessenger: registrar.messenger)
    let instance = MacBundleUtilsPlugin()
    registrar.addMethodCallDelegate(instance, channel: channel)
  }

  public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
    switch call.method {
    case "getResourcesDir":
        result(Bundle.main.resourcePath)
    default:
      result(FlutterMethodNotImplemented)
    }
  }
}

然后我尝试检索此路径并使用这一行将其打印到控制台:

print(await MacBundleUtils.getResourcesDir);

然而returns出现以下错误:

Unhandled Exception: Null check operator used on a null value

我这里哪里做错了?

谢谢。

实际上,我在发布这个问题后不久就找到了解决方案。 我试图过早地访问 Bundle.main,因为我的代码在 void main() 中。 在使用 initState() 加载后移动我的代码以执行后,如下所示:

@override
void initState() { //for linux app, tells user if permissions aren't correct
  super.initState();

  WidgetsBinding.instance!.addPostFrameCallback((_) async {
    print(await MacBundleUtils.getResourcesDir);
  });
}

它没有问题。