网络视图 - "onWebViewCreated"中的"complete(controller)"问题



我是扑动领域的新手,在这个特定的案例中,我遵循YT。在这个tut上,一切都在工作,但在我这边,我在下面的这行有一个错误。

onWebViewCreated: (controller) => controller.complete(controller),

我收到以下消息:"没有为类型"WebViewController"定义方法"complete"。请尝试将名称更正为现有方法的名称,或定义名为"complete"的方法">

有人能帮我想办法解决这个问题吗?

以下完整代码:

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
void main() {
runApp(
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const HomePage(),
),
);
}
class HomePage extends StatefulWidget {
const HomePage({Key? key}) : super(key: key);
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final controller = Completer<WebViewController>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Home Page'),
),
body: WebView(
initialUrl: "https://google.com",
onWebViewCreated: (controller) => controller.complete(controller),
),
bottomNavigationBar: Container(
color: Colors.blue,
child: Padding(
padding: const EdgeInsets.only(bottom: 5, right: 20),
child: ButtonBar(
children: [
navigationButton(
Icons.chevron_left, (controller) => goBack(controller)),
navigationButton(
Icons.chevron_right, (controller) => goForward(controller)),
],
),
),
),
);
}
Widget navigationButton(
IconData icon, Function(WebViewController) onPressed) {
return FutureBuilder(
future: controller.future,
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
return IconButton(
icon: Icon(
icon,
color: Colors.white,
),
onPressed: () => onPressed(snapshot.data));
} else {
return Container(
height: 50,
);
}
},
);
}
void goBack(WebViewController controller) async {
final canGoBack = await controller.canGoBack();
if (canGoBack) {
controller.goBack();
}
}
void goForward(WebViewController controller) async {
final canGoForward = await controller.canGoForward();
if (canGoForward) {
controller.goForward();
}
}
}

此外,在这里你可以看到应用程序的外观。我画了两个红色箭头,因为应该有两个白色箭头是编码的,但它们不在应用程序中。应用程序视图

您在onWebViewCreated中使用相同的名称,编译器无法将主题彼此分离,请更改为:

onWebViewCreated: (WebViewController webViewController) {
controller.complete(webViewController);
},

最新更新