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&gt;

运行以下命令查看所有选项:

$ pl help
Run a PiLisp REPL, or try the subcommands for more options.

Usage: pl &lt;command&gt; [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 &lt;command&gt;" 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

附加信息


构建步骤

  1. 克隆此存储库。
  2. 运行 dart pub get
  3. 运行 ./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

1 回复

更多关于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'),
          ),
        ),
      ),
    );
  }
}
回到顶部