init static method

Future<void> init({
  1. AssetBundle? assetBundle,
  2. String? tessDataAssetPath,
  3. String? tessConfigAssetPath,
})

Initializes the tessdata directory path.

Implementation

static Future<void> init({
  AssetBundle? assetBundle,
  String? tessDataAssetPath,
  String? tessConfigAssetPath,
}) {
  assetBundle ??= rootBundle;

  () async {
    final appDataPath = (await getApplicationDocumentsDirectory()).path;
    _tessDataPath = '$appDataPath/tessdata';

    await Directory(tessDataPath).create(recursive: true);

    final assetManifest = jsonDecode(
      await assetBundle!.loadString('AssetManifest.json'),
    );

    final tessConfig = assetManifest.keys.firstWhere(
      (String key) => key.toLowerCase().startsWith('assets/tessconfig'),
    );
    if (tessConfig != null) {
      final tessConfigBytes = await assetBundle.load(tessConfig);
      final configFileName = tessConfig.split('/').last;
      final tessConfigFile = File('$_tessDataPath/$configFileName');
      await tessConfigFile.writeAsBytes(tessConfigBytes.buffer.asUint8List());
      _tessConfigPath = tessConfigFile.path;
    }

    final tessDataFiles = assetManifest.keys.where(
      (String key) => key.toLowerCase().startsWith('assets/tessdata/'),
    );
    for (final assetFile in tessDataFiles) {
      final tessDataBytes = await assetBundle.load(assetFile);
      final assetFileName = assetFile.split('/').last;
      final tessDataFile = File('$_tessDataPath/$assetFileName');
      await tessDataFile.writeAsBytes(tessDataBytes.buffer.asUint8List());
    }

    _intialized.complete(true);
  }();

  return _intialized.future;
}