diff --git a/analysis_options.yaml b/analysis_options.yaml
index a747c44..1a9208e 100644
--- a/analysis_options.yaml
+++ b/analysis_options.yaml
@@ -14,6 +14,7 @@
 
 linter:
   rules:
+    - await_only_futures
     - directives_ordering
     - prefer_final_fields
     - prefer_final_in_for_each
diff --git a/lib/src/sdk_manager.dart b/lib/src/sdk_manager.dart
index af9a071..1e38eae 100644
--- a/lib/src/sdk_manager.dart
+++ b/lib/src/sdk_manager.dart
@@ -15,7 +15,7 @@
   static Sdk get sdk => _sdk ?? (_sdk = PlatformSdk());
 
   static FlutterSdk get flutterSdk =>
-      _flutterSdk ?? (_flutterSdk = FlutterSdk());
+      _flutterSdk ?? (_flutterSdk = FlutterSdk(flutterSdkPath));
 
   static void setSdk(Sdk value) {
     _sdk = sdk;
@@ -64,29 +64,30 @@
   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'));
+String get flutterSdkPath => 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.
 class FlutterSdk extends Sdk {
+  final String flutterSdkPath;
+
   String _versionFull = '';
   String _flutterVersion = '';
 
+  FlutterSdk(this.flutterSdkPath);
+
   @override
   Future<void> init() async {
     _versionFull =
-        (await File(path.join(sdkPath, 'version')).readAsString()).trim();
+        (File(path.join(sdkPath, 'version')).readAsStringSync()).trim();
     _flutterVersion =
-        (await File(path.join(flutterSdkPath.path, 'version')).readAsString())
-            .trim();
+        (File(path.join(flutterSdkPath, 'version')).readAsStringSync()).trim();
   }
 
   @override
   String get sdkPath => path.join(flutterBinPath, 'cache', 'dart-sdk');
 
-  String get flutterBinPath => path.join(flutterSdkPath.path, 'bin');
+  String get flutterBinPath => path.join(flutterSdkPath, 'bin');
 
   @override
   String get versionFull => _versionFull;
@@ -94,8 +95,6 @@
   String get flutterVersion => _flutterVersion;
 }
 
-// TODO: Have an option to skip git calls (for testing)?
-// TODO(devoncarew): Collapse this with the other SDK managers.
 class DownloadingSdkManager {
   DownloadingSdkManager();
 
@@ -111,7 +110,7 @@
   /// `flutter-sdk-version.yaml` file.
   ///
   /// Note that this is an expensive operation.
-  Future<DownloadedFlutterSdk> createFromConfigFile() async {
+  Future<FlutterSdk> createFromConfigFile() async {
     final Map<String, Object> sdkConfig = getSdkConfigInfo();
 
     // flutter_sdk:
@@ -134,7 +133,7 @@
       return createUsingFlutterVersion(version: config['version'] as String);
     } else {
       // Clone the repo if necessary but don't do any other setup.
-      return _cloneSdkIfNecessary();
+      return (await _cloneSdkIfNecessary()).asFlutterSdk();
     }
   }
 
@@ -142,10 +141,10 @@
   /// channel.
   ///
   /// Note that this is an expensive operation.
-  Future<DownloadedFlutterSdk> createUsingFlutterChannel({
+  Future<FlutterSdk> createUsingFlutterChannel({
     @required String channel,
   }) async {
-    final DownloadedFlutterSdk sdk = await _cloneSdkIfNecessary();
+    final _DownloadedFlutterSdk sdk = await _cloneSdkIfNecessary();
 
     // git checkout master
     await sdk.checkout('master');
@@ -160,17 +159,17 @@
     // git pull
     await sdk.pull();
 
-    return sdk;
+    return sdk.asFlutterSdk();
   }
 
   /// Create a Flutter SDK in `flutter-sdk/` that tracks a specific Flutter
   /// version.
   ///
   /// Note that this is an expensive operation.
-  Future<DownloadedFlutterSdk> createUsingFlutterVersion({
+  Future<FlutterSdk> createUsingFlutterVersion({
     @required String version,
   }) async {
-    final DownloadedFlutterSdk sdk = await _cloneSdkIfNecessary();
+    final _DownloadedFlutterSdk sdk = await _cloneSdkIfNecessary();
 
     // git checkout master
     await sdk.checkout('master');
@@ -179,11 +178,11 @@
     // git checkout 1.25.0-8.1.pre
     await sdk.checkout(version);
 
-    return sdk;
+    return sdk.asFlutterSdk();
   }
 
-  Future<DownloadedFlutterSdk> _cloneSdkIfNecessary() async {
-    final DownloadedFlutterSdk sdk = DownloadedFlutterSdk();
+  Future<_DownloadedFlutterSdk> _cloneSdkIfNecessary() async {
+    final _DownloadedFlutterSdk sdk = _DownloadedFlutterSdk(flutterSdkPath);
 
     if (!Directory(sdk.flutterSdkPath).existsSync()) {
       // This takes perhaps ~20 seconds.
@@ -203,22 +202,23 @@
   }
 }
 
-class DownloadedFlutterSdk extends Sdk {
-  @override
+class _DownloadedFlutterSdk {
+  final String flutterSdkPath;
+
+  _DownloadedFlutterSdk(this.flutterSdkPath);
+
   Future<void> init() async {
     // flutter --version takes ~28s
     await _execLog('bin/flutter', ['--version'], flutterSdkPath);
   }
 
-  @override
+  FlutterSdk asFlutterSdk() => FlutterSdk(flutterSdkPath);
+
   String get sdkPath => path.join(flutterSdkPath, 'bin/cache/dart-sdk');
 
-  @override
   String get versionFull =>
       File(path.join(sdkPath, 'version')).readAsStringSync().trim();
 
-  String get flutterSdkPath => path.join(Directory.current.path, 'flutter-sdk');
-
   String get flutterVersion =>
       File(path.join(flutterSdkPath, 'version')).readAsStringSync().trim();
 
diff --git a/tool/grind.dart b/tool/grind.dart
index f51df71..7c0c66f 100644
--- a/tool/grind.dart
+++ b/tool/grind.dart
@@ -161,7 +161,7 @@
 
   // run flutter pub get
   await runWithLogging(
-    path.join(flutterSdkPath.path, 'bin', 'flutter'),
+    path.join(flutterSdkPath, 'bin', 'flutter'),
     arguments: ['pub', 'get'],
     workingDirectory: dir.path,
   );
@@ -197,7 +197,7 @@
   // 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'),
+    path.join(flutterSdkPath, 'bin', 'flutter'),
     arguments: ['precache', '--web'],
     workingDirectory: dir.path,
   );
@@ -205,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, 'bin', 'cache', 'dart-sdk', 'bin', 'dartdevc');
+  final dillPath = path.join(flutterSdkPath, 'bin', 'cache', 'flutter_web_sdk',
+      'flutter_web_sdk', 'kernel', 'flutter_ddc_sdk.dill');
 
   final args = <String>[
     '-s',
@@ -229,7 +229,7 @@
   final artifactsDir = getDir('artifacts');
   await artifactsDir.create();
 
-  final sdkJsPath = path.join(flutterSdkPath.path,
+  final sdkJsPath = path.join(flutterSdkPath,
       'bin/cache/flutter_web_sdk/flutter_web_sdk/kernel/amd/dart_sdk.js');
 
   copy(getFile(sdkJsPath), artifactsDir);
@@ -245,7 +245,7 @@
 
 @Task('Delete, re-download, and reinitialize the Flutter submodule.')
 void setupFlutterSdk() async {
-  await flutterSdkPath.delete(recursive: true);
+  await Directory(flutterSdkPath).delete(recursive: true);
 
   final info = DownloadingSdkManager.getSdkConfigInfo();
   print('Flutter SDK configuration: $info\n');
@@ -255,7 +255,7 @@
 
   // Set up the  Flutter SDK the way dart-services needs it.
 
-  final flutterBinFlutter = path.join(flutterSdkPath.path, 'bin', 'flutter');
+  final flutterBinFlutter = path.join(flutterSdkPath, 'bin', 'flutter');
   await runWithLogging(
     flutterBinFlutter,
     arguments: ['doctor'],
diff --git a/tool/update_sdk.dart b/tool/update_sdk.dart
index 583f98d..c375be6 100644
--- a/tool/update_sdk.dart
+++ b/tool/update_sdk.dart
@@ -12,7 +12,7 @@
   print('configuration: $info\n');
 
   final DownloadingSdkManager sdkManager = DownloadingSdkManager();
-  final DownloadedFlutterSdk sdk = await sdkManager.createFromConfigFile();
+  final FlutterSdk sdk = await sdkManager.createFromConfigFile();
 
   print('\nSDK setup complete (${sdk.flutterSdkPath}).');
 }
