Flutter插件dim_plugins的介绍与使用
Flutter插件dim_plugins的介绍与使用
DIM Plugins (Dart)
插件
数据编码
- Base-58
- Base-64
- Hex
- UTF-8
- JSON
- PNF (可移植网络文件)
- TED (传输编码数据)
摘要算法
- MD-5
- SHA-1
- SHA-256
- Keccak-256
- RipeMD-160
加密
- AES-256 (AES/CBC/PKCS7Padding)
- RSA-1024 (RSA/ECB/PKCS1Padding), (SHA256withRSA)
- ECC (Secp256k1)
地址
- BTC
- ETH
元数据
- MKM (默认)
- BTC
- ETH
文档
- Visa (用户)
- Profile
- Bulletin (群组)
扩展
地址
import 'package:dimp/dimp.dart';
import 'package:dim_plugins/mkm.dart';
class CompatibleAddressFactory extends BaseAddressFactory {
@override
Address? parse(String address) {
int len = address.length;
if (len == 0) {
assert(false, 'address empty');
return null;
} else if (len == 8) {
// "anywhere"
String lower = address.toLowerCase();
if (lower == Address.ANYWHERE.toString()) {
return Address.ANYWHERE;
}
} else if (len == 10) {
// "everywhere"
String lower = address.toLowerCase();
if (lower == Address.EVERYWHERE.toString()) {
return Address.EVERYWHERE;
}
}
Address? res;
if (26 <= len && len <= 35) {
res = BTCAddress.parse(address);
} else if (len == 42) {
res = ETHAddress.parse(address);
} else {
// throw AssertionError('invalid address: $address');
res = null;
}
//
// TODO: parse for other types of address
//
if (res == null && 4 <= len && len <= 64) {
res = UnknownAddress(address);
}
assert(res != null, 'invalid address: $address');
return res;
}
}
/// 不支持的地址
/// ~~~~~~~~~~~~~~~~~~~
class UnknownAddress extends ConstantString implements Address {
UnknownAddress(super.string);
@override
int get network => 0;
}
元数据
import 'package:dimp/crypto.dart';
import 'package:dimp/mkm.dart';
import 'package:dimp/plugins.dart';
import 'package:dim_plugins/mkm.dart';
class CompatibleMetaFactory extends BaseMetaFactory {
CompatibleMetaFactory(super.type);
@override
Meta createMeta(VerifyKey pKey, {String? seed, TransportableData? fingerprint}) {
Meta out;
switch (type) {
case Meta.MKM:
out = DefaultMeta.from('1', pKey, seed!, fingerprint!);
break;
case Meta.BTC:
out = BTCMeta.from('2', pKey);
break;
case Meta.ETH:
out = ETHMeta.from('4', pKey);
break;
default:
// TODO: other types of meta
throw Exception('unknown meta type: $type');
}
assert(out.isValid, 'meta error: $out');
return out;
}
@override
Meta? parseMeta(Map meta) {
Meta out;
var ext = SharedAccountExtensions();
String? version = ext.helper!.getMetaType(meta, '');
switch (version) {
case 'MKM':
case 'mkm':
case '1':
out = DefaultMeta(meta);
break;
case 'BTC':
case 'btc':
case '2':
out = BTCMeta(meta);
break;
case 'ETH':
case 'eth':
case '4':
out = ETHMeta(meta);
break;
default:
// TODO: other types of meta
throw Exception('unknown meta type: $type');
}
return out.isValid ? out : null;
}
}
插件加载器
import 'dart:typed_data';
import 'package:dimp/crypto.dart';
import 'package:dimp/mkm.dart';
import 'package:dim_plugins/format.dart';
import 'package:dim_plugins/plugins.dart';
import 'compat_address.dart';
import 'compat_meta.dart';
class CompatiblePluginLoader extends PluginLoader {
@override
void registerAddressFactory() {
Address.setFactory(CompatibleAddressFactory());
}
@override
void registerMetaFactories() {
var mkm = CompatibleMetaFactory(Meta.MKM);
var btc = CompatibleMetaFactory(Meta.BTC);
var eth = CompatibleMetaFactory(Meta.ETH);
Meta.setFactory('1', mkm);
Meta.setFactory('2', btc);
Meta.setFactory('4', eth);
Meta.setFactory('mkm', mkm);
Meta.setFactory('btc', btc);
Meta.setFactory('eth', eth);
Meta.setFactory('MKM', mkm);
Meta.setFactory('BTC', btc);
Meta.setFactory('ETH', eth);
}
@override
void registerBase64Coder() {
/// Base64 编码
Base64.coder = PatchBase64Coder();
}
}
/// Base-64
class PatchBase64Coder extends Base64Coder {
@override
Uint8List? decode(String string) {
string = trimBase64String(string);
return super.decode(string);
}
static String trimBase64String(String b64) {
if (b64.contains('\n')) {
b64 = b64.replaceAll('\n', '');
b64 = b64.replaceAll('\r', '');
b64 = b64.replaceAll('\t', '');
b64 = b64.replaceAll(' ', '');
}
return b64.trim();
}
}
使用方法
在您的业务运行之前,必须加载所有插件:
import 'package:dimsdk/plugins.dart';
import 'package:your_package_name/compat_loader.dart'; // 替换为您的实际路径
void main() {
ExtensionLoader().run();
CompatiblePluginLoader().run();
// 在所有扩展和插件加载后执行您的任务
}
更多关于Flutter插件dim_plugins的介绍与使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html