diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml
index 8da7707..fd5c0ae 100644
--- a/.github/workflows/dart.yml
+++ b/.github/workflows/dart.yml
@@ -38,9 +38,8 @@
         run: dart analyze --fatal-infos .
       - name: Prepare Flutter
         run: |
-          git submodule init
-          git submodule update
-          export PATH=$PATH:$PWD/flutter/bin
+          dart run tool/update_sdk.dart
+          export PATH=$PATH:$PWD/flutter-sdk/bin
           flutter doctor -v
           flutter config --enable-web
       - name: Run tests
diff --git a/.gitmodules b/.gitmodules
index 37aa38f..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "flutter"]
-	path = flutter
-	url = https://github.com/flutter/flutter.git
diff --git a/.gitpod.yml b/.gitpod.yml
index 6205d4d..d2bf753 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -16,11 +16,3 @@
   - port: 9504
     onOpen: "ignore"
 
-# List the start up tasks. You can start them in parallel in multiple terminals. See https://www.gitpod.io/docs/config-start-tasks/
-tasks:
-  - init: ./flutter/bin/flutter doctor -v && pub get && grind deploy
-
-# Add the DartCode extension. See https://www.gitpod.io/docs/vscode-extensions/
-vscode:
-  extensions:
-    - Dart-Code.dart-code@3.9.0:umvoqCQMs3NpksmwhVtStw==
diff --git a/Dockerfile b/Dockerfile
index 2eeac87..119ee83 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,13 +1,6 @@
 # Keep aligned with min SDK in pubspec.yaml and .github/workflows/dart.yml.
 FROM google/dart:2.10.4
 
-# The specific commit that dart-services should use. This should be kept
-# in sync with the flutter submodule in the dart-services repo.
-# To retrieve this value, please run the following in your closest shell:
-#
-# $ (cd flutter && git rev-parse HEAD)
-ARG FLUTTER_COMMIT=5d36f2e7f5387b6c751449258ade8e4e6edf99be
-
 # We install unzip and remove the apt-index again to keep the
 # docker image diff small.
 RUN apt-get update && \
@@ -31,18 +24,11 @@
 
 ENV PATH="/home/dart/.pub-cache/bin:${PATH}"
 
-# Clone the flutter repo and set it to the same commit as the flutter submodule.
-RUN git clone https://github.com/flutter/flutter.git
-RUN cd flutter && git checkout $FLUTTER_COMMIT
-
 # Set the Flutter SDK up for web compilation.
-RUN flutter/bin/flutter doctor
-RUN flutter/bin/flutter config --enable-web
-RUN flutter/bin/flutter precache --web --no-android --no-ios --no-linux \
-  --no-windows --no-macos --no-fuchsia
+RUN dart pub run grinder setup-flutter-sdk
 
 # Build the dill file
-RUN pub run grinder build-storage-artifacts validate-storage-artifacts
+RUN dart pub run grinder build-storage-artifacts validate-storage-artifacts
 
 EXPOSE 8080
 
diff --git a/cloud_run.Dockerfile b/cloud_run.Dockerfile
index 561bc9f..c449ff3 100644
--- a/cloud_run.Dockerfile
+++ b/cloud_run.Dockerfile
@@ -1,13 +1,6 @@
 # Keep aligned with min SDK in pubspec.yaml and Dart test version in .travis.yml
 FROM google/dart:2.10.4
 
-# The specific commit that dart-services should use. This should be kept
-# in sync with the flutter submodule in the dart-services repo.
-# To retrieve this value, please run the following in your closest shell:
-#
-# $ (cd flutter && git rev-parse HEAD)
-ARG FLUTTER_COMMIT=5d36f2e7f5387b6c751449258ade8e4e6edf99be
-
 # We install unzip and remove the apt-index again to keep the
 # docker image diff small.
 RUN apt-get update && \
@@ -32,18 +25,11 @@
 
 ENV PATH="/home/dart/.pub-cache/bin:${PATH}"
 
-# Clone the flutter repo and set it to the same commit as the flutter submodule.
-RUN git clone https://github.com/flutter/flutter.git
-RUN cd flutter && git checkout $FLUTTER_COMMIT
-
 # Set the Flutter SDK up for web compilation.
