【问题标题】:After Flutter upgrade: The argument type 'Future<bool> Function(File)' can't be assigned to the parameter type 'FutureOr<dynamic> Function(Uint8List)'Flutter 升级后:参数类型 'Future<bool> Function(File)' 不能分配给参数类型 'FutureOr<dynamic> Function(Uint8List)'
【发布时间】:2021-03-11 13:11:15
【问题描述】:

我似乎不知道如何解决这个错误。这以前可以工作,但在升级到 Flutter Null Safety 版本后现在产生此错误:

我正在使用屏幕截图:ScreenshotController 的 ^1.0.0-nullsafety.1 包

File _imageFile;
ScreenshotController screenshotController = ScreenshotController();

IconButton(
            icon: Icon(Icons.download_sharp),
            onPressed: () {
              
              Directory directory;
              _requestPermission(Permission.storage);
              try {
                _imageFile = null;
                screenshotController
                    .capture(delay: Duration(milliseconds: 10))
                    .then((File image) async {
                  //print("Capture Done");
                  setState(() {
                    _imageFile = image;
                  });

                  if (await _requestPermission(Permission.storage)) {
                    directory = await getExternalStorageDirectory();

                    String newPath = '';
                    List<String> folders = directory.path.split('/');


                    for (int x = 1; x < folders.length; x++) {
                      String folder = folders[x];
                      if (folder != 'Android') {
                        newPath += '/' + folder;
                      } else {
                        break;
                      }
                    }
                    newPath = newPath + '/Tinda';
                    directory = Directory(newPath);
                    print(directory.path);
                  } else {
                    return false;
                  }
                  if (!await directory.exists()) {
                    await directory.create(recursive: true);
                  }
                  if (await directory.exists()) {
                    final result = await ImageGallerySaver.saveImage(
                        _imageFile.readAsBytesSync(),
                        quality: 100);
                    print("File Saved");
                    print(result);
                  }
                }).catchError((onError) {
                  print(onError);
                });
              } catch (e) {
                print(e);
              }
            },
          ),

以下是一些截图:

我们将不胜感激。

【问题讨论】:

  • 错误发生在哪一行?
  • 试试 ImageGallerySaver.saveImage(_imageFile, quality: 100);
  • @Noah - 整个代码都是红色的。当我点击错误时,所有这些都会突出显示。我在帖子中添加了它的屏幕截图。
  • @Pavel Shastov - 不幸的是,这不起作用
  • The docs 希望您使用Uint8List,而不是File,这与您遇到的错误一致。

标签: flutter


【解决方案1】:

错误是告诉你让传递给你的参数.then函数应该是Uint8List类型而不是File。这很可能是因为sceenshotController.capture 返回一个Future&lt;Uint8List&gt;,所以在.then 中,您将可以访问Uint8List

【讨论】:

    【解决方案2】:

    您可能正在使用screenshot 包。如果是这样,你使用ScreenshotController错误,使用Uint8List而不是File

    正确方法:

    screenshotController.capture().then((Uint8List image) {
        //Capture Done
        setState(() {
            _imageFile = image;
        });
    }).catchError((onError) {
        print(onError);
    });
    

    问题:

    这是编译器错误提供的广泛错误,您可以使用它来确定以下内容:

    • 您正在为函数提供一个参数(也称为参数类型):Future&lt;bool&gt; Function(File),这是Future&lt;dynamic&gt; Function(File) 的“子集”,因此返回类型都很好(它没有明确说明)。李>
    • 但是,您应该提供一个以 Uint8List 作为参数的函数,但您提供的是一个文件。
    • TLDR:您的返回类型很好,但函数参数类型错误。

    您可能仍在学习如何阅读这些有点神秘的错误消息并学习术语。返回错误消息以确保您理解,这样未来的变化不会让您失望。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 1970-01-01
      • 2021-10-16
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多