错误:参数类型 '() ? Null' 不能分配给参数类型 '(Null) ?FutureOr<动态>'

Raj*_*ath 8 dart flutter

    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(() {});
      }
    }
Run Code Online (Sandbox Code Playgroud)

错误详情

错误:参数类型 '() ? Null' 不能分配给参数类型 '(Null) ?未来或'。(argument_type_not_assignable 在 [fluttercam] lib\packs\reg.certificate.dart:38)

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

controller.initialize().then((_) {});
Run Code Online (Sandbox Code Playgroud)

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

Gün*_*uer 11

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

(Null) ? FutureOr<dynamic>
Run Code Online (Sandbox Code Playgroud)

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

() ? Null
Run Code Online (Sandbox Code Playgroud)

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

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

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

FutureOr<R> onValue(T value)
Run Code Online (Sandbox Code Playgroud)

这是一个接受泛型类型参数T并返回值的函数FutureOr<R>