getFlutterVersion method

Future<String?> getFlutterVersion()

Implementation

Future<String?> getFlutterVersion() async {
  try {
    final result = await Process.run('flutter', ['--version']);
    if (result.exitCode == 0) {
      return result.stdout.toString().split('\n').first;
    }
  } catch (_) {}

  try {
    String? pathCandidate;
    if (Platform.isWindows) {
      final whereRes = await Process.run('where', ['flutter']);
      if (whereRes.exitCode == 0) {
        final out = whereRes.stdout.toString().trim();
        if (out.isNotEmpty)
          pathCandidate = out.split(RegExp(r'\r?\n')).first.trim();
      }
    } else {
      final whichRes = await Process.run('which', ['flutter']);
      if (whichRes.exitCode == 0) {
        final out = whichRes.stdout.toString().trim();
        if (out.isNotEmpty) pathCandidate = out.split('\n').first.trim();
      }
    }

    if (pathCandidate != null && pathCandidate.isNotEmpty) {
      final verRes = await Process.run(pathCandidate, ['--version']);
      if (verRes.exitCode == 0)
        return verRes.stdout.toString().split('\n').first;
    }
  } catch (_) {}

  final pathEnv =
      Platform.environment['PATH'] ?? Platform.environment['Path'] ?? '';
  final separator = Platform.isWindows ? ';' : ':';
  final entries = pathEnv.split(separator);
  for (var entry in entries) {
    final trimmed = entry.trim();
    if (trimmed.isEmpty) continue;
    final candidate = Platform.isWindows
        ? '${trimmed}${Platform.pathSeparator}flutter.bat'
        : '${trimmed}${Platform.pathSeparator}flutter';
    try {
      final file = File(candidate);
      if (file.existsSync()) {
        final verRes = await Process.run(candidate, ['--version']);
        if (verRes.exitCode == 0)
          return verRes.stdout.toString().split('\n').first;
      }
    } catch (_) {}
  }

  return null;
}