apillon_flutter 0.1.0  apillon_flutter: ^0.1.0 copied to clipboard
apillon_flutter: ^0.1.0 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(IApillonPagination());
  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(IBucketFilesRequest());
  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(IPNSListRequest());
  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.create(ICreateCollection(
    chain: EvmChain.moonbase,
    collectionType1: CollectionType.generic,
    name: 'Space Explorers',
    description: 'A collection of space explorers',
    symbol: 'SE',
    royaltiesFees: 3,
    royaltiesAddress: '0x95B8c6b9225456107649776EF8aAF20C42d58814',
    baseUri: 'https://test.com/metadata/',
    baseExtension: '.json',
    maxSupply: 50,
    isRevokable: false,
    isSoulbound: false,
    drop: false,
  ));
  print('Collection created: ${collection.uuid}');
  // or create a substrate collection
  var substrateCollection = await nft.createSubstrate({
    chain: SubstrateChain.astar,
    collectionType1: CollectionType.generic,
    name: 'SpaceExplorers',
    symbol: 'SE',
    ...
  });
  // 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']}');
}