错误:无法将参数类型'()→Null'分配给参数类型'(Null)→FutureOr <dynamic>'

时间:2018-11-26 06:25:50

标签: 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(() {});
      }
    }

错误详情

  

错误:无法将参数类型'()→Null'分配给参数类型'(Null)→FutureOr'。 (在[fluttercam] lib \ packs \ reg.certificate.dart:38处为argument_type_not_assignable)

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

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

谁能解释幕后发生的事情?

1 个答案:

答案 0 :(得分:2)

当期望带有参数的函数时,

(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<R>