Polkawallet built with Flutter, https://polkawallet.io
Polkawallet provide one-stop management for cross-chain assets, convenient staking and governance operations, and the private key is self-owned.
Polkawallet is aiming to provide a more convenient entrance of the polkadot network for all the users of Polkadot/Kusama/Substrate-based-blockchains.
- Friendly UI.
- Secure local accounts storage.
- Intuitive Tokens management.
- Simplified staking & governance operations.
- Offline signature supported.
- Available for both IOS and Android.
- Support any Substrate-based-blockchain to integrate as plugins.
- Add proxy account operations.
- Support walletConnect protocol.
Dependencies
- Flutter 2.5.x statble
- Dart 2.10.x
To get started
- Clone the repo locally, via git clone https://github.com/polkawallet-io/app.git
<optional local path>
. - Install the dependencies by running
flutter pub get
. - In AndroidStudio, run
lib/main.dart
with arguments--flavor=prod
on Android Devices, or just runlib/main.dart
with no arguments on IOS.
This app was built with several repos, developers of other substrate based chain may create their own plugin and put it into polkawallet app:
__ polkawallet-io/app
|
|__ polkawallet-io/ui
| |__ polkawallet-io/sdk
|
|__ polkawallet_plugin_kusama
| |__ polkawallet-io/sdk
| |__ polkawallet-io/ui
|
|__ polkawallet_plugin_acala
| |__ polkawallet-io/sdk
| |__ polkawallet-io/ui
|
|__ polkawallet_plugin_laminar
| |__ polkawallet-io/sdk
| |__ polkawallet-io/ui
|
|__ <plugin of another substrate based chain>
|__ <...>
This is a polkadot-js/api
wrapper which will be built into a single main.js
file
to run in a hidden webView inside the App. So the App will connect to a substrate node
with polkadot-js
.
And we wrapped polkadot-js/keyring
in it, so the App can manage keyPairs.
This is a polkawallet-io/js_api
wrapper dart package, it contains:
- Keyring. Managing keyPairs.
- PolkawalletSDK. Connect to remote node and call
polkadot-js/api
methods. - PolkawalletPlugin. A base plugin class, defined the data and life-circle methods which will be used in the App.
A polkawallet plugin can get users' keyPairs in the App from Keyring instance.
A polkawallet plugin implementation should extend the PolkawalletPlugin
class and
define it's own data & life-circle methods.
The common used flutter widgets for polkawallet-io/app
, like:
- AddressInputForm
- TxConfirmPage
- ScanPage
- ...
Examples:
- polkawallet-io/polkawallet_plugin_kusama
- polkawallet-io/polkawallet_plugin_acala
- polkawallet-io/polkawallet_plugin_laminar
We use https://pub.dev/packages/mobx. so the directories in a plugin looks like this:
__ lib
|__ pages (the UI)
|__ store (the MobX store)
|__ service (the Actions fired by UI to mutate the store)
|__ ...
While your plugin was finished and tested, you may submit an issue in this repo. We will check into your plugin and add it into the App.
Submit a update request issue to update your plugin. There are two different kinds of update:
- Update the dart package. We will rebuild the App and publish a new release.
- Update the js code of your plugin (dart code was not affected). We will rebuild the js bundle file and the app will perform a hot-update through polkawallet-api.
Polkawallet App has several translation projects on crowdin.com:
Language files in the project are written in json-like
style:
final enAccount = {
'key': 'value',
'key.another': 'Another value for translation.',
'key.multiline': 'Multiline text are \n split with symbol \n.',
};
/// This 3 strings above will display in the App like:
// value
// Another value for translation.
// Multiline text are
// split with symbol
// .
You need to keep the 'key'
field on the left as it is, and translate the 'value'
field on the right only. Note that the \n
symbol split a long string into several lines.
- sdk version code updated.
- sdk jsCodeVersion code updated.
- sdk version code of
polkawallet-io/ui
updated. - sdk & ui dependencies of plugins updated.
- plugins version updated.
- plugins node list updated.
- version code in
pubspec.yaml
updated. - version code in Xcode for IOS updated.