2013-04-15 7 views
9

में कई ImageElement इवेंट लोड श्रृंखला कर सकते हैं मैं डार्ट करने के लिए JavaScript पृष्ठभूमि छवि लोडर परिवर्तित, इस तरह थोड़े: Javascript image loaderमैं कैसे डार्ट

और मैं एक टाइमर का उपयोग करता है, तो छवियों सभी लोड किए गए हैं जाँच करने के लिए। यह ठीक काम करता है।

लेकिन डार्ट में chainable वायदा देखते हैं और मैं सोच रहा था अगर आप श्रृंखला ImageElements की पृष्ठभूमि लोड हो रहा है कर सकते थे ...

ImageElement a = new ImageElement(); 
ImageElement b = new ImageElement(); 
ImageElement c = new ImageElement(); 

Future.wait([a.src='a.jpg', b.src='b.jpg', c.src='ca.jpg']) 
    .then((List responses) => chooseBestResponse(responses)) 
    .catchError((e) => handleError(e)); 
पाठ्यक्रम बताए src का

और वास्तविक छवि लोड हो रहा है तो यह जीत 'अतुल्यकालिक है टी काम ...

मुझे लोड होने के बाद प्रत्येक छवि के लिए निष्पादित करने के लिए कुछ कोड की भी आवश्यकता है।

हो सकता है कि मैं अपने ही FutureImageElement वर्ग लिखने की ज़रूरत है, लेकिन मैंने सोचा कि मैं पहले से पूछना चाहता हूँ ...

कोई भी विचार?

उत्तर

24

ज़रूर, आप वायदा उपयोग कर सकते हैं।

var a = new ImageElement(src: 'a.png'); 
var b = new ImageElement(src: 'b.png'); 
var c = new ImageElement(src: 'c.png'); 

var futures = [a.onLoad.first, b.onLoad.first, c.onLoad.first]; 

Future.wait(futures).then((_) => print('done')); 

पाठ "किया" जब सभी तीन छवियों लोड किए गए हैं प्रिंट किया जाएगा: बस धाराओं की first संपत्ति का उपयोग करें।

0

क्या आपको इसके लिए फ्यूचर्स के साथ काम करने की ज़रूरत है?

क्यों कुछ नहीं की तरह:

List<String> files = ["a", "b", "c"]; 
int imagesToLoad = files.length; 
for (String fileName in files) { 
    ImageElement pic = new ImageElement() 
     ..src = "$fileName.jpg" 
     ..onLoad.listen((Event e) { 
      // do something when the file has finished loading 

      imagesToLoad--; 
      if (imagesToLoad == 0) { 
      // do something when all images have loaded 
      } 
     }) 
    ; 
} 
+1

यह एक अच्छा समाधान है, लेकिन मुझे आश्चर्य है कि क्या डार्ट "भविष्य" तरीका भी है। मैंने देखा कि ऑनलोड एक EventStreamProvider देता है। मुझे आश्चर्य है कि मैं किसी भी तरह इसका उपयोग कर सकता हूं। मुझे लगता है कि यह मुझे कुछ उन्नत भविष्य के उपयोग सिखा सकता है और मुझे संदेह है कि यह संभव है। –