स्पंदन में कुछ देरी के बाद कोड कैसे चलाएं?


123

मैं अपने विजेट के निर्माण के बाद एक निश्चित देरी के बाद एक समारोह को निष्पादित करना चाहता हूं। स्पंदन में ऐसा करने का मुहावरेदार तरीका क्या है?

मैं क्या हासिल करने की कोशिश कर रहा हूं: मैं एक डिफ़ॉल्ट FlutterLogoविजेट के साथ शुरुआत करना चाहता हूं और फिर styleकुछ अवधि के बाद अपनी संपत्ति बदल सकता हूं ।

जवाबों:


234

आप Future.delayedकुछ समय बाद अपना कोड चलाने के लिए उपयोग कर सकते हैं । उदाहरण के लिए:

Future.delayed(const Duration(milliseconds: 500), () {

// Here you can write your code

  setState(() {
    // Here you can write your code for open new view
  });

});

SetState फ़ंक्शन में, आप एक कोड लिख सकते हैं जो ऐप UI से संबंधित है जैसे ताज़ा स्क्रीन डेटा, लेबल पाठ बदलें, आदि।


चेतावनी की जांच से बचने के लिए कि आपका विजेट अभी भी सेटस्टैट पर कॉल करने से पहले माउंट किया गया है
टॉम 21

68

यह पता लगा 😎

class AnimatedFlutterLogo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _AnimatedFlutterLogoState();
}

class _AnimatedFlutterLogoState extends State<AnimatedFlutterLogo> {
  Timer _timer;
  FlutterLogoStyle _logoStyle = FlutterLogoStyle.markOnly;

  _AnimatedFlutterLogoState() {
    _timer = new Timer(const Duration(milliseconds: 400), () {
      setState(() {
        _logoStyle = FlutterLogoStyle.horizontal;
      });
    });
  }

  @override
  void dispose() {
    super.dispose();
    _timer.cancel();
  }

  @override
  Widget build(BuildContext context) {
    return new FlutterLogo(
      size: 200.0,
      textColor: Palette.white,
      style: _logoStyle,
    );
  }
}

1
आपने कहाँ Timerसे आयात किया?
लुसेम

4
यह मिल गयाimport 'dart:async'
Lucem

एक संशोधन ओवरराइड timer = ...में डाल दिया जाएगा initState। इस तरह, आपके पास पहुंच है widgetजो State<>कंस्ट्रक्टर में सेट है ।
स्टीवंसपिल

मुझे नहीं लगता कि यह उत्तर स्वीकार किया जाना चाहिए, क्योंकि यह न केवल देरी के बाद कोड चलाता है, बल्कि कोड भी दोहराता है। @ देरी के लिए राहुल शर्मा का समाधान ज्यादा बेहतर है।
एंड्रीज

राहुल का जवाब टाइमर रद्द नहीं करता है, तो निश्चित रूप से अगर आपका विजेट चला जाता है तो आपके पास एक रिसाव है? (ध्यान दें: मैं एक स्पंदन डेवलपर नहीं हूं, मैंने कुछ साल पहले एक बार इसका इस्तेमाल किया था!)
ब्रैडली कैंपबेल

59

उलटी गिनती के बाद ट्रिगर क्रिया

Timer(Duration(seconds: 3), () {
  print("Yeah, this line is printed after 3 seconds");
});

दोहराए जाने वाले कार्य

Timer.periodic(Duration(seconds: 5), (timer) {
  print(DateTime.now());
});

ट्रिगर टाइमर तुरंत

Timer(Duration(seconds: 0), () {
  print("Yeah, this line is printed immediately");
});

10

उपरोक्त उत्तरों पर अधिक विवरण जोड़ते हुए

टाइमर की कार्यक्षमता नीचे अवधि समय के साथ भी काम करती है:

const Duration(
      {int days = 0,
      int hours = 0,
      int minutes = 0,
      int seconds = 0,
      int milliseconds = 0,
      int microseconds = 0})

उदाहरण:

  Timer(Duration(seconds: 3), () {
    print("print after every 3 seconds");
  });

7

(पुराने q पर प्रतिक्रिया जोड़ना क्योंकि यह Google पर शीर्ष परिणाम है)

मैंने कॉलबैक में एक नए राज्य को एक ब्लॉक में लाने की कोशिश की, और यह काम नहीं किया। टाइमर और Future.delayed के साथ प्रयास किया।

हालांकि, क्या काम किया गया था ...

await Future.delayed(const Duration(milliseconds: 500));

yield newState;

खाली भविष्य की प्रतीक्षा करना और उसके बाद फ़ंक्शन चलाना।



4

आप इसे दो तरीकों से कर सकते हैं 1 है Future.delayedऔर 2 हैTimer

टाइमर का उपयोग करना

Timer एक वर्ग है जो एक काउंट-डाउन टाइमर का प्रतिनिधित्व करता है जो एक बार समय समाप्त होने पर कार्रवाई को ट्रिगर करने के लिए कॉन्फ़िगर किया गया है, और यह एक बार या बार-बार आग लगा सकता है।

dart:async उपयोग करने के लिए कार्यक्रम की शुरुआत के लिए पैकेज आयात करना सुनिश्चित  करें Timer

Timer(Duration(seconds: 5), () {
  print(" This line is execute after 5 seconds");
});

Future.delayed का उपयोग करना

Future.delayed एक भविष्य बनाता है जो देरी के बाद अपनी गणना चलाता है।

import "dart:async"; उपयोग करने के लिए कार्यक्रम की शुरुआत के लिए पैकेज बनाना सुनिश्चित करें Future.delayed

Future.delayed(Duration(seconds: 5), () {
   print(" This line is execute after 5 seconds");
});

4

बस यहाँ जा रहा है स्निपेट सभी के लिए देख रहे हैं:

Future.delayed(Duration(milliseconds: 100), () {
  // Do something
});


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.