genWholeW3ContractFile function

String genWholeW3ContractFile(
  1. String abiString,
  2. String fileNameWithExt,
  3. {bool nonNullableEnabled = false}
)

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);
}