-RUN flutter/bin/flutter doctor
-RUN flutter/bin/flutter config --enable-web
-RUN flutter/bin/flutter precache --web --no-android --no-ios --no-linux \
-  --no-windows --no-macos --no-fuchsia
+RUN dart pub run grinder setup-flutter-sdk
 
 # Build the dill file
-RUN pub run grinder build-storage-artifacts validate-storage-artifacts
+RUN dart pub run grinder build-storage-artifacts validate-storage-artifacts
 
 # Clear out any arguments the base images might have set and ensure we start
 # the Dart app using custom script enabling debug modes.
diff --git a/flutter b/flutter
deleted file mode 160000
index 5d36f2e..0000000
--- a/flutter
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 5d36f2e7f5387b6c751449258ade8e4e6edf99be
diff --git a/flutter-sdk-version.yaml b/flutter-sdk-version.yaml
index e1fb793..0073100 100644
--- a/flutter-sdk-version.yaml
+++ b/flutter-sdk-version.yaml
@@ -11,5 +11,5 @@
 # In order to update the SDK manually, run 'dart tool/update_sdk.dart'.
 
 flutter_sdk:
-  channel: beta
-  # version: 1.25.0-8.1.pre
+  # channel: beta
+  version: 1.25.0-8.3.pre
diff --git a/lib/src/protos/dart_services.pb.dart b/lib/src/protos/dart_services.pb.dart
index c9ee757..f718157 100644
--- a/lib/src/protos/dart_services.pb.dart
+++ b/lib/src/protos/dart_services.pb.dart
@@ -2,7 +2,7 @@
 //  Generated code. Do not modify.
 //  source: protos/dart_services.proto
 //
-// @dart = 2.3
+// @dart = 2.7
 // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
 
 import 'dart:core' as $core;
@@ -33,7 +33,19 @@
     ..hasRequiredFields = false;
 
   CompileRequest._() : super();
-  factory CompileRequest() => create();
+  factory CompileRequest({
+    $core.String source,
+    $core.bool returnSourceMap,
+  }) {
+    final _result = create();
+    if (source != null) {
+      _result.source = source;
+    }
+    if (returnSourceMap != null) {
+      _result.returnSourceMap = returnSourceMap;
+    }
+    return _result;
+  }
   factory CompileRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -104,7 +116,15 @@
     ..hasRequiredFields = false;
 
   CompileDDCRequest._() : super();
-  factory CompileDDCRequest() => create();
+  factory CompileDDCRequest({
+    $core.String source,
+  }) {
+    final _result = create();
+    if (source != null) {
+      _result.source = source;
+    }
+    return _result;
+  }
   factory CompileDDCRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -169,7 +189,19 @@
     ..hasRequiredFields = false;
 
   SourceRequest._() : super();
-  factory SourceRequest() => create();
+  factory SourceRequest({
+    $core.String source,
+    $core.int offset,
+  }) {
+    final _result = create();
+    if (source != null) {
+      _result.source = source;
+    }
+    if (offset != null) {
+      _result.offset = offset;
+    }
+    return _result;
+  }
   factory SourceRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -243,7 +275,23 @@
     ..hasRequiredFields = false;
 
   AnalysisResults._() : super();
