【问题标题】:error: The argument type '() → Null' can't be assigned to the parameter type '(Null) → FutureOr<dynamic>'错误:参数类型“()→Null”不能分配给参数类型“(Null)→FutureOr<dynamic>”
【发布时间】:2019-04-27 18:44:11
【问题描述】:
    import 'package:flutter/material.dart';
    import 'package:camera/camera.dart';


    class Register extends StatefulWidget{
      List<CameraDescription> cameras;
      @override
      _Register createState() {
        return _Register();
      }

      Register(this.cameras);
    }

    class _Register extends State<Register>{

      CameraController controller;

      @override
      Widget build(BuildContext context){
        return MaterialApp(
          title: 'Registration Certificate',
          home: Scaffold(
            appBar: AppBar(
              title: new Text('Register'),
            ),

          body: Container()
          ),
        );
      }


      @override
      void initState(){
        super.initState();
        controller = new CameraController(widget.cameras[0], ResolutionPreset.medium);
        //**SYNTAX ERROR from the below code**
        controller.initialize().then(() {});
      }
    }

错误详情

错误:不能将参数类型“() → Null”分配给参数类型“(Null) → FutureOr”。 (argument_type_not_assignable 在 [fluttercam] lib\packs\reg.certificate.dart:38)

当我使用'_'下划线时,代码工作正常,错误已解决!

controller.initialize().then((_) {});

谁能解释一下幕后发生了什么?

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    当需要一个带参数的函数时,

    (Null) → FutureOr<dynamic>
    

    你不能传递一个不接受任何函数的函数

    () → Null
    

    _ 是一个有效的参数名称,按照惯例用于指示该参数未使用并使传递的函数与定义的参数类型兼容,因为它现在接受一个参数。

    controller.initialize() 返回一个Future 并且then(...) 方法需要一个函数,它在异步任务完成时调用并且完成的异步任务的结果作为参数传递给该回调函数。

    https://api.dartlang.org/stable/2.1.0/dart-async/Future/then.html 显示then 的参数定义:

    FutureOr<R> onValue(T value)
    

    这是一个接受泛型类型参数T并返回值FutureOr&lt;R&gt;的函数

    【讨论】:

    • 感谢您的快速回复@Günter Zöchbauer,您能解释一下它的用途吗?
    • 有什么用?我以为我解释了Future.then 的用途。当异步任务完成时,您传递了Future 调用的函数。 dartlang.org/tutorials/language/futures 可能会有所帮助。
    • 我的意思是我们传递的参数。例如'_'下划线
    • 非常感谢您的热情回复@Günter Zöchbauer
    • 这没什么。您可以将其更改为foo,它也会这样做。
    猜你喜欢
    • 2021-12-27
    • 2019-12-16
    • 1970-01-01
    • 2021-12-22
    • 2018-04-05
    • 2021-06-04
    • 1970-01-01
    • 2021-05-25
    • 2021-08-29
    相关资源
    最近更新 更多