javascript - 如何在颤振中导入平台特定文件?
问题描述
我正在使用JS 包进行Flutter to JS
通信,反之亦然。当我尝试在网络上运行时它工作正常,但在尝试在移动模拟器中运行时出现错误。
我正在尝试这个
import 'package:flutter/material.dart'
if(dart.library.jqyery) 'common.dart';
但这开始对文件中的所有功能产生错误common. dart
这是common. dart
@JS()
library jquery;
import 'globals.dart';
import 'package:js/js.dart';
@JS('myCallDartToJSFunction')
external void myAlert(String str);
@JS('connectToSignalR')
external void connectToSignalR();
@JS("mySendMsgTSignalR")
external void myDartSendMsgTSignalR(String nam, String msg);
@JS('myCallJSToDart')
external set _myCallJSToDart(void Function(String str, int x) f);
@JS()
external void myCallJSToDart(String str, int x);
void _someDartFunction(String str, int x) {
print(str + x.toString());
msgFromSignalr = str;
}
@JS('messageFromSignalR')
external set _messageFromSignalR(void Function(String str) f);
@JS()
external void messageFromSignalR();
String _dartmessageFromSignalR(String str) {
}
void bindmain() {
_myCallJSToDart = allowInterop((text, x) => _someDartFunction(text, x));
_messageFromSignalR = allowInterop((str) => _dartmessageFromSignalR(str));
}
解决方案
在您的示例中flutter/material.dart
,您是在移动设备上导入的,这不会被接受为common.dart
. 在进行条件导入时,您应该始终提供 2 个相同的实现。例如,在您的情况下,这意味着创建一个文件,该文件common_mobile.dart
将实现与您相同的方法,common.dart
但什么也不做(甚至抛出 UnimplementedException),因为在您使用移动设备时不应调用它们。
我看到您正在内部创建一个库common.dart
,如果您想同时保留移动设备和 Web 实现,则不建议这样做,因为您将拥有 2 个同名的库。
应按如下方式进行条件导入:
import 'common_mobile.dart'
if (dart.library.js) 'common.dart' as commonUtils;
在此示例中,我默认导入文件common_mobile.dart
,但如果我使用的是网络版本(可以使用 验证if (dart.library.js)
),我正在导入common.dart
. 我正在添加as commonUtils
关键字以保护我对导入的调用。
现在以拨打电话myAlert
为例:
/// Making a web verification to ensure your call is only done when running on web.
if (kIsWeb) {
/// It should call the myAlert implementation from common.dart
commonUtils.myAlert('Test');
}
此外,我看到您的包不支持移动设备,这意味着如果存在与您的包直接相关的构建错误,无论您做什么,您都无法在移动设备上构建,您唯一的选择是将您的项目分成 2分支(一个仅限移动设备,另一个仅限 Web)以删除仅支持特定平台的软件包。
推荐阅读
- redux - 可能的错误:replaceReducer() fn 使用错误的参数重复操作
- c - 对于 10 个整数的数组,表达式 arr 和 &arr 是否相同?
- python - virtualenvwrapper mkvirtualenv 不工作但没有错误
- asp.net-mvc - 我应该怎么做才能将 datepicker 应用于此代码?
- python - 对数彩条?
- json - 在 Postman 中测试时出现三重嵌套 JSON 对象的语法错误
- php - 防止通过 AJAX 调用直接访问文件
- macos - 如何修复架构 x86_64 的错误未定义符号
- python - 用于列表或子列表中的项目
- c# - 如何检查浏览器对图像和视频的兼容性/支持?