我正在构建一个Flutter项目,并且在单个项目中集成Web和移动的代码时遇到了问题。我想在我的移动的代码中使用摩尔和Moor_FFI,但是即使我的web(main.dart)和移动代码(main.dev.dart)的入口点被配置为不同的调试,它仍然试图编译web的移动代码。这会导致一个问题,因为FFI和其他Dart插件目前在Flutter Web上不受支持,导致大量错误消息。
Error compiling dartdevc module:ffi|lib/ffi.ddc.js
packages/ffi/src/utf8.dart:6:8: Error: Not found: 'dart:ffi'
import 'dart:ffi';
^
packages/ffi/src/utf16.dart:6:8: Error: Not found: 'dart:ffi'
import 'dart:ffi';
^
packages/ffi/src/allocation.dart:5:8: Error: Not found: 'dart:ffi'
import 'dart:ffi';
^
packages/ffi/src/utf8.dart:23:20: Error: Type 'Struct' not found.
class Utf8 extends Struct {
^^^^^^
packages/ffi/src/utf8.dart:26:21: Error: Type 'Pointer' not found.
static int strlen(Pointer<Utf8> string) {
^^^^^^^
packages/ffi/src/utf8.dart:26:21: Error: Expected 0 type arguments.
static int strlen(Pointer<Utf8> string) {
^
packages/ffi/src/utf8.dart:41:26: Error: Type 'Pointer' not found.
static String fromUtf8(Pointer<Utf8> string) {
^^^^^^^
packages/ffi/src/utf8.dart:41:26: Error: Expected 0 type arguments.
static String fromUtf8(Pointer<Utf8> string) {
^
packages/ffi/src/utf8.dart:54:10: Error: Type 'Pointer' not found.
static Pointer<Utf8> toUtf8(String string) {
^^^^^^^
packages/ffi/src/utf8.dart:54:10: Error: Expected 0 type arguments.
static Pointer<Utf8> toUtf8(String string) {
^
packages/ffi/src/utf16.dart:16:21: Error: Type 'Struct' not found.
class Utf16 extends Struct {
^^^^^^
packages/ffi/src/utf16.dart:24:10: Error: Type 'Pointer' not found.
static Pointer<Utf16> toUtf16(String s) {
^^^^^^^
packages/ffi/src/utf16.dart:24:10: Error: Expected 0 type arguments.
static Pointer<Utf16> toUtf16(String s) {
^
packages/ffi/src/allocation.dart:9:7: Error: Type 'DynamicLibrary' not found.
final DynamicLibrary stdlib = Platform.isWindows
^^^^^^^^^^^^^^
packages/ffi/src/allocation.dart:13:29: Error: Type 'Pointer' not found.
typedef PosixMallocNative = Pointer Function(IntPtr);
^^^^^^^
packages/ffi/src/allocation.dart:13:46: Error: Type 'IntPtr' not found.
typedef PosixMallocNative = Pointer Function(IntPtr);
^^^^^^
packages/ffi/src/allocation.dart:14:23: Error: Type 'Pointer' not found.
typedef PosixMalloc = Pointer Function(int);
^^^^^^^
packages/ffi/src/allocation.dart:18:27: Error: Type 'Void' not found.
typedef PosixFreeNative = Void Function(Pointer);
^^^^
packages/ffi/src/allocation.dart:18:41: Error: Type 'Pointer' not found.
typedef PosixFreeNative = Void Function(Pointer);
^^^^^^^
packages/ffi/src/allocation.dart:19:35: Error: Type 'Pointer' not found.
typedef PosixFree = void Function(Pointer);
^^^^^^^
packages/ffi/src/allocation.dart:23:31: Error: Type 'Pointer' not found.
typedef WinGetProcessHeapFn = Pointer Function();
^^^^^^^
packages/ffi/src/allocation.dart:26:7: Error: Type 'Pointer' not found.
final Pointer processHeap = winGetProcessHeap();
^^^^^^^
And so on.....
有没有什么方法可以配置编译器,使其只为相应的运行构建与Web或移动的相关的文件?
供参考:Github repo中重新创建了错误:https://github.com/JoshMarkF/MoorFFIIntegrationDemo
3条答案
按热度按时间w1e3prcc1#
编辑
flutter build web
和flutter run -d chrome
都工作正常。因为web UI代码
(webui.dart)
和移动的UI代码(mobileui.dart)
在不同的dart文件中,所以这两个文件可以有不同的
import
您可以复制粘贴运行3以下三个文件,
main.dart
,webui.dart
和mobileui.dart
您可以使用
conditional import
来分离Web和移动的的不同实现因此Web和移动的可能具有完全不同逻辑
前缀为
multiPlatform
的代码段调用使用
Android Studio
时的工作演示与Android Emulator
和Chrome
一起运行main.dart
mobileui.dart
webui.dart
hgb9j2n62#
web_ffi:^0.7.2在pubspec.yaml中的依赖项中并导入此文件。import 'package:web_ffi/web_ffi.dart';
它将分别打开Web和移动终端。
au9on6nz3#
您还需要修复.pub-cache的任何依赖项,插件相关的问题。运行以下命令清理您的长笛和修复您的酒吧缓存
这两个命令将解决大多数插件,依赖关系相关的问题。