Flutter命名空间管理插件cardinal_namespaces的使用

Flutter命名空间管理插件cardinal_namespaces的使用

Dart库用于Cardinal命名空间

此库是Cardinal命名空间协议的部分Dart实现,专门用于在Flutter应用程序中将Twitter句柄用作钱包标识。


实现

1. 返回给定钱包的注册Twitter句柄

// 异步方法,返回给定钱包的注册Twitter句柄
final String twitterHandle = await tryGetName(
    environment: SolanaEnvironment, // 主网 | 测试网 | 本地网
    namespacePublicKey: PublicKey,   // Cardinal命名空间程序的公钥,此包中已提供为'NAMESPACES_PROGRAM_ID'
    publicKey: PublicKey             // 要查询的钱包公钥作为字符串
);

2. 返回给定Twitter句柄的注册钱包公钥

// 异步方法,返回给定Twitter句柄的注册钱包公钥
final PublicKey publicKey = await getNameEntry(
    environment: SolanaEnvironment, // 主网 | 测试网 | 本地网
    namespace: String,              // Twitter命名空间ID,此包中已提供为'twitterNamespace'
    twitterHandle: String           // 要查询的Twitter句柄作为字符串
);

完整示例Demo

以下是一个完整的示例代码,展示如何使用cardinal_namespaces插件来查询Twitter句柄和钱包公钥。

import 'package:flutter/material.dart';
import 'package:cardinal_namespaces/cardinal_namespaces.dart'; // 导入cardinal_namespaces插件

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final TextEditingController _controller = TextEditingController(); // 输入框控制器
  String _result = ''; // 结果存储变量

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Cardinal Namespaces 示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: InputDecoration(hintText: '请输入Twitter句柄或钱包公钥'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 获取输入值
                final input = _controller.text;

                // 检查输入类型并调用相应方法
                if (input.startsWith('@')) {
                  // 如果输入以@开头,则查询钱包公钥
                  final publicKey = await getNameEntry(
                    environment: SolanaEnvironment.mainnet,
                    namespace: 'twitterNamespace',
                    twitterHandle: input,
                  );
                  setState(() {
                    _result = '钱包公钥: ${publicKey.toBase58()}';
                  });
                } else {
                  // 否则查询Twitter句柄
                  final twitterHandle = await tryGetName(
                    environment: SolanaEnvironment.mainnet,
                    namespacePublicKey: PublicKey.fromString('NAMESPACES_PROGRAM_ID'),
                    publicKey: PublicKey.fromString(input),
                  );
                  setState(() {
                    _result = 'Twitter句柄: $twitterHandle';
                  });
                }
              },
              child: Text('查询'),
            ),
            SizedBox(height: 20),
            Text(_result), // 显示结果
          ],
        ),
      ),
    );
  }
}

运行效果

运行上述代码后,用户可以输入Twitter句柄(如@example)或钱包公钥(如GkLrQbEi...),然后点击“查询”按钮,程序会根据输入类型返回相应的结果。

示例输入与输出

  1. 输入 @example
    输出:Twitter句柄: example

  2. 输入 GkLrQbEi...
    输出:钱包公钥: GkLrQbEi...


注意事项

  1. 依赖项:确保在pubspec.yaml文件中添加cardinal_namespaces依赖项。
    dependencies:
      cardinal_namespaces: ^1.0.0
1 回复

更多关于Flutter命名空间管理插件cardinal_namespaces的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


cardinal_namespaces 是一个用于 Flutter 的命名空间管理插件,它可以帮助开发者更好地组织和管理代码中的命名空间,避免命名冲突,并提高代码的可读性和可维护性。以下是如何使用 cardinal_namespaces 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 cardinal_namespaces 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  cardinal_namespaces: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 cardinal_namespaces 插件:

import 'package:cardinal_namespaces/cardinal_namespaces.dart';

3. 创建命名空间

使用 Namespace 类来创建一个命名空间。你可以将相关的类、函数或变量放在同一个命名空间中。

final myNamespace = Namespace('myNamespace');

class MyClass {
  void myMethod() {
    print('Method in myNamespace');
  }
}

final myInstance = myNamespace(MyClass());

4. 使用命名空间

通过命名空间来访问类、函数或变量:

void main() {
  myInstance.myMethod();  // 输出: Method in myNamespace
}

5. 避免命名冲突

通过使用不同的命名空间,你可以避免命名冲突。例如:

final anotherNamespace = Namespace('anotherNamespace');

class MyClass {
  void myMethod() {
    print('Method in anotherNamespace');
  }
}

final anotherInstance = anotherNamespace(MyClass());

void main() {
  myInstance.myMethod();  // 输出: Method in myNamespace
  anotherInstance.myMethod();  // 输出: Method in anotherNamespace
}

6. 嵌套命名空间

你还可以创建嵌套的命名空间来进一步组织代码:

final nestedNamespace = Namespace('nestedNamespace', parent: myNamespace);

class NestedClass {
  void nestedMethod() {
    print('Method in nestedNamespace');
  }
}

final nestedInstance = nestedNamespace(NestedClass());

void main() {
  nestedInstance.nestedMethod();  // 输出: Method in nestedNamespace
}

7. 全局命名空间

如果你不想使用命名空间,可以直接使用全局命名空间:

class GlobalClass {
  void globalMethod() {
    print('Method in global namespace');
  }
}

final globalInstance = GlobalClass();

void main() {
  globalInstance.globalMethod();  // 输出: Method in global namespace
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!