getDartVersionSync static method

String getDartVersionSync()

Returns the installed Dart SDK version string or a sensible fallback.

Runs dart --version and parses the output to extract a semantic version (major.minor.patch). If detection fails this returns the fallback ^3.6.0 which is used by the CLI as the minimum supported SDK.

Returns:

  • String: detected version (e.g. 3.10.8) or the fallback ^3.6.0.

Throws:

  • Exception when a version is detected but is lower than 3.6.0.

Implementation

static String getDartVersionSync() {
  const minimumVersion = '^3.6.0';

  try {
    print('🔍 Checking Dart version...');
    final result = Process.runSync('dart', ['--version']);
    if (result.exitCode != 0) return minimumVersion;
    final out = '${result.stdout}\n${result.stderr}';

    final match =
        RegExp(
          r'Dart\s+SDK\s+version:\s*([0-9]+(?:\.[0-9]+)*)',
          caseSensitive: false,
        ).firstMatch(out) ??
        RegExp(
          r'Dart\s+([0-9]+(?:\.[0-9]+)*)',
          caseSensitive: false,
        ).firstMatch(out);

    if (match != null) {
      final version = match.group(1)!;
      _validateDartVersion(version);
      print('✅ Dart version: $version');
      return version;
    }

    print('✅ Dart version: $minimumVersion');
    return minimumVersion;
  } catch (_) {
    return minimumVersion;
  }
}