簡體   English   中英

“[錯誤:flutter/runtime/dart_vm_initializer.cc(41)] 未處理的異常:類型&#39;未來<File> &#39; 不是類型“文件?”的子類型在類型轉換中“錯誤

[英]"[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Future<File>' is not a subtype of type 'File?' in type cast" Error

我正在嘗試使用 Flutter 上傳圖片並將此圖片上傳到 imgur。 但我收到一個錯誤。 在此之前,讓我向您展示我的代碼:

FloatingActionButton.large(
  child: Icon(Icons.folder, color: Colors.white, size: 45,),
  backgroundColor: Color.fromARGB(255, 36, 36, 36),
  onPressed: () async {
    final File? image = ImagePicker.pickImage(source: ImageSource.gallery) as File?;
    final File? imagefile = File(image!.path);
    if (imagefile == null) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text("not image selected."),
          backgroundColor: Color.fromARGB(255, 36, 36, 36),
        ),
      );
      return null;
    }
    else {
      print("else");
      uploadImage("bolat", image);
    }
  },
),
// ...
  void uploadImage(String title, File file) async {
    var request = http.MultipartRequest("POST", Uri.parse("https://api.imgur.com/3/image"));
    request.fields["title"] = title;
    request.headers["Authorization"] = "";
    var picture = http.MultipartFile.fromBytes('image', (await rootBundle.load('assets/testimage.png')).buffer.asUint8List(),
    filename: 'image.png');
    request.files.add(picture);
    var response = await request.send();
    var responseData = await response.stream.toBytes();
    var result = String.fromCharCodes(responseData);
    print(result);
 }

當我嘗試此代碼時,我收到此錯誤:

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'Future<File>' is not a subtype of type 'File?' in type cast
#0      _BolatAktarAppState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:bolataktar_resimyukleme/screens/resimyukleme_main.dart:66:104)
#1      _BolatAktarAppState.build.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:bolataktar_resimyukleme/screens/resimyukleme_main.dart:65:42)
#2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:1010:21)
#3      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:247:24)
#4      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:620:11)
#5      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:299:5)
#6      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:269:7)
#7      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:163:27)
#8      GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:454:20)
#9      GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:430:22)
#10     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:337:11)
#11     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:385:7)
#12     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:347:5)
#13     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:304:7)
#14     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:285:7)
#15     _invoke1 (dart:ui/hooks.dart:167:13)
#16     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:341:7)
#17     _dispatchPointerDataPacket (dart:ui/hooks.dart:94:31)

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channel plugins.flutter.io/image_picker)
#0      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:292:7)
<asynchronous suspension>
#1      ImagePicker.pickImage (package:image_picker/image_picker.dart:64:25)
<asynchronous suspension>

我怎么解決這個問題? 在此先感謝您的幫助。

將代碼更改為此

Future<void> uploadImage(String title, File file) async {
        var request =await http.MultipartRequest("POST", Uri.parse("https://api.imgur.com/3/image"));
        request.fields["title"] = title;
        request.headers["Authorization"] = "";
        var picture = http.MultipartFile.fromBytes('image', (await rootBundle.load('assets/testimage.png')).buffer.asUint8List(),
        filename: 'image.png');
        request.files.add(picture);
        var response = await request.send();
        var responseData = await response.stream.toBytes();
        var result = String.fromCharCodes(responseData);
        print(result);
     }

使用等待更改代碼來自

final File? image = ImagePicker.pickImage(source: ImageSource.gallery) as File?; 

final XFile? image = await ImagePicker().pickImage(source: ImageSource.gallery); 

檢查文檔https://pub.dev/packages/image_picker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM