我从演示中复制了此代码的基本结构,并根据自己的需要进行了调整(并针对此问题进行了简化)。
但是我对两件事感到困惑。也许Dart专家可以启发我...
import 'package:flutter/material.dart';
// Show policy widget - shows
class ShowPolicy extends StatelessWidget {
final Policy policy;
ShowPolicy(this.policy);
@override
Widget build(BuildContext context) {
return Text('Test text ' + policy.riskName + ' ' + policy.policyNumber);
}
}
// Policy class
class Policy {
final String riskName;
final String policyNumber;
Policy( { this.riskName, this.policyNumber } );
}
// what is this variable doing here?. Shouldn't it be an a class?
List<Policy> allPolicies = [
Policy(riskName: 'Lilly', policyNumber: 'PY123456-4'),
Policy(riskName: 'Lilly', policyNumber: 'PY123456-3'),
Policy(riskName: 'Lilly', policyNumber: 'PY123456-2'),
Policy(riskName: 'Farnesbarnes', policyNumber: 'PY123647-1')
];
因此,基本上ShowPolicy
返回一个文本小部件。它具有一个接受Policy
对象的构造函数。
Policy
类包含两个成员变量riskName
和policyNumber
。
我的问题是:-
在最后声明的allPolicies
变量拥有什么?为什么在这里允许使用它,为什么不必在类中声明它?
但是我的主要问题是:-为什么Policy
类构造函数变量放在花括号{}中?如果我删除它们,Policy类仍然可以编译,但是现在allPolicies
变量不能编译(错误消息是“期望2个必需参数,但找到0个”)
答案 0 :(得分:2)
什么拥有最后声明的allPolicies变量?为什么在这里允许使用它,为什么不必在类中声明它?
在Dart中,允许其具有顶级变量和顶级功能。不需要将它们放在课堂上。
为什么将Policy类的构造函数变量括在大括号{}中?
大括号内的参数为optional named parameters。
答案 1 :(得分:1)
什么拥有最后声明的allPolicies变量?为什么在这里允许使用它,为什么不必在类中声明它
但是我的主要问题是:-为什么将Policy类的构造函数变量包装在大括号{}中?如果我删除它们,Policy类仍然可以编译,但是现在allPolicies变量不能编译(错误消息是“期望2个必需的参数,但找到0个”)
这很酷,因为避免参数排序和不匹配。 更多详细信息here
错误消息是“预期有2个必需参数,但找到0个” -在这种情况下,因为命名参数是必需的。有两种方法需要使用命名参数。如您所见,第一种方法是使用最终类成员作为名为参数的构造函数,如:
class Policy {
final String riskName; //final class member
final String policyNumber; // final class member
Policy( { this.riskName, this.policyNumber } ); // class members as named parameters
}
其他方法使用@required注释。看起来像这样:
MyConstructor( {@required String param1, @required int param2} ){ ... }