Flutter本地功能调用插件pilisp_native的使用
Flutter本地功能调用插件pilisp_native的使用
PiLisp 是一种受 Clojure 启发的解释性 Lisp。
注意:此项目仍处于 Alpha 阶段,功能较多且可能会发生变化。
pilisp_native
是基于核心 PiLisp 的扩展项目,利用了仅在 Dart 原生编译目标中可用的功能和包。
这是 pub.dev
上的 pilisp_native
包。
功能
查看 <code>pilisp_native_pilisp.dart</code>
中定义的核心 PiLisp 定义,这些定义在此包中被重新定义或扩展。
这是 pub.dev
上的 pilisp
包。
使用方法
1. 下载并使用
1.1 独立命令行工具
从 发布页面 下载适用于您平台的最新版本,并运行 pl
可执行文件:
$ pl
pl>
运行以下命令查看所有选项:
$ pl help
Run a PiLisp REPL, or try the subcommands for more options.
Usage: pl <command> [arguments]
Global options:
-h, --help Print this usage information.
Available commands:
eval Evaluate PiLisp code passed as arguments.
load Load PiLisp code saved in files.
repl Start a PiLisp REPL.
Run "pl help <command>" for more information about a command.
1.2 在 Dart 项目中使用
将 pilisp
添加到您的 Dart 项目中:
dart pub add pilisp
然后,您可以使用 PiLisp.loadString
来读取和评估程序源代码:
import 'package:pilisp/pilisp.dart';
void main() {
final result = PiLisp.loadString('(+ 1 2 3 4)');
print(result); // 输出: 10
}
示例代码
以下是一个完整的示例,展示如何在 Flutter 中使用 pilisp_native
插件:
import 'package:flutter/material.dart';
import 'package:pilisp/pilisp.dart';
import 'package:pilisp_native/pilisp_native.dart' as pln;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text("PiLisp Native Example")),
body: Center(
child: ElevatedButton(
onPressed: () async {
print("# 打印到 STDERR");
final result = await PiLisp.loadString(
'(print-to :err "Wow STDERR!\nTry running this and adding the following to pipe STDERR to a file: 2> ~/tmp/stderr.txt")',
env: pln.piLispNativeEnv);
print("结果: $result");
},
child: Text("运行 PiLisp"),
),
),
),
);
}
}
运行效果
点击按钮后,会在控制台打印以下内容:
# 打印到 STDERR
Wow STDERR!
Try running this and adding the following to pipe STDERR to a file: 2> ~/tmp/stderr.txt
结果: nil
附加信息
- PiLisp 语言教程
- PiLisp 核心实现
- PiLisp 核心测试
- 嵌入 PiLisp 的 Dart 程序
- 支持主机设施的 pilisp-native
- 编译为 JavaScript 的 pilisp-web
构建步骤
- 克隆此存储库。
- 运行
dart pub get
。 - 运行
./script/compile
。
致谢
初始的解析器实现基于 ClojureDart 的 reader.cljd,其许可协议为 Eclipse Public License (EPL-1.0)。
解析器的重写基于 dlox 的 scanner.dart,其许可协议为 MIT 许可证。
PiLisp 的许多实现(Dart 和 PiLisp 代码)直接复制并改编自 Clojure 项目的 Java 和 Clojure 源代码,其许可协议为 Eclipse Public License (EPL-1.0)。
许可证
版权所有 © Daniel Gregoire 2022–2023
Eclipse Public License - v 2.0
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
更多关于Flutter本地功能调用插件pilisp_native的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地功能调用插件pilisp_native的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pilisp_native
是一个 Flutter 插件,用于在 Flutter 应用中调用本地(Native)功能。通过这个插件,你可以在 Flutter 应用中调用 Android 和 iOS 平台的本地代码,从而访问设备硬件、操作系统 API 或其他本地功能。
以下是使用 pilisp_native
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 pilisp_native
插件的依赖。
dependencies:
flutter:
sdk: flutter
pilisp_native: ^1.0.0 # 请使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 pilisp_native
插件:
import 'package:pilisp_native/pilisp_native.dart';
3. 调用本地功能
pilisp_native
插件通常会提供一些方法来调用本地功能。你可以通过以下方式来调用这些方法:
void callNativeFunction() async {
try {
// 调用本地功能
var result = await PilispNative.someNativeMethod();
print('Native method result: $result');
} catch (e) {
print('Error calling native method: $e');
}
}
4. 处理平台特定的代码
pilisp_native
插件通常会在 Android 和 iOS 平台上分别实现本地功能。你可以在以下路径中找到平台特定的代码:
- Android:
android/src/main/java/com/example/pilisp_native/PilispNativePlugin.java
- iOS:
ios/Classes/PilispNativePlugin.m
你可以在这些文件中编写或修改本地代码,以支持你需要的功能。
5. 配置平台项目
在某些情况下,你可能需要在 Android 或 iOS 项目中进行一些配置。例如,在 Android 项目中,你可能需要添加权限或依赖库;在 iOS 项目中,你可能需要配置 Info.plist
文件。
6. 运行应用
最后,运行你的 Flutter 应用,并确保本地功能按预期工作。
flutter run
示例代码
以下是一个简单的示例,展示了如何使用 pilisp_native
插件调用一个本地方法:
import 'package:flutter/material.dart';
import 'package:pilisp_native/pilisp_native.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Pilisp Native Example'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
try {
var result = await PilispNative.someNativeMethod();
print('Native method result: $result');
} catch (e) {
print('Error calling native method: $e');
}
},
child: Text('Call Native Method'),
),
),
),
);
}
}