genWholeW3ContractFile function
Generate the whole output file as a string.
Implementation
String genWholeW3ContractFile(
String abiString,
String fileNameWithExt, {
bool nonNullableEnabled = false,
}) {
final fileNameNoExt = fileNameWithExt.split('.')[0];
var abi = ContractAbi.fromJson(abiString, fileNameNoExt);
var late_keyword_padded = nonNullableEnabled ? 'late ' : ' ';
var contractClassName = '${abi.name}Contract';
var abiConstName = '${abi.name.toUpperCase()}_ABI';
var outputFileContents = <String>[
'// autogenerated - your edits will be overwritten!',
//"import 'dart:io';",
"import 'dart:typed_data';",
"import 'package:dartz/dartz.dart';",
"import 'package:web3dart/web3dart.dart';",
"import 'package:web3_contract/web3_contract.dart';",
'',
'const ${abiConstName} = \'\'\'${abiString.trim()}\'\'\';',
''
'final EthereumAddress _zeroAddr = EthereumAddress(Uint8List(20)..fillRange(0, 20, 0));',
'EthereumAddress _addrOrDefault(EthereumAddress addr) => addr ?? _zeroAddr;',
'',
'class ${contractClassName} {',
' DeployedContract \$contract;',
' EthereumAddress get \$addr => \$contract.address;',
' ContractAbi get \$abi => \$contract.abi;', // ;',
' Web3Client \$client;',
' ${contractClassName}(String address, this.\$client) : \$contract = DeployedContract(ContractAbi.fromJson(${abiConstName}, \'$fileNameNoExt\'), EthereumAddress.fromHex(address));',
'',
//'Future<T> txFactory<T>() async {}',
'',
abiToMethods(abi, nullable: nonNullableEnabled),
'}',
].join('\n');
return DartFormatter(pageWidth: 80, lineEnding: '\n')
.format(outputFileContents);
}