anchor.diff:        assert(manifest != null),
         assert(_exampleManifest != null);
   
  -  /// Returns a future that completes with a [FlutterProject] view of the given directory
  -  /// or a ToolExit error, if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
  -  static FlutterProject fromDirectory(Directory directory) {
  -    assert(directory != null);
  -    final FlutterManifest manifest = _readManifest(
  -      directory.childFile(bundle.defaultManifestPath).path,
  -    );
  -    final FlutterManifest exampleManifest = _readManifest(
  -      _exampleDirectory(directory).childFile(bundle.defaultManifestPath).path,
  -    );
  -    return FlutterProject(directory, manifest, exampleManifest);
  -  }
  -
  -  /// Returns a future that completes with a [FlutterProject] view of the current directory.
  -  /// or a ToolExit error, if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
  +  /// Returns a [FlutterProject] view of the given directory or a ToolExit error,
  +  /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
  +  static FlutterProject fromDirectory(Directory directory) => projectFactory.fromDirectory(directory);
  +
  +  /// Returns a [FlutterProject] view of the current directory or a ToolExit error,
  +  /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
     static FlutterProject current() => fromDirectory(fs.currentDirectory);
   
  -  /// Returns a future that completes with a [FlutterProject] view of the given directory.
  -  /// or a ToolExit error, if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
  +  /// Returns a [FlutterProject] view of the given directory or a ToolExit error,
  +  /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
     static FlutterProject fromPath(String path) => fromDirectory(fs.directory(path));
   
     /// The location of this project.
  
positive.code: 
  import 'android/gradle.dart' as gradle;
  import 'base/common.dart';
  import 'base/file_system.dart';
  import 'build_info.dart';
  import 'bundle.dart' as bundle;
  
negative.code: import 'plugins.dart';
  import 'template.dart';
  import 'web/workflow.dart';
  
  FlutterProjectFactory get projectFactory => context.get<FlutterProjectFactory>() ?? const FlutterProjectFactory();
  
  class FlutterProjectFactory {
    const FlutterProjectFactory();
  
    /// Returns a [FlutterProject] view of the given directory or a ToolExit error,
    /// if `pubspec.yaml` or `example/pubspec.yaml` is invalid.
    FlutterProject fromDirectory(Directory directory) {
      assert(directory != null);
      final FlutterManifest manifest = FlutterProject._readManifest(
        directory.childFile(bundle.defaultManifestPath).path,
      );
      final FlutterManifest exampleManifest = FlutterProject._readManifest(
        FlutterProject._exampleDirectory(directory)
            .childFile(bundle.defaultManifestPath)
            .path,
      );
      return FlutterProject(directory, manifest, exampleManifest);
    }
  }
  
  /// Represents the contents of a Flutter project at the specified [directory].
  ///
  