- bounty将在7天后过期**。回答此问题可获得+50的声誉奖励。ayushkadbe正在寻找来自声誉良好来源的答案。
我正在尝试使用flutter_downloader在InAppWebView中进行下载。我正在尝试使用InAppWebViewController的onDownloadStartRequest函数从另一个文件访问flutter_downloader下载任务函数**_requestDownload**。但我收到此错误
没有为类型"_WebViewTabState"定义方法"_requestDownload"。(文档)请尝试将名称更正为现有方法的名称,或定义名为"_requestDownload"的方法。
- 如何使用全局键从_WebViewTabState访问该方法?**
webview_tab. dart,我尝试在其中访问_requestDownload函数:
@override
Widget build(BuildContext context) {
return Container(
color: Colors.white,
child: _buildWebView(),
);
}
InAppWebView _buildWebView() {
var browserModel = Provider.of<BrowserModel>(context, listen: true);
var settings = browserModel.getSettings();
var currentWebViewModel = Provider.of<WebViewModel>(context, listen: true);
if (Util.isAndroid()) {
InAppWebViewController.setWebContentsDebuggingEnabled(
settings.debuggingEnabled);
}
//----Other code---
return InAppWebView(
key: webViewTabStateKey,
initialUrlRequest: URLRequest(url: widget.webViewModel.url),
initialSettings: initialSettings,
onWebViewCreated: (controller) async {//--code}
onDownloadStartRequest: (controller, downloadStartRequest) async {
await _requestDownload(TaskInfo()); //ERROR HERE
},
),
}
downloads_page. dart,其中定义了请求下载()函数。
class _DownloadsPageState extends State<DownloadsPage> {
List<TaskInfo>? _tasks;
late List<ItemHolder> _items;
late bool _showContent;
late bool _permissionReady;
late bool _saveInPublicStorage;
late String _localPath;
final ReceivePort _port = ReceivePort();
//Isolate Code
//Download Request
Future<void> _requestDownload(TaskInfo task) async {
var hasStoragePermission = await Permission.storage.isGranted;
if (!hasStoragePermission) {
final status = await Permission.storage.request();
hasStoragePermission = status.isGranted;
}
if (hasStoragePermission) {
task.taskId = await FlutterDownloader.enqueue(
url: task.link!,
headers: {'auth': 'test_for_sql_encoding'},
savedDir: _localPath,
saveInPublicStorage: _saveInPublicStorage,
);
}
}
@override
Widget build(BuildContext context) {
}
}
1条答案
按热度按时间bvjxkvbb1#
您似乎试图从定义Private方法的库外部调用该方法。
我们来解决这个问题!
首先从方法名中删除前缀
_
,该方法名应该从定义它的库外部访问。我的意思是,与其宣称:
如果希望能够从外部调用该方法,则必须将其定义为:
在Flutter中,前缀
_
将一个方法声明为Private,这意味着您不能从定义它的库之外访问它!此外,要从另一个库调用
requestDownload
,您必须在_DownloadsPageState
之外声明它(在根级别),因为_DownloadsPageState
本身是Private!最后你需要导入一个文件,在这个文件中你要使用的方法是在库中定义的。所以,为了在
webview_tab.dart
中使用requestDownload
,你需要导入downloads_page.dart
。要了解更多关于此主题的信息,请访问Dart的语言教程。