flutter_web3_provider 2.0.2
flutter_web3_provider: ^2.0.2 copied to clipboard
Flutter web web3 provider.
flutter_web3_provider #
Flutter wrapper for using web3 providers, ie: accessing window.ethereum
.
NOTE: This is for web only!
Getting Started #
For full example, see: https://github.com/gochain/flutter_web3_provider/blob/main/example/lib/main.dart
Add import import 'package:flutter_web3_provider/ethereum.dart';
Then you can access it just be using the ethereum
variable.
if(ethereum != null){
// then an ethereum provider was injected
print(ethereum.selectedAddress);
}
copied to clipboard
Ask user to connect their wallet:
RaisedButton(
child: Text("Connect Wallet"),
onPressed: () async {
var accounts = await promiseToFuture(
ethereum.request(RequestParams(method: 'eth_requestAccounts')));
print(accounts);
String se = ethereum.selectedAddress;
print("selectedAddress: $se");
setState(() {
selectedAddress = se;
});
},
)
copied to clipboard
Using ethers.js #
Add ethers.js to web/index.html
.
<script type="module">
import { ethers } from "https://cdnjs.cloudflare.com/ajax/libs/ethers/6.7.0/ethers.min.js";
window.ethers = ethers
// Your code here...
</script>
copied to clipboard
Import package:
import 'package:flutter_web3_provider/ethers.dart';
copied to clipboard
Then create an ethers provider:
// For a read-only provider:
var provider = JsonRpcProvider("https://rpc.gochain.io");
// For a read-write provider (ie: metamask, trust wallet, etc)
var web3 = BrowserProvider(ethereum);
copied to clipboard
Then you can do things like check balance and submit transactions, etc:
var abalanceF = promiseToFuture(web3.getBalance(ethereum.selectedAddress));
Future tx = promiseToFuture(web3.Signer().sendTransaction(TxParams(
to: to,
value: "0x" +
BigInt.parse(toBase(amount, 18).toString()).toRadixString(16))));
copied to clipboard
Or use a contract:
const erc20Abi = [
// Some details about the token
"function name() view returns (string)",
"function symbol() view returns (string)",
// Get the account balance
"function balanceOf(address) view returns (uint)",
// Send some of your tokens to someone else
"function transfer(address to, uint amount)",
// An event triggered whenever anyone transfers to someone else
"event Transfer(address indexed from, address indexed to, uint amount)"
];
var contract = Contract(contractAddress, erc20Abi, web3);
// call balanceOf function
var usdcBalanceF = promiseToFuture(
callMethod(contract, "balanceOf", [ethereum.selectedAddress]));
// to make a write transaction, first get the signer (this will use metamask/wallet)
contract = contract.connect(web3.getSigner()); // uses the connected wallet as signer
// then call the function:
var res =
await promiseToFuture(callMethod(contract, "transfer", [
'0x39C5190c09ec04cF09C782bA4311C469473Ffe83',
"0x" + amount.toString()).toRadixString(16)
]));
copied to clipboard
If you need to additional overrides like set gas price or passing the value
param, you can add one extra param in the array with those fields, eg:
var res = await promiseToFuture(callMethod(
contract, "transfer", ['0x39C5190c09ec04cF09C782bA4311C469473Ffe83', "0x" + amount.toString()).toRadixString(16),
TxParams(value: "1000000000000000000")]));
copied to clipboard
NOTES:
- If you're using the human readable ABI's (ethers.js feature) like above, use
uint
, notuint256
even if the real abi is a uint256. - There are some common functions on the Contract, but you can also call any method using
callMethod
like above.
Developers #
To publish:
make publish
copied to clipboard