-  factory AnalysisResults() => create();
+  factory AnalysisResults({
+    $core.Iterable<AnalysisIssue> issues,
+    $core.Iterable<$core.String> packageImports,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (issues != null) {
+      _result.issues.addAll(issues);
+    }
+    if (packageImports != null) {
+      _result.packageImports.addAll(packageImports);
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory AnalysisResults.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -325,7 +373,39 @@
     ..hasRequiredFields = false;
 
   AnalysisIssue._() : super();
-  factory AnalysisIssue() => create();
+  factory AnalysisIssue({
+    $core.String kind,
+    $core.int line,
+    $core.String message,
+    $core.String sourceName,
+    $core.bool hasFixes,
+    $core.int charStart,
+    $core.int charLength,
+  }) {
+    final _result = create();
+    if (kind != null) {
+      _result.kind = kind;
+    }
+    if (line != null) {
+      _result.line = line;
+    }
+    if (message != null) {
+      _result.message = message;
+    }
+    if (sourceName != null) {
+      _result.sourceName = sourceName;
+    }
+    if (hasFixes != null) {
+      _result.hasFixes = hasFixes;
+    }
+    if (charStart != null) {
+      _result.charStart = charStart;
+    }
+    if (charLength != null) {
+      _result.charLength = charLength;
+    }
+    return _result;
+  }
   factory AnalysisIssue.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -506,7 +586,23 @@
     ..hasRequiredFields = false;
 
   CompileResponse._() : super();
-  factory CompileResponse() => create();
+  factory CompileResponse({
+    $core.String result,
+    $core.String sourceMap,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (result != null) {
+      _result.result = result;
+    }
+    if (sourceMap != null) {
+      _result.sourceMap = sourceMap;
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory CompileResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -599,7 +695,23 @@
     ..hasRequiredFields = false;
 
   CompileDDCResponse._() : super();
-  factory CompileDDCResponse() => create();
+  factory CompileDDCResponse({
+    $core.String result,
+    $core.String modulesBaseUrl,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (result != null) {
+      _result.result = result;
+    }
+    if (modulesBaseUrl != null) {
+      _result.modulesBaseUrl = modulesBaseUrl;
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory CompileDDCResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -691,7 +803,19 @@
     ..hasRequiredFields = false;
 
   DocumentResponse._() : super();
-  factory DocumentResponse() => create();
+  factory DocumentResponse({
+    $core.Map<$core.String, $core.String> info,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (info != null) {
+      _result.info.addAll(info);
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory DocumentResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -760,7 +884,27 @@
     ..hasRequiredFields = false;
 
   CompleteResponse._() : super();
-  factory CompleteResponse() => create();
+  factory CompleteResponse({
+    $core.int replacementOffset,
+    $core.int replacementLength,
+    $core.Iterable<Completion> completions,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (replacementOffset != null) {
+      _result.replacementOffset = replacementOffset;
+    }
+    if (replacementLength != null) {
+      _result.replacementLength = replacementLength;
+    }
+    if (completions != null) {
+      _result.completions.addAll(completions);
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory CompleteResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -852,7 +996,15 @@
     ..hasRequiredFields = false;
 
   Completion._() : super();
-  factory Completion() => create();
+  factory Completion({
+    $core.Map<$core.String, $core.String> completion,
+  }) {
+    final _result = create();
+    if (completion != null) {
+      _result.completion.addAll(completion);
+    }
+    return _result;
+  }
   factory Completion.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -906,7 +1058,19 @@
     ..hasRequiredFields = false;
 
   FixesResponse._() : super();
-  factory FixesResponse() => create();
+  factory FixesResponse({
+    $core.Iterable<ProblemAndFixes> fixes,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (fixes != null) {
+      _result.fixes.addAll(fixes);
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory FixesResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -976,7 +1140,27 @@
     ..hasRequiredFields = false;
 
   ProblemAndFixes._() : super();
-  factory ProblemAndFixes() => create();
+  factory ProblemAndFixes({
+    $core.Iterable<CandidateFix> fixes,
+    $core.String problemMessage,
+    $core.int offset,
+    $core.int length,
+  }) {
+    final _result = create();
+    if (fixes != null) {
+      _result.fixes.addAll(fixes);
+    }
+    if (problemMessage != null) {
+      _result.problemMessage = problemMessage;
+    }
+    if (offset != null) {
+      _result.offset = offset;
+    }
+    if (length != null) {
+      _result.length = length;
+    }
+    return _result;
+  }
   factory ProblemAndFixes.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1071,7 +1255,27 @@
     ..hasRequiredFields = false;
 
   CandidateFix._() : super();
-  factory CandidateFix() => create();
+  factory CandidateFix({
+    $core.String message,
+    $core.Iterable<SourceEdit> edits,
+    $core.int selectionOffset,
+    $core.Iterable<LinkedEditGroup> linkedEditGroups,
+  }) {
+    final _result = create();
+    if (message != null) {
+      _result.message = message;
+    }
+    if (edits != null) {
+      _result.edits.addAll(edits);
+    }
+    if (selectionOffset != null) {
+      _result.selectionOffset = selectionOffset;
+    }
+    if (linkedEditGroups != null) {
+      _result.linkedEditGroups.addAll(linkedEditGroups);
+    }
+    return _result;
+  }
   factory CandidateFix.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1157,7 +1361,23 @@
     ..hasRequiredFields = false;
 
   SourceEdit._() : super();
-  factory SourceEdit() => create();
+  factory SourceEdit({
+    $core.int offset,
+    $core.int length,
+    $core.String replacement,
+  }) {
+    final _result = create();
+    if (offset != null) {
+      _result.offset = offset;
+    }
+    if (length != null) {
+      _result.length = length;
+    }
+    if (replacement != null) {
+      _result.replacement = replacement;
+    }
+    return _result;
+  }
   factory SourceEdit.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1250,7 +1470,23 @@
     ..hasRequiredFields = false;
 
   LinkedEditGroup._() : super();
-  factory LinkedEditGroup() => create();
+  factory LinkedEditGroup({
+    $core.Iterable<$core.int> positions,
+    $core.int length,
+    $core.Iterable<LinkedEditSuggestion> suggestions,
+  }) {
+    final _result = create();
+    if (positions != null) {
+      _result.positions.addAll(positions);
+    }
+    if (length != null) {
+      _result.length = length;
+    }
+    if (suggestions != null) {
+      _result.suggestions.addAll(suggestions);
+    }
+    return _result;
+  }
   factory LinkedEditGroup.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1320,7 +1556,19 @@
     ..hasRequiredFields = false;
 
   LinkedEditSuggestion._() : super();
-  factory LinkedEditSuggestion() => create();
+  factory LinkedEditSuggestion({
+    $core.String value,
+    $core.String kind,
+  }) {
+    final _result = create();
+    if (value != null) {
+      _result.value = value;
+    }
+    if (kind != null) {
+      _result.kind = kind;
+    }
+    return _result;
+  }
   factory LinkedEditSuggestion.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1399,7 +1647,23 @@
     ..hasRequiredFields = false;
 
   FormatResponse._() : super();
-  factory FormatResponse() => create();
+  factory FormatResponse({
+    $core.String newString,
+    $core.int offset,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (newString != null) {
+      _result.newString = newString;
+    }
+    if (offset != null) {
+      _result.offset = offset;
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory FormatResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1489,7 +1753,19 @@
     ..hasRequiredFields = false;
 
   AssistsResponse._() : super();
-  factory AssistsResponse() => create();
+  factory AssistsResponse({
+    $core.Iterable<CandidateFix> assists,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (assists != null) {
+      _result.assists.addAll(assists);
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory AssistsResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1561,7 +1837,47 @@
     ..hasRequiredFields = false;
 
   VersionResponse._() : super();
-  factory VersionResponse() => create();
+  factory VersionResponse({
+    $core.String sdkVersion,
+    $core.String sdkVersionFull,
+    $core.String runtimeVersion,
+    $core.String appEngineVersion,
+    $core.String servicesVersion,
+    $core.String flutterVersion,
+    $core.String flutterDartVersion,
+    $core.String flutterDartVersionFull,
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (sdkVersion != null) {
+      _result.sdkVersion = sdkVersion;
+    }
+    if (sdkVersionFull != null) {
+      _result.sdkVersionFull = sdkVersionFull;
+    }
+    if (runtimeVersion != null) {
+      _result.runtimeVersion = runtimeVersion;
+    }
+    if (appEngineVersion != null) {
+      _result.appEngineVersion = appEngineVersion;
+    }
+    if (servicesVersion != null) {
+      _result.servicesVersion = servicesVersion;
+    }
+    if (flutterVersion != null) {
+      _result.flutterVersion = flutterVersion;
+    }
+    if (flutterDartVersion != null) {
+      _result.flutterDartVersion = flutterDartVersion;
+    }
+    if (flutterDartVersionFull != null) {
+      _result.flutterDartVersionFull = flutterDartVersionFull;
+    }
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory VersionResponse.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1719,7 +2035,15 @@
     ..hasRequiredFields = false;
 
   BadRequest._() : super();
-  factory BadRequest() => create();
+  factory BadRequest({
+    ErrorMessage error,
+  }) {
+    final _result = create();
+    if (error != null) {
+      _result.error = error;
+    }
+    return _result;
+  }
   factory BadRequest.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
@@ -1779,7 +2103,15 @@
     ..hasRequiredFields = false;
 
   ErrorMessage._() : super();
-  factory ErrorMessage() => create();
+  factory ErrorMessage({
+    $core.String message,
+  }) {
+    final _result = create();
+    if (message != null) {
+      _result.message = message;
+    }
+    return _result;
+  }
   factory ErrorMessage.fromBuffer($core.List<$core.int> i,
           [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
       create()..mergeFromBuffer(i, r);
diff --git a/lib/src/protos/dart_services.pbenum.dart b/lib/src/protos/dart_services.pbenum.dart
index ad2ace1..9598e3e 100644
--- a/lib/src/protos/dart_services.pbenum.dart
+++ b/lib/src/protos/dart_services.pbenum.dart
@@ -2,5 +2,5 @@
 //  Generated code. Do not modify.
 //  source: protos/dart_services.proto
 //
-// @dart = 2.3
+// @dart = 2.7
 // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
diff --git a/lib/src/protos/dart_services.pbjson.dart b/lib/src/protos/dart_services.pbjson.dart
index 1a9d571..b85ece2 100644
--- a/lib/src/protos/dart_services.pbjson.dart
+++ b/lib/src/protos/dart_services.pbjson.dart
@@ -2,7 +2,7 @@
 //  Generated code. Do not modify.
 //  source: protos/dart_services.proto
 //
-// @dart = 2.3
+// @dart = 2.7
 // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
 
 const CompileRequest$json = {
diff --git a/lib/src/protos/dart_services.pbserver.dart b/lib/src/protos/dart_services.pbserver.dart
index a31ab16..d9e5442 100644
--- a/lib/src/protos/dart_services.pbserver.dart
+++ b/lib/src/protos/dart_services.pbserver.dart
@@ -2,7 +2,7 @@
 //  Generated code. Do not modify.
 //  source: protos/dart_services.proto
 //
-// @dart = 2.3
+// @dart = 2.7
 // ignore_for_file: annotate_overrides,camel_case_types,unnecessary_const,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type,unnecessary_this,prefer_final_fields
 
 export 'dart_services.pb.dart';
diff --git a/lib/src/sdk_manager.dart b/lib/src/sdk_manager.dart
index 5ea8fa6..af9a071 100644
--- a/lib/src/sdk_manager.dart
+++ b/lib/src/sdk_manager.dart
@@ -64,10 +64,12 @@
   String get sdkPath => path.dirname(path.dirname(Platform.resolvedExecutable));
 }
 
+/// The Flutter SDK is asuumed to be available at `./flutter-sdk/`.
+final flutterSdkPath =
+    Directory(path.join(Directory.current.path, 'flutter-sdk'));
+
 /// Represents a Flutter SDK installation (which includes its own version of the
 /// Dart SDK) present on the server.
-///
-/// This class assumes the Flutter SDK is available at `./flutter`.
 class FlutterSdk extends Sdk {
   String _versionFull = '';
   String _flutterVersion = '';
@@ -77,16 +79,14 @@
     _versionFull =
         (await File(path.join(sdkPath, 'version')).readAsString()).trim();
     _flutterVersion =
-        (await File(path.join(Directory.current.path, 'flutter', 'version'))
-                .readAsString())
+        (await File(path.join(flutterSdkPath.path, 'version')).readAsString())
             .trim();
   }
 
   @override
   String get sdkPath => path.join(flutterBinPath, 'cache', 'dart-sdk');
 
-  String get flutterBinPath =>
-      path.join(Directory.current.path, 'flutter', 'bin');
+  String get flutterBinPath => path.join(flutterSdkPath.path, 'bin');
 
   @override
   String get versionFull => _versionFull;
diff --git a/pubspec.lock b/pubspec.lock
index a6cee27..cec5131 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -36,6 +36,13 @@
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.12.0"
+  archive:
+    dependency: transitive
+    description:
+      name: archive
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "2.0.13"
   args:
     dependency: "direct main"
     description:
@@ -49,7 +56,7 @@
       name: async
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.4.2"
+    version: "2.5.0"
   bazel_worker:
     dependency: "direct main"
     description:
@@ -63,14 +70,14 @@
       name: boolean_selector
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.0"
+    version: "2.1.0"
   build:
     dependency: transitive
     description:
       name: build
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.0"
+    version: "1.6.2"
   build_config:
     dependency: transitive
     description:
@@ -84,28 +91,28 @@
       name: build_daemon
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.1.4"
+    version: "2.1.7"
   build_resolvers:
     dependency: transitive
     description:
       name: build_resolvers
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.5.1"
+    version: "1.5.3"
   build_runner:
     dependency: "direct dev"
     description:
       name: build_runner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.10.11"
+    version: "1.11.1"
   build_runner_core:
     dependency: transitive
     description:
       name: build_runner_core
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "6.1.5"
+    version: "6.1.7"
   built_collection:
     dependency: transitive
     description:
@@ -126,7 +133,7 @@
       name: charcode
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.3"
+    version: "1.2.0"
   checked_yaml:
     dependency: transitive
     description:
@@ -141,27 +148,34 @@
       url: "https://pub.dartlang.org"
     source: hosted
     version: "0.2.0"
+  clock:
+    dependency: transitive
+    description:
+      name: clock
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.1.0"
   code_builder:
     dependency: transitive
     description:
       name: code_builder
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "3.5.0"
+    version: "3.6.0"
   codemirror:
     dependency: "direct dev"
     description:
       name: codemirror
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.5.23+5.59.1"
+    version: "0.5.24+5.59.2"
   collection:
     dependency: transitive
     description:
       name: collection
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.14.13"
+    version: "1.15.0"
   convert:
     dependency: transitive
     description:
@@ -238,7 +252,7 @@
       name: googleapis_auth
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.12"
+    version: "0.2.12+1"
   graphs:
     dependency: transitive
     description:
@@ -259,7 +273,7 @@
       name: grpc
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.8.0"
+    version: "2.9.0"
   http:
     dependency: "direct main"
     description:
@@ -308,7 +322,7 @@
       name: intl
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.16.1"
+    version: "0.17.0"
   io:
     dependency: transitive
     description:
@@ -322,7 +336,7 @@
       name: js
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.6.2"
+    version: "0.6.3"
   json_annotation:
     dependency: transitive
     description:
@@ -350,7 +364,7 @@
       name: meta
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.4"
+    version: "1.3.0"
   mime:
     dependency: transitive
     description:
@@ -385,7 +399,7 @@
       name: node_preamble
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.12"
+    version: "1.4.13"
   package_config:
     dependency: transitive
     description:
@@ -399,7 +413,7 @@
       name: path
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.7.0"
+    version: "1.8.0"
   pedantic:
     dependency: "direct dev"
     description:
@@ -413,7 +427,7 @@
       name: pool
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.0"
+    version: "1.5.0"
   protobuf:
     dependency: "direct main"
     description:
@@ -455,7 +469,7 @@
       name: shelf_packages_handler
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.0"
+    version: "2.0.1"
   shelf_router:
     dependency: "direct main"
     description:
@@ -469,21 +483,21 @@
       name: shelf_router_generator
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.7.2+3"
+    version: "0.7.2+4"
   shelf_static:
     dependency: transitive
     description:
       name: shelf_static
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.9+1"
+    version: "0.2.9+2"
   shelf_web_socket:
     dependency: transitive
     description:
       name: shelf_web_socket
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.2.3"
+    version: "0.2.4"
   source_gen:
     dependency: transitive
     description:
@@ -497,35 +511,35 @@
       name: source_map_stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.0"
+    version: "2.1.0"
   source_maps:
     dependency: transitive
     description:
       name: source_maps
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "0.10.9"
+    version: "0.10.10"
   source_span:
     dependency: transitive
     description:
       name: source_span
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.7.0"
+    version: "1.8.0"
   stack_trace:
     dependency: transitive
     description:
       name: stack_trace
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.9.6"
+    version: "1.10.0"
   stream_channel:
     dependency: transitive
     description:
       name: stream_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.0.0"
+    version: "2.1.0"
   stream_transform:
     dependency: transitive
     description:
@@ -539,7 +553,7 @@
       name: string_scanner
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.0.5"
+    version: "1.1.0"
   synchronized:
     dependency: "direct dev"
     description:
@@ -553,7 +567,7 @@
       name: term_glyph
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.2.0"
   test:
     dependency: "direct dev"
     description:
@@ -588,7 +602,7 @@
       name: typed_data
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.2.0"
+    version: "1.3.0"
   vm_service:
     dependency: transitive
     description:
@@ -609,7 +623,7 @@
       name: web_socket_channel
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "1.2.0"
   webkit_inspection_protocol:
     dependency: transitive
     description:
@@ -625,4 +639,4 @@
     source: hosted
     version: "2.2.1"
 sdks:
-  dart: ">=2.10.4 <3.0.0"
+  dart: ">=2.12.0-0.0 <3.0.0"
diff --git a/tool/grind.dart b/tool/grind.dart
index 0beb8de..f51df71 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -156,14 +156,12 @@
 }
 
 Future _buildStorageArtifacts(Directory dir) async {
-  final flutterSdkPath =
-      Directory(path.join(Directory.current.path, 'flutter'));
   final pubspec = createPubspec(includeFlutterWeb: true);
   joinFile(dir, ['pubspec.yaml']).writeAsStringSync(pubspec);
 
   // run flutter pub get
   await runWithLogging(
-    path.join(flutterSdkPath.path, 'bin/flutter'),
+    path.join(flutterSdkPath.path, 'bin', 'flutter'),
     arguments: ['pub', 'get'],
     workingDirectory: dir.path,
   );
@@ -196,7 +194,7 @@
     }
   }
 
-  // Make sure flutter/bin/cache/flutter_web_sdk/flutter_web_sdk/kernel/flutter_ddc_sdk.dill
+  // Make sure flutter-sdk/bin/cache/flutter_web_sdk/flutter_web_sdk/kernel/flutter_ddc_sdk.dill
   // is installed.
   await runWithLogging(
     path.join(flutterSdkPath.path, 'bin', 'flutter'),
@@ -207,10 +205,10 @@
   // Build the artifacts using DDC:
   // dart-sdk/bin/dartdevc -s kernel/flutter_ddc_sdk.dill
   //     --modules=amd package:flutter/animation.dart ...
-  final compilerPath =
-      path.join(flutterSdkPath.path, 'bin/cache/dart-sdk/bin/dartdevc');
-  final dillPath = path.join(flutterSdkPath.path,
-      'bin/cache/flutter_web_sdk/flutter_web_sdk/kernel/flutter_ddc_sdk.dill');
+  final compilerPath = path.join(
+      flutterSdkPath.path, 'bin', 'cache', 'dart-sdk', 'bin', 'dartdevc');
+  final dillPath = path.join(flutterSdkPath.path, 'bin', 'cache',
+      'flutter_web_sdk', 'flutter_web_sdk', 'kernel', 'flutter_ddc_sdk.dill');
 
   final args = <String>[
     '-s',
@@ -246,33 +244,30 @@
 }
 
 @Task('Delete, re-download, and reinitialize the Flutter submodule.')
-void setupFlutterSubmodule() async {
-  final flutterDir = Directory('flutter');
+void setupFlutterSdk() async {
+  await flutterSdkPath.delete(recursive: true);
 
-  // Remove all files currently in the submodule. This is done to clear any
-  // internal state the Flutter/Dart SDKs may have created on their own.
-  flutterDir.listSync().forEach((e) => e.deleteSync(recursive: true));
+  final info = DownloadingSdkManager.getSdkConfigInfo();
+  print('Flutter SDK configuration: $info\n');
 
-  // Pull clean files into the submodule, based on whatever commit it's set to.
+  // Download the SDK into ./futter-sdk/
+  await DownloadingSdkManager().createFromConfigFile();
+
+  // Set up the  Flutter SDK the way dart-services needs it.
+
+  final flutterBinFlutter = path.join(flutterSdkPath.path, 'bin', 'flutter');
   await runWithLogging(
-    'git',
-    arguments: ['submodule', 'update'],
-  );
-
-  // Set up the submodule's copy of the Flutter SDK the way dart-services needs
-  // it.
-  await runWithLogging(
-    path.join(flutterDir.path, 'bin/flutter'),
+    flutterBinFlutter,
     arguments: ['doctor'],
   );
 
   await runWithLogging(
-    path.join(flutterDir.path, 'bin/flutter'),
+    flutterBinFlutter,
     arguments: ['config', '--enable-web'],
   );
 
   await runWithLogging(
-    path.join(flutterDir.path, 'bin/flutter'),
+    flutterBinFlutter,
     arguments: [
       'precache',
       '--web',
@@ -292,8 +287,8 @@
 }
 
 @Task('Update generated files and run all checks prior to deployment')
-@Depends(setupFlutterSubmodule, updateDockerVersion, generateProtos, analyze,
-    test, fuzz, validateStorageArtifacts)
+@Depends(setupFlutterSdk, updateDockerVersion, generateProtos, analyze, test,
+    fuzz, validateStorageArtifacts)
 void deploy() {
   log('Run: gcloud app deploy --project=dart-services --no-promote');
 }
