Flutter去中心化应用框架插件archethic_dapp_framework_flutter的使用

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

Flutter去中心化应用框架插件archethic_dapp_framework_flutter的使用

本项目提供了用于简化创建Archethic DApps的组件。

前置条件

  • Flutter 3.24+
  • Dart 3.5+

Arb文件管理

请填写/lib/src/l10n/intl_en.arb文件以外部化文本。 最佳实践:每个键前缀以aedappfm_以避免与DApp项目的重复。

生成Arb文件

你需要运行以下命令来生成arb文件:

flutter gen-l10n

然后将生成的类复制到公共文件夹/lib/src/l10n

./lib/src/l10n/copy_l10n.sh
在你的DApp中声明本地化委托

MaterialApplocalizationsDelegates属性中添加aedappfm.AppLocalizations.delegate

import 'package:flutter/material.dart';
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' as aedappfm;

void main() {
  runApp(
    MaterialApp(
      localizationsDelegates: [
        aedappfm.AppLocalizations.delegate,
        // 其他本地化委托
      ],
      supportedLocales: [
        Locale('en', ''),
        // 其他支持的语言
      ],
      home: MyHomePage(),
    ),
  );
}
注意事项

为了避免键的重复,建议在DApp项目中后缀导入Archethic DApp框架。例如:

import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' as aedappfm;

提供者追踪器

ProvidersTracker用于跟踪活跃的提供者。

使用方法
注册观察者
import 'package:flutter/material.dart';
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' as aedappfm;

void main() {
  runApp(
    ProviderScope(
      observers: [
        if (kDebugMode) aedappfm.ProvidersTracker(),
      ],
      child: const MyApp(),
    ),
  );
}
检查所有活跃的提供者

在调试控制台中检查ProvidersTracker的内容:

aedappfm.ProvidersTracker().aliveProviders

结果将会如下所示:

Set
[0] = AutoDisposeProvider (oracleServiceProvider:AutoDisposeProvider<OracleService>#2d1c8)
[1] = AutoDisposeAsyncNotifierProviderImpl (_archethicOracleUCONotifierProvider:AutoDisposeAsyncNotifierProviderImpl<_ArchethicOracleUCONotifier, ArchethicOracleUCO>#4aa30)
[2] = AutoDisposeProvider (apiServiceProvider:AutoDisposeProvider<ApiService>#e4552)
过滤并读取提供者

在调试控制台中执行以下命令:

aedappfm.ProvidersTracker().byName('oracle').read

结果将会如下所示:

Set
[0] = AutoDisposeProvider (oracleServiceProvider:AutoDisposeProvider<OracleService>#2d1c8)
[1] = AutoDisposeAsyncNotifierProviderImpl (_archethicOracleUCONotifierProvider:AutoDisposeAsyncNotifierProviderImpl<_ArchethicOracleUCONotifier, ArchethicOracleUCO>#4aa30)
过滤并监视提供者

在调试控制台中执行以下命令:

// 监视返回一个流。这里我们只是记录匹配'oracle'的提供者的数量
aedappfm.ProvidersTracker().byName('oracle').watch.forEach((providers) => print('>>> Oracle : ${providers.length}'))

每次活跃的提供者匹配’oracle’发生变化时,你会得到如下日志:

>>> Oracle : 2

完整示例代码

你可以参考以下示例代码:

// 忽略未使用的导入
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart' as aedappfm;

void main(List<String> args) {
  /// 此库提供了许多小部件和实用工具
  /// 我们建议你查看Archethic上的DApps仓库以获取示例:https://github.com/archethic-foundation
}

更多关于Flutter去中心化应用框架插件archethic_dapp_framework_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter去中心化应用框架插件archethic_dapp_framework_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用archethic_dapp_framework_flutter插件来构建去中心化应用(DApp)的示例代码。请注意,实际使用中可能需要根据具体需求进行调整,并且确保已正确配置Flutter开发环境以及必要的依赖项。

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

dependencies:
  flutter:
    sdk: flutter
  archethic_dapp_framework_flutter: ^最新版本号 # 替换为实际的最新版本号

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

接下来,是一个简单的Flutter应用示例,它使用archethic_dapp_framework_flutter来连接到一个去中心化网络,并展示一些基本信息。由于archethic_dapp_framework_flutter的具体API和用法可能因版本而异,以下代码将基于假设的API结构进行演示。

import 'package:flutter/material.dart';
import 'package:archethic_dapp_framework_flutter/archethic_dapp_framework_flutter.dart'; // 假设的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter DApp Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: DAppHomePage(),
    );
  }
}

class DAppHomePage extends StatefulWidget {
  @override
  _DAppHomePageState createState() => _DAppHomePageState();
}

class _DAppHomePageState extends State<DAppHomePage> {
  late DAppFramework _dappFramework;
  String? _networkStatus;
  String? _accountAddress;

  @override
  void initState() {
    super.initState();
    // 初始化DApp框架
    _dappFramework = DAppFramework.instance;
    
    // 监听网络状态变化
    _dappFramework.onNetworkStatusChanged.listen((status) {
      setState(() {
        _networkStatus = status;
      });
    });

    // 监听账户地址变化(假设框架支持账户管理)
    _dappFramework.onAccountAddressChanged.listen((address) {
      setState(() {
        _accountAddress = address;
      });
    });

    // 连接到去中心化网络(假设有一个connect方法)
    _dappFramework.connect().then((_) {
      setState(() {}); // 触发UI更新
    }).catchError((error) {
      print('连接失败: $error');
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter DApp'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('网络状态: $_networkStatus'),
            SizedBox(height: 16),
            Text('账户地址: $_accountAddress'),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 取消监听
    _dappFramework.onNetworkStatusChanged.cancel();
    _dappFramework.onAccountAddressChanged.cancel();
    super.dispose();
  }
}

注意事项:

  1. API假设:由于archethic_dapp_framework_flutter的具体API可能有所不同,上述代码中的DAppFrameworkconnect方法以及事件监听(onNetworkStatusChangedonAccountAddressChanged)是基于假设的。实际使用时,请参考该插件的官方文档或源代码。

  2. 错误处理:在真实应用中,应该添加更详细的错误处理和用户反馈机制。

  3. 安全性:处理区块链和加密货币相关的应用时,务必注意安全性,遵循最佳实践,如使用安全的存储机制、验证用户输入等。

  4. 权限:确保你的应用具有访问区块链网络的必要权限,特别是在移动设备上。

  5. 更新:定期检查并更新archethic_dapp_framework_flutter插件,以获取最新的功能和安全性修复。

希望这个示例能帮助你开始在Flutter项目中使用archethic_dapp_framework_flutter插件。如果有任何具体问题或需要进一步的帮助,请查阅该插件的官方文档或寻求社区支持。

回到顶部