Flutter Nostr核心功能插件nostr_core_dart的使用

发布于 1周前 作者 gougou168 来自 Flutter

Flutter Nostr核心功能插件nostr_core_dart的使用

概述

nostr_core_dart 是一个基于 Dart 实现的 Nostr 协议库,用于在 Flutter 应用中实现 Nostr 的核心功能。该库扩展了标准的 Nostr 功能,并提供了更好的性能和易用性,特别适用于 0xchat 等应用场景。

安装

在你的 Flutter 项目中添加 nostr_core_dart 依赖:

flutter pub add nostr_core_dart

支持的 NIPs

nostr_core_dart 目前支持以下 NIPs(Nostr Improvement Proposals):

  • NIP 01 基本协议流描述
  • NIP 02 联系人列表和昵称
  • NIP 04 加密私信
  • NIP 05 将 Nostr 密钥映射到基于 DNS 的互联网标识符
  • NIP 10 文本事件中的 “e” 和 “p” 标签
  • NIP 15 存储事件结束通知
  • NIP 19 bech32 编码实体
  • NIP 20 命令结果
  • NIP 28 公共聊天
  • NIP 51 列表
  • NIP 101 别名密钥交换(专为 0xchat 设计)

使用示例

以下是一个完整的示例,展示如何在 Flutter 中使用 nostr_core_dart 实现基本的 Nostr 功能。

初始化 Nostr 客户端

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() {
  // 初始化 Nostr 客户端
  final client = NostrClient();

  // 设置公钥和私钥
  final privateKey = 'your_private_key_here';
  final publicKey = 'your_public_key_here';

  // 连接到 Nostr 网络
  client.connect(privateKey);

  // 订阅事件
  client.subscribe(['*'], (event) {
    print('Received event: ${event.toJson()}');
  });

  // 发布一条文本事件
  final textEvent = NostrEvent(
    kind: 1,
    content: 'Hello Nostr!',
    tags: [],
  );

  client.publish(textEvent);
}

解释

  1. 初始化客户端

    • 使用 NostrClient() 创建一个新的 Nostr 客户端实例。
    • 设置用户的公钥和私钥。
  2. 连接到网络

    • 调用 client.connect(privateKey) 连接到 Nostr 网络。
  3. 订阅事件

    • 使用 client.subscribe(['*'], callback) 订阅所有类型的事件。
    • 当接收到事件时,执行回调函数并打印事件内容。
  4. 发布事件

    • 创建一个 NostrEvent 对象,设置事件类型 (kind) 和内容 (content)。
    • 使用 client.publish(event) 发布事件。

输出示例

当运行上述代码时,控制台将显示类似以下输出:

Received event: {"id": "event_id", "pubkey": "your_public_key", "content": "Hello Nostr!", "created_at": 1698745600, "kind": 1, "tags": []}

更多关于Flutter Nostr核心功能插件nostr_core_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Nostr核心功能插件nostr_core_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


nostr_core_dart 是一个用于在 Flutter 或 Dart 应用程序中实现 Nostr 协议核心功能的库。Nostr 是一个去中心化的、基于事件的协议,用于构建抗审查的社交网络和其他应用。

安装

首先,你需要在 pubspec.yaml 文件中添加 nostr_core_dart 作为依赖项:

dependencies:
  nostr_core_dart: ^0.1.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

1. 创建密钥对

在 Nostr 中,每个用户都有一个公钥和私钥。你可以使用 nostr_core_dart 来生成密钥对。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() {
  final keyPair = KeyPair.generate();
  print('Public Key: ${keyPair.publicKey}');
  print('Private Key: ${keyPair.privateKey}');
}

2. 创建事件

Nostr 中的事件(Event)是协议的核心。你可以创建一个事件并对其进行签名。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() {
  final keyPair = KeyPair.generate();
  
  final event = Event(
    kind: 1,  // 事件类型,1 表示文本消息
    content: 'Hello, Nostr!',  // 事件内容
    pubkey: keyPair.publicKey,  // 公钥
    created_at: DateTime.now().millisecondsSinceEpoch ~/ 1000,  // 时间戳
  );

  event.sign(keyPair.privateKey);  // 使用私钥对事件进行签名

  print('Event ID: ${event.id}');
  print('Event Signature: ${event.sig}');
}

3. 验证事件

你可以验证事件的签名是否有效。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() {
  final keyPair = KeyPair.generate();
  
  final event = Event(
    kind: 1,
    content: 'Hello, Nostr!',
    pubkey: keyPair.publicKey,
    created_at: DateTime.now().millisecondsSinceEpoch ~/ 1000,
  );

  event.sign(keyPair.privateKey);

  final isValid = event.verify();
  print('Is Event Valid? $isValid');
}

4. 与其他节点交互

你可以将事件发布到 Nostr 网络中的其他节点,或者从其他节点订阅事件。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() async {
  final keyPair = KeyPair.generate();
  
  final event = Event(
    kind: 1,
    content: 'Hello, Nostr!',
    pubkey: keyPair.publicKey,
    created_at: DateTime.now().millisecondsSinceEpoch ~/ 1000,
  );

  event.sign(keyPair.privateKey);

  final relay = Relay('wss://relay.nostr.example');  // 替换为实际的 Nostr 中继地址
  await relay.connect();

  await relay.publish(event);

  relay.subscribe([], (event) {
    print('Received Event: ${event.content}');
  });

  // 保持连接
  await Future.delayed(Duration(seconds: 10));
  await relay.disconnect();
}

高级用法

1. 处理不同的事件类型

Nostr 支持多种事件类型,你可以根据事件的 kind 字段来处理不同类型的事件。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() async {
  final relay = Relay('wss://relay.nostr.example');
  await relay.connect();

  relay.subscribe([], (event) {
    switch (event.kind) {
      case 1:
        print('Text Note: ${event.content}');
        break;
      case 2:
        print('Recommend Relay: ${event.content}');
        break;
      // 处理其他事件类型
      default:
        print('Unknown Event Kind: ${event.kind}');
    }
  });

  await Future.delayed(Duration(seconds: 10));
  await relay.disconnect();
}

2. 使用过滤器订阅事件

你可以使用过滤器来订阅特定的事件。

import 'package:nostr_core_dart/nostr_core_dart.dart';

void main() async {
  final relay = Relay('wss://relay.nostr.example');
  await relay.connect();

  final filter = Filter(
    kinds: [1],  // 只订阅文本消息
    authors: ['some_public_key'],  // 只订阅特定作者
  );

  relay.subscribe([filter], (event) {
    print('Filtered Event: ${event.content}');
  });

  await Future.delayed(Duration(seconds: 10));
  await relay.disconnect();
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!