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((_) {});
谁能解释幕后发生的事情?
答案 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>