Skip to content

Orange-Wallet/flutter_injected_web3

Repository files navigation

Flutter Injected Web3

This is wrapper around slightly modified version of Trust Wallet's Web3 provider, you can find it here.

Note: Its still an early draft, we will try to update it whenever necessary or whenever we get time, so PRs are most welcome.

Features

In most dapps you will se an option of "Injected web3", if nothing like this comes up you can select Metamask, Trust wallet or any other wallet that injects web3.

Getting started

If you are using flutter_inappwebview, use it directly from the Injected web3 package itself.

Usage

class MyApp extends StatelessWidget {
  String rpc = "https://rpc.ankr.com/polygon";
  int chainId = 137;

  MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(),
        body: InjectedWebview(
            addEthereumChain: changeNetwork,
            requestAccounts: getAccount,
            signTransaction: signTransaction,
            signPersonalMessage: signPersonelMessage,
            isDebug: true,
            initialUrlRequest:
                URLRequest(url: Uri.parse('https://opensea.io/')),
            chainId: chainId,
            rpc: rpc),
      ),
    );
  }

  Future<String> changeNetwork(InAppWebViewController controller,
      JsAddEthereumChain data, int chainId) async {
    try {
      rpc = "https://rpc.ankr.com/eth";
      chainId = int.parse(data.chainId!);
    } catch (e) {
      debugPrint("$e");
    }
    return rpc;
  }

  Future<IncomingAccountsModel> getAccount(
      InAppWebViewController _, String ___, int __) async {
    Credentials fromHex = EthPrivateKey.fromHex(
        "Private key here");
    final address = await fromHex.extractAddress();
    return IncomingAccountsModel(
        address: address.toString(), chainId: chainId, rpcUrl: rpc);
  }

  Future<String> signTransaction(
      InAppWebViewController _, JsTransactionObject data, int chainId) async {
    return "0x45fb0060681bf5d8ea675ab0b3f76aa15c84b172f2fb3191b7a8ceb1e6a7f372";
  }

  Future<String> signPersonelMessage(
      InAppWebViewController _, String data, int chainId) async {
    try {
      Credentials fromHex = EthPrivateKey.fromHex(
          "Private key here");
      final sig = await fromHex.signPersonalMessage(hexToBytes(data));

      debugPrint("SignedTx ${sig}");
      return bytesToHex(sig, include0x: true);
    } catch (e) {
      debugPrint("$e");
    }
    return "";
  }
}

Additional information

Special thanks to Trust Wallet for their implmentaion of Web3 Provider

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published