swift - Bundle.main.resourcePath 在我的颤振插件中返回 nil,之前工作正常
问题描述
我制作了一个测试颤振应用程序,该应用程序使用我制作的插件,该插件仅检索我的 .app 中资源文件夹的路径并将其返回到我的飞镖代码。
这在使用插件生成的示例项目中完全可以正常工作,并且之前已与我的应用程序一起使用。在此之后我有一段时间没有使用该插件并且它一直没有使用,直到最近因为我现在实际使用它所以再次将它包含在我的代码中。现在该插件似乎不适用于我添加到的任何项目,即使是新制作的项目。
我的插件包含这个飞镖代码:
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;
}
}
这个快速代码:
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);
但是,这会返回以下错误:
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);
});
}
它没有问题。
推荐阅读
- node.js - 在 Node.js 中未定义引脚
- acumatica - Acumatica 采购订单收据 API 找不到 PO 订单 Nbr
- node.js - Handlebar 表达式迭代对象数组
- python - 类型提示与鸭子类型
- json - 在 AWS 电子邮件模板中导入 HTML 文件
- html - HTML 网站未在 Internet Explorer 11 上加载
- javascript - javascript中的数组对象中的foreach我无法访问元素
- python - Python 返回类型转换为 C++
- git - 如何使用 Git 在本地撤消所有操作?
- c# - 在 Unity 中,当我编写 Debug.Log(" ") 时出现错误,提示 UnityEngine.Log 和 System.Log 之间存在差异。我该如何解决?