Fix hot reload failure handling
diff --git a/packages/flutter_tools/lib/src/flx.dart b/packages/flutter_tools/lib/src/flx.dart index 7b01689..d28e65c 100644 --- a/packages/flutter_tools/lib/src/flx.dart +++ b/packages/flutter_tools/lib/src/flx.dart
@@ -211,7 +211,7 @@ // splitting each one into each component license (so that we can // de-dupe if possible). final Set<String> packageLicenses = new Set<String>(); - final List<Uri> packages = packageMap.map.values; + final Iterable<Uri> packages = packageMap.map.values; for (Uri package in packages) { if (package != null && package.scheme == 'file') { final File file = new File.fromUri(package.resolve('../LICENSE'));
diff --git a/packages/flutter_tools/lib/src/observatory.dart b/packages/flutter_tools/lib/src/observatory.dart index bc6a315..c04c9b9 100644 --- a/packages/flutter_tools/lib/src/observatory.dart +++ b/packages/flutter_tools/lib/src/observatory.dart
@@ -114,17 +114,13 @@ }); } - Future<Response> reloadSources(String isolateId) async { - Completer<Event> whenIsolateReloads = new Completer<Event>(); - StreamSubscription<Event> sub = onIsolateEvent - .where((Event event) => event.kind == 'IsolateReload') - .listen((Event event) => whenIsolateReloads.complete(event)); - + Future<Null> reloadSources(String isolateId) async { try { - await sendRequest('_reloadSources', <String, dynamic>{ 'isolateId': isolateId }); - return await whenIsolateReloads.future.timeout(new Duration(seconds: 20)); - } finally { - await sub.cancel(); + await sendRequest('_reloadSources', + <String, dynamic>{ 'isolateId': isolateId }); + return null; + } catch (e) { + return new Future<Null>.error(e.data['details']); } }
diff --git a/packages/flutter_tools/lib/src/run.dart b/packages/flutter_tools/lib/src/run.dart index 959364d..d261c70 100644 --- a/packages/flutter_tools/lib/src/run.dart +++ b/packages/flutter_tools/lib/src/run.dart
@@ -378,13 +378,14 @@ await _updateDevFS(); } Status reloadStatus = logger.startProgress('Performing hot reload'); - Event result = await observatory.reloadSources(observatory.firstIsolateId); - reloadStatus.stop(showElapsedTime: true); - dynamic error = result.response['reloadError']; - if (error != null) { - printError('Error reloading application sources: $error'); + try { + await observatory.reloadSources(observatory.firstIsolateId); + } catch (errorMessage) { + reloadStatus.stop(showElapsedTime: true); + printError('Hot reload was rejected:\n$errorMessage'); return false; } + reloadStatus.stop(showElapsedTime: true); Status reassembleStatus = logger.startProgress('Reassembling application'); await observatory.flutterReassemble(observatory.firstIsolateId);