apillon_flutter 0.0.1 apillon_flutter: ^0.0.1 copied to clipboard
Apillon flutter sdk
Apillon Flutter SDK #
This package provides Dart and Flutter developers with tools and libraries to interact with Apillon services, simplifying the use of Apillon's REST API by reducing boilerplate code and streamlining multi-step processes into single operations.
Requirements #
- Dart SDK: '>=3.2.2 <4.0.0'
- An Apillon API key and secret
- http package version 1.1.0
Getting started #
To use the Apillon Flutter SDK, you must first register an account at Apillon.io, create a project, and generate an API key with the appropriate permissions.
The Flutter SDK package is available as a Dart package on pub.dev and you can also check it out directly on GitHub.
To include it in your project, add the following to your pubspec.yaml
file:
dependencies:
apillon_flutter: ^0.0.1
Initialization #
To start using the SDK, you need to import it and configure it with your Apillon API key and secret. Here's an example of how to initialize the Storage module:
import 'package:apillon_flutter/apillon_flutter.dart';
void main() {
var storage = Storage(ApillonConfig(
key: 'yourApiKey',
secret: 'yourApiSecret',
));
}
All modules in the Apillon Flutter SDK require the same initial configuration of key
and secret
.
Modules #
The Apillon Flutter SDK consists of several modules, each corresponding to a specific Apillon service. Below are examples of how to use some of these modules.
Storage #
The Storage module provides functionalities for interacting with the Storage service.
Usage example
import 'dart:io';
import 'package:apillon_flutter/apillon_flutter.dart';
import 'package:path/path.dart' as path;
void main() async {
var storage = Storage(ApillonConfig(
key: 'yourApiKey',
secret: 'yourApiSecret',
));
// List all buckets
var buckets = await storage.listBuckets(ICollectionFilters());
print('Buckets:');
for (var bucket in buckets) {
print('${bucket.name} - ${bucket.uuid}');
}
var bucketUuid = 'eaff2672-3012-46fb-9278-5efacc6cb616';
// Get specific bucket details
var bucketDetails = await storage.bucket(bucketUuid).get();
print('Bucket Details: ${bucketDetails.name}, Size: ${bucketDetails.size}');
// List files in the bucket
var files = await storage.bucket(bucketUuid).listFiles(ICollectionFilters());
print('Files in bucket:');
for (var file in files) {
print('${file.name} - ${file.uuid}');
}
// Upload files from a folder
var uploadDir = path.join(Directory.current.path, 'my-folder');
print('Uploading files from $uploadDir');
await storage.bucket(bucketUuid).uploadFromFolder(uploadDir, IFileUploadRequest());
// Upload a single file from buffer
var filePath = path.join(Directory.current.path, 'file.txt');
var fileBytes = File(filePath).readAsBytesSync();
await storage.bucket(bucketUuid).uploadFiles([
FileMetadata(
fileName: 'file.txt',
contentType: 'text/plain',
content: fileBytes,
)
], IFileUploadRequest());
// Get details of a specific file
var fileUuid = 'eaff2672-3012-46fb-9278-5efacc6cb616';
var fileDetails = await storage.bucket(bucketUuid).file(fileUuid).get();
print('File Details: ${fileDetails.name}, Size: ${fileDetails.size}');
}
IPNS methods
The Storage module additionally contains methods for manipulating IPNS records for a specific storage bucket.
import 'package:apillon_flutter/apillon_flutter.dart';
void main() async {
var storage = Storage(ApillonConfig(
key: 'yourApiKey',
secret: 'yourApiSecret',
));
var bucketUuid = 'eaff2672-3012-46fb-9278-5efacc6cb616';
// List all existing IPNS records in a bucket
var ipnsRecords = await storage.bucket(bucketUuid).listIpnsNames(ICollectionFilters());
print('IPNS Records:');
for (var record in ipnsRecords) {
print('${record.name} - ${record.uuid}');
}
// Create a new IPNS record
const name = 'Test IPNS';
const description = 'This is a test description';
const cid = 'QmUxtfFfWFguxSWUUy2FiBsGuH6Px4KYFxJqNYJRiDpemj';
var newIpnsRecord = await storage.bucket(bucketUuid).createIpns(ICreateIpns(
name: name,
description: description,
cid: cid,
));
print('New IPNS Record: ${newIpnsRecord.uuid}');
// Publish an IPNS record to point to a new CID
const newCid = 'Qmakf2aN7wzt5u9H3RadGjfotu62JsDfBq8hHzGsV2LZFx';
await storage.bucket(bucketUuid).ipns(newIpnsRecord.uuid).publish(newCid);
print('IPNS record published to new CID: $newCid');
// Delete an IPNS record
await storage.bucket(bucketUuid).ipns(newIpnsRecord.uuid).delete();
print('IPNS record deleted: ${newIpnsRecord.uuid}');
}
NFTs #
The NFT module encapsulates functionalities for the NFT service.
Usage example
import 'package:apillon_flutter/apillon_flutter.dart';
void main() async {
var nft = Nft(ApillonConfig(
key: 'yourApiKey',
secret: 'yourApiSecret',
));
// Create a new NFT collection
var collection = await nft.createCollection(ICreateCollection(
chain1: EvmChain.moonbase,
collectionType1: CollectionType.generic,
name: 'SDK Test',
description: 'Created from SDK tests',
symbol: 'SDKT',
royaltiesFees: 0,
royaltiesAddress: '0x0000000000000000000000000000000000000000',
baseUri: 'https://test.com/metadata/',
baseExtension: '.json',
maxSupply: 5,
isRevokable: false,
isSoulbound: false,
drop: false,
));
print('Collection created: ${collection.uuid}');
// Mint a new NFT in the collection
var mintResult = await nft.collection(collection.uuid).mint(IMintNftData(
receivingAddress: '0x5BA8B0c24bA5307b67E619ad500a635204F73bF1',
quantity: 1,
));
print('Mint transaction hash: ${mintResult.transactionHash}');
// List NFT collections
var collections = await nft.listCollections(ICollectionFilters());
// Transfer NFT ownership to another address
await collection.transferOwnership('0x3fC91A3afd70395Cd496C647d5a6CC9D4B2b7FAD');
}
Identity #
The Identity module provides functionalities for validating wallet signatures and fetching identity data.
Usage example
import 'package:apillon_flutter/apillon_flutter.dart';
void main() async {
var identity = Identity(ApillonConfig(
key: 'yourApiKey',
secret: 'yourApiSecret',
));
// Generate a signing message for EVM wallet signature validation
const customMessage = 'Identity EVM SDK test';
var signingMessage = identity.generateSigningMessage(customMessage)["message"];
print('Signing message: $signingMessage');
var walletAddress = '0xa79bg13g2...';
var signature = '0xYourSignature'; // signature obtained from the user's wallet by the client app
// Validate EVM wallet signature
var validationResult = await identity.validateEvmWalletSignature(IValidateEvmWalletSignature(
walletAddress: walletAddress,
message: signingMessage,
signature: signature,
));
print('Is valid: ${validationResult.isValid}');
print('Address: ${validationResult.address}');
// Get wallet identity profile for a Polkadot address
var polkadotAddress = '5HqHQDGcHqS...',
var identityProfile = await identity.getWalletIdentity(polkadotAddress);
print('Identity Profile: ${identityProfile.subsocial['content']['name']}');
}