我试图弄清楚如何创建一个类的子类,而不指定父类的所有可选参数,但仍然可以从子类的构造函数访问这些参数。当用无数的属性对Flutter小部件进行子类时,这一点尤其重要。
这里有一个例子。
// Maine widget
class DoorWidget {
String color = 'red';
int width;
int height;
int p1;
int p2;
int p3;
Function onKicked = () => print('Kicked');
DoorWidget(this.color, {this.onKicked, this.width, this.height, this.p1, this.p2, this.p3});
}
class ChildDoorWidget extends DoorWidget {
@override
String color = 'green';
ChildDoorWidget(String color, {Function onKicked, int width, int height})
// Do I need to specify every parent optional parameter in the super class?
// Is there a way to avoid this.
: color = color,
super(color, onKicked: onKicked, width: width);
}
main() {
DoorWidget d = DoorWidget('green', width: 10, onKicked: () => print('DoorWidget Kicked') );
print('Text Class');
print(d.color);
print(d.width);
d.onKicked();
ChildDoorWidget c = ChildDoorWidget('blue',
width: 12, onKicked: () => print('ChildDoorWidget tapped called'));
// Ideally I would like to do this:
// ChildDoorWidget m = ChildDoorWidget('blue', width: 12, onKicked: () => print('tapped called'), p1: 1, p2: 2, and any other optional params);
print('\nMyText Class');
print(c.color);
print(c.width);
c.onKicked();
}
实际上,没有直接和简单的方法来调用具有未定义参数的构造函数。
你想打电话:
ChildDoorWidget m = ChildDoorWidget('blue', width: 12,
onKicked: () => print('tapped called'),
p1: 1, p2: 2);
但是,由于P1
和P2
没有在ChildDoorWidget的构造函数上定义,您将得到错误“named parameter is not defined”。
ChildDoorWidget m = ChildDoorWidget('blue', width: 12,
onKicked: () => print('tapped called'))
..p1=1..p2=2;
ChildDoorWidget m = ChildDoorWidget('blue')
..width = 12
..onKicked = (() => print('tapped called'))
..p1 = 1
..p2 = 2;
观察:color
和onkick
ondoorwidget
的初始化值是无用的,因为构造函数会重写这些值。这对于ChildDoorWidget上的color
有效。
以下是使用上述实现对初始代码的修订:
void show(dynamic d) {
print('\ncolor=${d.color}\nwidth=${d.width}\nheight=${d.height}\np1=${d.p1}\np2=${d.p2}\np3=${d.p3}\nonKicked=${d.onKicked}');
d.onKicked == null ? '' : d.onKicked();
}
class DoorWidget {
String color;
int width;
int height;
int p1;
int p2;
int p3;
Function onKicked;
DoorWidget(this.color,
{this.onKicked, this.width, this.height, this.p1, this.p2, this.p3});
}
class ChildDoorWidget extends DoorWidget {
@override
String color = 'orange'; //initialization useless because constructor overrides it with "this.color"
ChildDoorWidget(String this.color) : super(color);
}
main() {
print('\n\n\n create DoorWidget with color, width and onKicked');
DoorWidget d = DoorWidget('green',
width: 10, onKicked: () => print('DoorWidget Kicked'));
show(d);
print('\n\n\n create ChildDoorWidget with color, width and onKicked');
ChildDoorWidget c = ChildDoorWidget('blue')
..width = 12
..onKicked = () => print('ChildDoorWidget tapped called');
show(c);
print('\n\n\n create ChildDoorWidget with many parameters');
ChildDoorWidget m = ChildDoorWidget('yellow')
..width = 12
..onKicked = (() => print('tapped called'))
..p1 = 1
..p2 = 2;
show(m);
}
在flutter示例页面中,有一个名为“将数据发送到新屏幕”的项目。我对第65行的构造函数有一个重新保护的问题。
我已经在我的服务器上创建了一个RSA密钥对,只有服务器才会有私钥。客户端(Flatter应用程序)将访问公钥。因此,当服务器收到加密消息时,它将知道消息来自正确的客户端,并将使用其私钥解密通过公钥加密的消息。 当服务器(php7.3)向客户端发送回复时,我想在服务器端通过私钥加密消息,以便客户端可以用公钥解密消息。 非对称加密有其自身的局限性,如最大字符长度。但如果能送来就好了 Flutter包加
我一直在使用VSCode进行颤振开发,但没有问题。今天,飞镖分析器突然抱怨说,大多数类都是未定义的,或者目标不存在。 有人见过这个吗? 我已经重新启动了VSCode,重新启动了计算机,卸载了flutter/dart插件,运行flutter dr没有任何问题……我没有想法了。 VSCode问题
我试图改变从API返回的日期字符串的格式。下面的日期格式输入字符串在java中工作正常,但在Dart中则不行。
我对flutter和dart非常陌生,正在尝试使用全局状态的单例实例(?).这是从后端服务器获得的公司信息。当flutter app启动时,向服务器发送请求并获得响应,然后基于响应构建一个singleton实例。所以我创造了阶级 在main.dart中 我做错了什么?