Loader improvements (#6615)

This commit is contained in:
Ian Hickson 2016-10-31 21:58:27 -07:00 committed by GitHub
parent a33b70ed33
commit 5fb692124c
3 changed files with 35 additions and 10 deletions

View File

@ -22,7 +22,9 @@ void main() {
return new Column(
children: <Widget>[
new Flexible(
child: new Container() // TODO(ianh): replace this with our logo in a Center box
child: new Center(
child: new FlutterLogo(size: 100.0),
),
),
new Flexible(
child: new Builder(
@ -38,21 +40,21 @@ void main() {
children.add(new Center(child: new CircularProgressIndicator(value: progressMax > 0 ? progress / progressMax : null)));
}
return new Block(children: children);
}
)
},
),
),
new Flexible(
child: new Block(
padding: new EdgeInsets.symmetric(horizontal: 16.0),
padding: new EdgeInsets.symmetric(horizontal: 24.0),
children: <Widget>[ new Text(explanation, textAlign: TextAlign.center) ]
)
),
]
),
],
);
}
)
)
)
},
),
),
),
);
connectionTimeout = new Timer(const Duration(seconds: 8), () {
setState(() {
@ -82,6 +84,17 @@ class LoaderBinding extends WidgetsFlutterBinding {
});
}
);
registerStringServiceExtension(
name: 'loaderShowExplanation',
getter: () => explanation,
setter: (String value) {
connectionTimeout?.cancel();
connectionTimeout = null;
setState(() {
explanation = value;
});
}
);
registerNumericServiceExtension(
name: 'loaderSetProgress',
getter: () => progress,

View File

@ -263,6 +263,7 @@ class HotRunner extends ResidentRunner {
return 3;
}
_loaderShowMessage('Connecting...', progress: 0);
_loaderShowExplanation('You can use hot reload to update your app on the fly, without restarting it.');
bool devfsResult = await _updateDevFS(
progressReporter: (int progress, int max) {
if (progress % 10 == 0)
@ -340,6 +341,10 @@ class HotRunner extends ResidentRunner {
}
}
void _loaderShowExplanation(String explanation) {
currentView.uiIsolate.flutterLoaderShowExplanation(explanation);
}
DevFS _devFS;
Future<Uri> _initDevFS() {

View File

@ -809,6 +809,13 @@ class Isolate extends ServiceObjectOwner {
}).catchError((dynamic error) => null);
}
void flutterLoaderShowExplanation(String explanation) {
// Invoke loaderShowExplanation; ignore any returned errors.
invokeRpcRaw('ext.flutter.loaderShowExplanation', <String, dynamic> {
'value': explanation
}).catchError((dynamic error) => null);
}
void flutterLoaderSetProgress(double progress) {
// Invoke loaderSetProgress; ignore any returned errors.
invokeRpcRaw('ext.flutter.loaderSetProgress', <String, dynamic>{