当我单击文本字段时,网络视图会重新加载。我正在使用 webview_flutter: ^4.4.4 版本和 sdk: '>=3.1.0 <4.0.0' flutter sdk
WebViewWidget(
controller: WebViewController()
..setJavaScriptMode(JavaScriptMode.unrestricted)
..setBackgroundColor(const Color(0x00000000))
..setNavigationDelegate(
NavigationDelegate(
onNavigationRequest: (NavigationRequest request) {
if (request.url.contains(returnURL)) {
final uri = Uri.parse(request.url);
final payerID = uri.queryParameters['PayerID'];
if (payerID != null) {
Get.find<PricePlaningController>()
.executePayment(executeUrl, payerID, accessToken)
.then((id) {
widget.onFinish(id);
Navigator.of(context).pop();
});
} else {
Navigator.of(context).pop();
}
Navigator.of(context).pop();
}
if (request.url.contains(cancelURL)) {
Navigator.of(context).pop();
}
return NavigationDecision.navigate;
},
),
)
..loadRequest(
Uri.parse(checkoutUrl),
),
),
发生这种情况是因为您在小部件树中初始化了
WebViewController
,因此每次重建都会重新初始化控制器。将控制器移动到包裹 StatefulWidget
的 WebViewWidget
的状态。
示例:
class MyWidget extends StatefulWidget {
const MyWidget({super.key});
@override
State<MyWidget> createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
late final webViewController;
@override
void initState() {
// ...
webViewController = WebViewController()
// additional setups ...
}
// ...
}
像这样使用控制器:
// Somewhere inside the build method of _MyWidgetState
WebViewWidget(
controller: webViewController,
// ...
)