2013-08-24 9 views

答えて

20

あなたが必要な場合:

は、私はそのは以下のように、実際に非同期呼び出し(ファイル読み込み/ AJAX /など)を行うか、単にローカル変数を取得するかどうかを常にFuture<List<Base>>を返す関数を定義したいです未来をつくるにはCompleterを使うことができます。ドキュメントのCompleter classを参照してください。ここに例があります:

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    // At some time you need to complete the future: 
    completer.complete(new List<Base>()); 

    return completer.future; 
} 

しかし、ほとんどの場合、コンプリータで未来を作る必要はありません。この場合のように:

Future<List<Base>> GetItemList(){ 
    var completer = new Completer(); 

    aFuture.then((a) { 
    // At some time you need to complete the future: 
    completer.complete(a); 
    }); 

    return completer.future; 
} 

コンプリータを使用するとコードが非常に複雑になることがあります。 then()Futureを返しますので、あなたはあまりにも、代わりに使用することができます以下

Future<List<Base>> GetItemList(){ 
    return aFuture.then((a) { 
    // Do something.. 
    }); 
} 

やファイルIOのための例:

Future<List<String>> readCommaSeperatedList(file){ 
    return file.readAsString().then((text) => text.split(',')); 
} 

は、より多くのヒントについてthis blog postを参照してください。

関連する問題