generateBiometricService function

Future<void> generateBiometricService()

Implementation

Future<void> generateBiometricService() async {
  final isFree = await FirebaseService.instance.isFreeUseOn(feature: 'biometric');
  if (!isFree) {
    ConsoleLog.warning(ProjectUtils.freeUseBlockString);
    return;
  }

  ConsoleLog.title('Generating BiometricService ...');

  DartgenxConfig config = DartgenxConfig.load();

  final file = File(config.outputPath?.biometricService ?? 'lib/biometric_service.dart');

  file.createSync(recursive: true);
  file.writeAsStringSync(biometricServiceTemplate);

  ConsoleLog.success('BiometricService generated at ${file.path}');

  ConsoleLog.info('Installing required dependencies...');

  final packages = ['local_auth'];

  ConsoleLog.step('flutter pub add ${packages.join(" ")}');

  final result = await Process.run(
    'flutter',
    ['pub', 'add', ...packages],
    runInShell: true,
  );
  stdout.write(result.stdout);
  stderr.write(result.stderr);

  ConsoleLog.line();
  ConsoleLog.info("Add the following permission to AndroidManifest.xml: ");
  ConsoleLog.step("<uses-permission android:name=\"android.permission.USE_BIOMETRIC\"/>");
  ConsoleLog.line();
  ConsoleLog.info("Make the following changes in MainActivity file: ");
  ConsoleLog.step("import io.flutter.embedding.android.FlutterFragmentActivity\n\nclass MainActivity: FlutterFragmentActivity() {\n    // ...\n}");
  ConsoleLog.line();
  ConsoleLog.info("Add the following permission to Info.plist: \n");
  ConsoleLog.step("<key>NSFaceIDUsageDescription</key>\n<string>Explain why your app needs Face ID access here.</string>");
  ConsoleLog.line();
}