我有很长的报告窗口小部件列表,它们基本上定义了数据的布局。我希望能够通过其他有条件(如果/其他)或切换的方式动态加载那些小部件。
class ReportLibrary {
final data;
ReportLibrary(this.data);
Map<String,Widget> _library = {
'QuestionsAndScores': QuestionScoresView,
};
Widget get(String key){
return _library[key](data);
}
}
我不确定这是否可行或有更好的方法。
以下是错误:
flutter: Attempted to use type 'QuestionScoresView' as a function. Since types do not define a method 'call',
flutter: this is not possible. Did you intend to call the QuestionScoresView constructor and forget the 'new'
flutter: operator?
答案 0 :(得分:1)
您正在尝试创建到子类映射的字符串-然后实例化该子类的实例。没有镜子的Dart不允许这样做,而您不能在Flutter中使用。
您为什么不使用Widget get(String key) {
case 'QuestionsAndScores':
return QuestionScoresView(data);
// etc
}
?有点冗长,但可以。
final _library = <String, Function>{
'QuestionsAndScores': (data) => QuestionScoresView(data),
};
Widget foo = _library['QuestionsAndScores'](data);
同样,您可以将字符串映射为函数:
PermissionError: [WinError 5] Access is denied: 'C:\\Users\\VERX\\Desktop\\New folder\\Files'
答案 1 :(得分:0)
实际上,您正在尝试从Map
值进行呼叫,这就是错误消息的意思:
更改:
return _library[key](data);
收件人:
return _library[key];
这是您访问地图值_library[key]
的方式。
更新:
请确保您的Map
的值为Widget
,并在()
上添加括号QuestionScoresView
,否则您将成为Type
的选择。这将导致您发表评论的错误消息(The element type 'Type' can't be assigned to the map value type 'Widget'
)。
课程
ReportLibrary {
final data;
Map<String, Widget> _library;
ReportLibrary(this.data) {
_library = {
'QuestionsAndScores': QuestionScoresView(),
};
}
Widget get(String key){
return _library[key];
}
}
答案 2 :(得分:0)
用于向地图输入值的语法是错误的,它用于在flutter中引用函数,因此您的错误消息是这样的。
您应该更改此设置:
=> Work fine: Result:
createSerial(/dev/ttyACM0, 115200)
NurApi v1.9.0.8
Ping response: OK
info.name: NUR-10W
info.serial: K190305243
See you again!.
Log[2]: 1576
像这样:
=> ERROR: createSerial(/dev/ttyACM0, 115200)
java.io.IOException: Input/output error in nativeavailable
at gnu.io.RXTXPort.nativeavailable(Native Method)
at gnu.io.RXTXPort$SerialInputStream.available(RXTXPort.java:1598)
at com.nordicid.nurapi.NurApiSerialTransport.readData(NurApiSerialTransport.java:65)
at com.nordicid.nurapi.NurApi.readThread(NurApi.java:2966)
at com.nordicid.nurapi.NurApi.access$1100(NurApi.java:29)
at com.nordicid.nurapi.NurApi$7.run(NurApi.java:2939)
at
希望对您有所帮助。