【发布时间】:2020-03-18 17:16:41
【问题描述】:
我正在尝试使用当前代码制作一个通用的下拉小部件:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
abstract class FormDropdownProtocol {
String get title;
}
class FormDropdown<FormDropdownProtocol> extends StatelessWidget {
const FormDropdown({this.value, this.items, this.onChanged});
final FormDropdownProtocol value;
final List<FormDropdownProtocol> items;
final ValueChanged<FormDropdownProtocol> onChanged;
@override
Widget build(BuildContext context) {
return DropdownButton<FormDropdownProtocol>(
value: value,
items: items.map<DropdownMenuItem<FormDropdownProtocol>>(
(FormDropdownProtocol value) {
return DropdownMenuItem<FormDropdownProtocol>(
value: value,
child: Text(value.title),
);
}).toList(),
onChanged: onChanged,
);
}
}
但我在尝试使用标题时遇到以下错误:
错误:没有为类“对象”定义吸气剂“标题”。 - “对象”来自“飞镖:核心”。 尝试将名称更正为现有 getter 的名称,或定义一个名为 > 'title' 的 getter 或字段。 孩子:文本(value.title)
我做错了什么?
【问题讨论】:
-
不知道为什么,但是像这样
class FormDropdown<T extends FormDropdownProtocol>声明类,然后在整个类中使用 T 可以解决所有问题。如果有人知道原因并愿意解释,我很想听听。否则,我会在几天内回答我自己的问题