Chciałbym wykonać funkcję po pewnym opóźnieniu po zbudowaniu mojego Widżetu. Jaki jest idiomatyczny sposób na zrobienie tego we Flutterze?
Co próbuję osiągnąć: chciałbym zacząć od domyślnego FlutterLogo
Widżetu, a style
po pewnym czasie zmienić jego właściwość.
Rozgryzłem to 😎
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, ); } }
źródło
Timer
?import 'dart:async'
timer = ...
winitState
ręcznym. W ten sposób masz dostęp do tego,widget
który jest ustawiony wState<>
konstruktorze.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"); });
źródło
Dodam tylko więcej opisu do powyższych odpowiedzi
Funkcja Timer działa również z poniższym czasem trwania:
const Duration( {int days = 0, int hours = 0, int minutes = 0, int seconds = 0, int milliseconds = 0, int microseconds = 0})
Przykład:
Timer(Duration(seconds: 3), () { print("print after every 3 seconds"); });
źródło
(Dodawanie odpowiedzi na stary q, ponieważ jest to najlepszy wynik w google)
Próbowałem uzyskać nowy stan w wywołaniu zwrotnym w bloku i to nie zadziałało. Próbowałem z Timerem i Future. Opóźnione.
Jednak zadziałało ...
await Future.delayed(const Duration(milliseconds: 500)); yield newState;
Oczekiwanie na pustą przyszłość, a następnie uruchomienie funkcji.
źródło
Future.delayed(Duration(seconds: 3) , your_function)
źródło
Możesz to zrobić na dwa sposoby: 1 to
Future.delayed
i 2 toTimer
Korzystanie z timera
Timer
to klasa reprezentująca licznik czasu, który jest skonfigurowany do wyzwalania akcji po osiągnięciu końca czasu i może uruchamiać się raz lub wielokrotnie.Pamiętaj, aby zaimportować
dart:async
pakiet, aby uruchomić program do użyciaTimer
Timer(Duration(seconds: 5), () { print(" This line is execute after 5 seconds"); });
Korzystanie z Future.delayed
Future.delayed
tworzy przyszłość, która wykonuje obliczenia z opóźnieniem.Upewnij się, że
import "dart:async";
pakiet, aby uruchomić program do użyciaFuture.delayed
Future.delayed(Duration(seconds: 5), () { print(" This line is execute after 5 seconds"); });
źródło
Zostawiam tutaj fragment, którego wszyscy szukają:
Future.delayed(Duration(milliseconds: 100), () { // Do something });
źródło
import 'dart:async'; Timer timer; void autoPress(){ timer = new Timer(const Duration(seconds:2),(){ print("This line will print after two seconds"); }); } autoPress();
źródło
await Future.delayed (Duration (milliseconds: 1000));
źródło