我用以下方法创建了一个flutter插件:
flutter create --template plugin flutter_plugin
Run Code Online (Sandbox Code Playgroud)
我已经将aar文件放入flutter_plugin / android / src / main / libs文件夹中,
我已经修改了flutter_plugin / android / build.gradle
并将rootProject.allprojects部分更改为
rootProject.allprojects {
repositories {
google()
jcenter()
flatDir {
dirs "src/main/libs"
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在android {}之后添加了依赖项部分:
dependencies {
implementation (name:"mylib",ext:"aar")
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试运行时:flutter run
我收到gradle异常,显然它试图在示例目录:example / src / main / libs / mylib.aar中寻找我的mylib.aar并失败。
我可以将lib放在示例dir中,但我认为这不是正确的方法,因为我希望我的aar成为插件的一部分。
我创建了一个小的Flutter插件,可以用来监视Flutter应用程序中的位置变化(来源:https://github.com/baseflowit/flutter-geolocator).在使用作为项目结构一部分的示例项目(由Flutter CLI生成)进行大量测试之后,我们决定发布该插件以使其可供全世界使用.
现在我们收到一些反馈,当您将在线Dart Packages repo中的软件包包含到Flutter App中时,iOS版本不会编译并返回以下异常:
/Users/maurits/Developer/flutter/.pub-cache/hosted/pub.dartlang.org/geolocator-0.0.2/ios/Classes/GeolocatorPlugin.m:2:9:
fatal error: 'geolocator/geolocator-Swift.h' file not found
Run Code Online (Sandbox Code Playgroud)
在调试模式下运行Flutter App时会发生此错误,但在使用iOS包时也会发生此错误flutter build ios --release.
我有点迷失这个错误的地方,因为example作为Geolocator项目一部分的应用程序没有任何问题.我知道该geolocator/geolocator-Swift.h文件是自动生成的,所以对我而言,文件似乎不会在最终的Dart包中结束.要运行最终的Dart包,我运行以下命令:
flutter packages pub publish
这是输出flutter doctor -v:
[?] Flutter (Channel beta, v0.5.1, on Mac OS X 10.13.5 17F77, locale en-NL)
• Flutter version 0.5.1 at /Users/maurits/Developer/flutter
• Framework revision c7ea3ca377 (4 weeks ago), 2018-05-29 21:07:33 +0200
• Engine revision 1ed25ca7b7
• Dart version 2.0.0-dev.58.0.flutter-f981f09760
[?] Android toolchain …Run Code Online (Sandbox Code Playgroud) 我正在尝试制作一个 flutter 插件,所以我通过https://flutter.dev/docs/development/packages-and-plugins/developing-packages 上提供的步骤创建了一个插件。当我尝试运行 ios 示例时出现错误。下面是我在运行 ios 示例应用程序时得到的日志。
谁能帮我这个?
Running pod install...
CocoaPods' output:
Analyzing dependencies
Inspecting targets to integrate
Using `ARCHS` setting to build architectures of target `Pods-Runner`: (``)
Fetching external sources
-> Fetching podspec for `Flutter` from `.symlinks/flutter/ios`
-> Fetching podspec for `flutter_plugin` from `.symlinks/plugins/flutter_plugin/ios`
Resolving dependencies of `Podfile`
Comparing resolved specification to the sandbox manifest
A Flutter
A flutter_plugin
Downloading dependencies
-> Installing Flutter (1.0.0)
-> Installing flutter_plugin (0.0.1)
- Running pre-install hooks
[!] Unable …Run Code Online (Sandbox Code Playgroud) 我是 Flutter 的新手。我有本机框架(iOS 和 Android),可以在本机项目中成功运行。我需要创建这些框架并将其合并到插件中,以便可以在任何 Flutter 项目中使用该插件来使用框架的功能。
实现这一目标的任何帮助都将是有益和可观的。
谢谢。
我想对插件进行一些更改。对于安卓部分,一切都清楚了。但是如何打开插件的 iOs 部分呢?没有 Xcode 项目,只有几个 .h 和 .m 文件。
如何在 Xcode 中打开 iOs 插件?
https://github.com/flutter/plugins/tree/master/packages/video_player/video_player/ios
我想编辑一个插件以适应我的应用程序。我只是通过 CTRL+单击 flutter 中的插件导入代码并编辑所需的 .dart 文件来做到这一点。
现在我想知道,这是否可以在未来被覆盖。
路径(我编辑 dart 文件的地方)是:
flutter > .pub-cache > hosted > pub.dartlang.org > PLUGIN NAME > lib > templates > FILENAME.dart
Run Code Online (Sandbox Code Playgroud)
这是编辑插件的正确方法吗?或者我应该在哪里编辑 .dart 文件?
感谢帮助!
我正在 Flutter 应用程序中开发本机 Android 小部件。其中有刷新按钮,点击后我必须在 Flutter 代码中调用一个方法。我正在使用 Flutter Method Channel 进行通信,并且当应用程序处于前台时它工作正常。但是当应用程序最小化或关闭时它不起作用。我收到错误PlatformException(NO_ACTIVITY, null, null)。下面是我的代码。
安卓(AppWidgetProvider)
if (methodChannel == null && context != null) {
FlutterMain.startInitialization(context)
FlutterMain.ensureInitializationComplete(context, arrayOf())
// Instantiate a FlutterEngine.
val engine = FlutterEngine(context.applicationContext)
// Define a DartEntrypoint
val entrypoint: DartEntrypoint = DartEntrypoint.createDefault()
// Execute the DartEntrypoint within the FlutterEngine.
engine.dartExecutor.executeDartEntrypoint(entrypoint)
// Register Plugins when in background. When there
// is already an engine running, this will be ignored (although there will be some
// warnings in the …Run Code Online (Sandbox Code Playgroud) 假设您正在用 Swift 编写 Flutter 插件的 IOS 组件。
您已在 XCode 中打开 MyFlutterPlugin.swift 文件。
为了让我们知道我们在谈论同一件事,文件如下所示:
public class MyFlutterPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "my_flutter_plugin", binaryMessenger: registrar.messenger())
let instance = SwiftMetronomeFlutterPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
该文件存在于磁盘上:
[your_plugin_project_name]/ios/classes/MyFlutterPlugin.swift
如何添加资源,例如音频 (WAV) 文件,以便可以从 MyFlutterPlugin.swift 中引用它?
在普通(非 Flutter)IOS 应用程序中,我只需将 WAV 文件拖到 XCode 中(它与 ViewController.swift 位于同一文件夹中)即可完成此操作,并从 ViewController 中引用它,如下所示:
let clack_Path = Bundle.main.path(forResource: "clack", ofType: "wav")
let …Run Code Online (Sandbox Code Playgroud) 我们想要定义一个可以从同一插件中的 Android 平台代码访问的 Flutter 资源。据称该文档位于此处。
请注意,我们不是在讨论 flutter 应用程序中的自定义平台代码——我们是从插件作者的角度讨论 flutter 插件代码。
因此,按照文档,我们从位于 [your_plugin_root_dir]\pubspec.yaml 的插件的 pubspec.yaml 文件开始,然后添加资产定义:
assets:
- assets/sound.wav
Run Code Online (Sandbox Code Playgroud)
这指向 [your_plugin_root_dir]\assets\sound.wav 中的现有文件
到目前为止一切都很好,但是我们遇到了一个问题:
当您在 Android studio 中创建新的 Flutter Plugin项目时,该插件的 Android Java 文件如下所示:
public class PluginTestPlugin implements FlutterPlugin, MethodCallHandler {
/// The MethodChannel that will the communication between Flutter and native Android
///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity …Run Code Online (Sandbox Code Playgroud) 我想开发一个 flutter 应用程序来搜索和下载 torrent 文件。搜索部分已完成,但现在我不知道如何实现下载功能。
我想下载 torrent 文件或磁力链接指向的实际文件。例如,我希望应用程序从给定的 torrent 文件或给定的磁力链接下载 Linux 发行版。
是否有任何插件,或者我需要自己构建它?如果我需要创建一个,那么如何?