Flutter 颤振:在Future函数中使用try/catch

Flutter 颤振:在Future函数中使用try/catch,flutter,dart,try-catch,imagepicker,Flutter,Dart,Try Catch,Imagepicker,在我的应用程序中,我想用相机拍摄图像,我正在使用image\u picker库 这是我的密码: import 'dart:io'; import 'package:image_picker/image_picker.dart'; Future<File> getImage() async { var image = await ImagePicker.pickImage(source: ImageSource.camera); return image; } 我的

在我的应用程序中,我想用相机拍摄图像,我正在使用
image\u picker

这是我的密码:

import 'dart:io';

import 'package:image_picker/image_picker.dart';

Future<File> getImage() async {
   var image = await ImagePicker.pickImage(source: ImageSource.camera);

   return image;
}
我的IDE抛出错误,变量
图像
未定义

问题:

  • 在这种情况下,如何正确使用
    try/catch
  • try/catch
    是解决此类问题的方法吗
  • 是否有其他我应该关心的错误/异常
  • 我的IDE抛出错误,未定义变量映像

    试着先解决这个问题

    更改您的代码:

    试试看{
    var image=等待ImagePicker.pickImage(源:ImageSource.camera);
    }捕获(e){
    印刷品(e);
    }
    返回图像;
    

    var图像;
    试一试{
    image=等待ImagePicker.pickImage(源:ImageSource.camera);
    }捕获(e){
    印刷品(e);
    }
    返回图像;
    
    关于您的问题: 问题1。在这种情况下,如何正确使用try/catch

    A1。我认为你做得对

    -

    问题2。try/catch是解决此类问题的方法吗

    A2。是的,绝对是。您可能需要检查上的异常

    -

    第三季度。是否有其他我应该关心的错误/异常


    A3。这很难知道,您应该查看或处理您感兴趣的异常,并让其他人保持警惕(
    AlertDialog
    Snackbar
    …等等)。

    与大多数类似C的语言一样。换句话说,如果在
    {
    ..
    }
    块内声明变量,则不能在该块外直接引用该变量。如果需要在外部块中使用变量,则需要将其声明移出

  • 在这种情况下,如何正确使用
    try
    /
    catch
  • 因为这将捕获所有类型的异常,包括逻辑错误(
    AssertionError
    ArgumentError
    ),等等

    通常的建议是。(通常这意味着只捕获运行时错误,而这些错误应该是从
    异常衍生而来的异常。在实践中,有些代码不遵循这一区别,在某些情况下,应该被视为逻辑错误的代码和应该被视为运行时错误的代码之间没有明确的界限。)

  • try
    /
    catch
    是解决此类问题的方法吗

  • 如果没有预先检查操作是否成功的机制(“三思而后行”),那么你别无选择,只能尝试并检查失败(“请求原谅比允许更容易”)。

    我也这样使用,到目前为止,我没有发现任何错误/异常,效果很好。太棒了,问题解决了。再次澄清一下,
    return
    将返回调用
    wait
    后分配给变量的实际值?我的意思是,如果变量有默认值,并且它的值随
    wait
    调用而改变,因此它将返回新值而不是默认值。@如果可能,请查看并回答我的问题。
    var image
    最好是
    文件图像。由于它现在是单独声明的,它的类型将不再被推断,因此它将成为
    动态的
    (因此不会进行类型检查)。你是对的,但我认为每个人都有选择编码标准的权利,所以我没有指出:感谢你的回答并澄清概念!请你回答我的问题好吗?
    
    try {
      var image = await ImagePicker.pickImage(source: ImageSource.camera);
    
    } catch (e) {
      print(e);
    }
    return image;