构造函数的未来不起作用

时间:2014-04-03 16:02:26

标签: constructor dart angular-dart dart-async

我无法在控制器的构造函数中使用Future调用。我试图在页面加载时从数据库初始化一个列表,这需要我使用Future。

使用服务类中声明的方法检索该值,该方法已在控制器之前的模块类中添加。

type(DataStreamService);

type(DataStreamController);

以下是我的控制器的代码:

@NgController(selector: '[data-stream-controller]', publishAs: 'DataStreamCtrl')
class DataStreamController {
  List<InputDataStruct> dataStream;

  DataStreamController(DataStreamService dataStreamSrvc){

    Future<List<InputDataStruct>> getDataStreamFtr = dataStreamSrvc.getDataStream();
    getDataStreamFtr.then((value){
      dataStream = value;
    })
    .catchError(print("Error occured"));
  }
}

不建议在构造函数中使用Future。如果不是我在这里缺少什么。

这是dataStreamSrvc.getDataStream()代码:

Future<List<InputDataStruct>> getDataStream(){
    List<InputDataStruct> dataStream = [];
    Completer completer = new Completer();

    Future getSomeInfoFtr = myDbHelper.getSomeInfo();

    getSomeInfoFtr.then((infoAndList){
      for(String info in infoAndList){
    inputDataStruct = new InputDataStruct(info);
    dataStream.add(inputDataStruct);
      }
    });

    completer.complete(dataStream);

    return completer.future;
}

1 个答案:

答案 0 :(得分:0)

我实际上没有尝试过代码,但我认为它应该可行。 我也简化了一下。没有必要将未来存储在变量中。

@NgController(selector: '[data-stream-controller]', publishAs: 'DataStreamCtrl')
class DataStreamController {
  List<InputDataStruct> dataStream;

  DataStreamController(DataStreamService dataStreamSrvc){
    dataStreamSrvc.getDataStream().then((value){
      dataStream = value;
    })
    .catchError(print("Error occured"));
  }
}

Future<List<InputDataStruct>> getDataStream(){
  List<InputDataStruct> dataStream = [];

  return myDbHelper.getSomeInfo().then((infoAndList){
    for(String info in infoAndList){
      inputDataStruct = new InputDataStruct(info);
      dataStream.add(inputDataStruct);
    }
    return dataStream;
  });
}