我有一个使用WebView的简单的有状态应用程序,第一次调用新的WebView时,调用onWebViewCreated,但是第二次调用“新WebView”时,将不再调用onWebViewCreated,每次都调用onPageFinished。似乎Flutter不会在build方法中创建新的WebView,而只是重新使用现有的WebView,对吗?示例代码如下:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() => runApp(MaterialApp(home: Sample()));
class Sample extends StatefulWidget {
@override
_SampleState createState() => _SampleState();
}
class _SampleState extends State<Sample> {
var url = 'https://en.wikipedia.org/wiki/Kraken';
Completer<WebViewController> _controller = Completer<WebViewController>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: webPage(),
bottomNavigationBar: BottomAppBar(
child: new Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
RaisedButton(
onPressed: () {
if (_controller.isCompleted) {
setState(() {
url = 'https://en.wikipedia.org/wiki/Sea_monster';
_controller.future.then((ctrl) {
ctrl.loadUrl(url);
});
});
}
},
child: Text('load new url'),
),
],
),
),
);
}
Widget webPage() {
print('building new Webview?');
return new WebView(
initialUrl: url,
javascriptMode: JavascriptMode.unrestricted,
// debuggingEnabled: true,
onWebViewCreated: (WebViewController webViewController) {
print('webview created');
_controller.complete(webViewController);
},
onPageFinished: (finish) {
print('on page finished');
print(finish);
},
);
}
}