anchor.diff:  import 'dart:async';
   import 'dart:io';
   
  +import '../base/os.dart';
   import '../base/process.dart';
   import '../globals.dart';
   import 'run.dart';
   
   class ListenCommand extends RunCommandBase {
  +  ListenCommand({ this.singleRun: false });
  +
     @override
     final String name = 'listen';
   
     @override
  -  final String description =
  -    'Listen for changes to files and reload the running app (Android only).';
  +  final String description = 'Listen for changes to files and reload the running app.';
   
     @override
     final String usageFooter =
       'By default, only listens to "./" and "./lib/". To listen to additional directories, list them on\n'
       'the command line.';
   
  -  /// Only run once.  Used for testing.
  +  /// Only run once. Used for testing.
     final bool singleRun;
  -
  -  ListenCommand({ this.singleRun: false });
  -
  -  @override
  -  bool get androidOnly => true;
   
     @override
     bool get requiresDevice => true;
  
positive.code:     await downloadApplicationPackages();
      await downloadToolchain();
  
      List<String> watchCommand = _constructWatchCommand(() sync* {
        yield* argResults.rest;
        yield '.';
        yield 'lib';
      }());
  
      int result = 0;
      bool firstTime = true;
      do {
        printStatus('Updating running Flutter apps...');
        result = await startApp(
          deviceForCommand,
          applicationPackages,
  
negative.code:       );
        firstTime = false;
      } while (!singleRun && result == 0 && _watchDirectory(watchCommand));
  
      return 0;
    }
  
    List<String> _constructWatchCommand(Iterable<String> directories) {
      if (Platform.isMacOS) {
        if (os.which('fswatch') == null) {
          printError('"listen" command is only useful if you have installed '
            'fswatch on Mac. Run "brew install fswatch" to install it with homebrew.');
          return null;
        } else {
          return <String>['fswatch', '-r', '-v', '-1']..addAll(directories);
        }
      } else if (Platform.isLinux) {
        if (os.which('inotifywait') == null) {
          printError('"listen" command is only useful if you have installed '
            'inotifywait on Linux. Run "apt-get install inotify-tools" or '
            'equivalent to install it.');
          return null;
        } else {
          return <String>[
            'inotifywait',
            '-r',
            '-e',
            // Only listen for events that matter, to avoid triggering constantly
            // from the editor watching files.
            'modify,close_write,move,create,delete',
          ]..addAll(directories);
        }
      } else {
        printError('"listen" command is only available on Mac and Linux.');
      }
  
      return null;
    }
  
    bool _watchDirectory(List<String> watchCommand) {
      assert(watchCommand != null);
      try {
        runCheckedSync(watchCommand);
  