Flutter에서 약간의 지연 후 코드를 실행하는 방법은 무엇입니까?


123

위젯이 빌드 된 후 일정 지연 후 함수를 실행하고 싶습니다. Flutter에서이를 수행하는 관용적 인 방법은 무엇입니까?

내가 달성하려는 것 : 기본 FlutterLogo위젯으로 시작한 다음 style일정 기간 후에 속성 을 변경하고 싶습니다 .

답변:


236

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와 관련된 코드를 작성할 수 있습니다.


경고를 방지하려면 setState를 호출하기 전에 위젯이 아직 마운트되어 있는지 확인하십시오.
Tom

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했습니까?
Lucem

4
그것을 가지고import 'dart:async'
Lucem

한 수정 넣어하는 것입니다 timer = ...initState우선합니다. 이렇게 widget하면 State<>생성자에 설정된 액세스 권한이 있습니다 .
stevenspiel

나는 이것이 받아 들여 져야한다고 생각하지 않는다. 왜냐하면 그것은 지연 후에 코드를 실행할뿐만 아니라 코드를 반복하기 때문이다. 지연을위한 @Rahul Sharma 솔루션이 훨씬 좋습니다.
안드리

Rahul의 대답은 타이머를 취소하지 않으므로 위젯이 사라지면 누출이 있습니까? (참고 : 저는 플러터 개발자가 아닙니다. 2 년 전에 이것을 한 번 사용했습니다!)
Bradley Campbell

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에 대한 응답 추가)

블록 내의 콜백에서 새로운 상태를 생성하려고 시도했지만 작동하지 않았습니다. Timer 및 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
});

2
import 'dart:async';   
Timer timer;

void autoPress(){
  timer = new Timer(const Duration(seconds:2),(){
    print("This line will print after two seconds");
 });
}

autoPress();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.