从地图或列表加载小部件

时间:2019-12-18 17:33:59

标签: flutter

我有很长的报告窗口小部件列表,它们基本上定义了数据的布局。我希望能够通过其他有条件(如果/其他)或切换的方式动态加载那些小部件。

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?

3 个答案:

答案 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 

希望对您有所帮助。