Làm thế nào để chạy mã sau một số thời gian trì hoãn trong Flutter?


115

Tôi muốn thực thi một chức năng sau một khoảng thời gian trễ nhất định sau khi Widget của tôi được tạo. Cách thành ngữ để làm điều này trong Flutter là gì?

Những gì tôi đang cố gắng đạt được: Tôi muốn bắt đầu với một FlutterLogoWidget mặc định và sau đó thay đổi thuộc tính của nó stylesau một thời gian.

Câu trả lời:


214

Bạn có thể sử dụng Future.delayedđể chạy mã của mình sau một thời gian. ví dụ:

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

// Here you can write your code

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

});

Trong hàm setState, bạn có thể viết mã liên quan đến giao diện người dùng ứng dụng, ví dụ: làm mới dữ liệu màn hình, thay đổi văn bản nhãn, v.v.


66

Tìm ra rồi 😎

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
bạn đã nhập khẩu Timertừ đâu?
Lucem

4
hiểu rồiimport 'dart:async'
Lucem

một sửa đổi sẽ được đưa timer = ...vào initStateghi đè. Bằng cách đó, bạn có quyền truy cập vào widgetmà được đặt trong hàm State<>tạo.
stevenspiel

Tôi không nghĩ rằng câu trả lời này nên được chấp nhận, vì nó không chỉ chạy mã sau khi trì hoãn, mà còn lặp lại mã. @Rahul Sharma giải pháp chỉ để trì hoãn là tốt hơn nhiều.
Andris

Câu trả lời của Rahul không hủy hẹn giờ, vì vậy chắc chắn nếu widget của bạn biến mất, bạn sẽ bị rò rỉ? (Lưu ý: Tôi không phải là một nhà phát triển rung động, tôi đã sử dụng cái này một lần cách đây vài năm!)
Bradley Campbell

53

Kích hoạt các hành động sau khi đếm ngược

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

Lặp lại các hành động

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

Bộ hẹn giờ kích hoạt ngay lập tức

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

10

Chỉ cần thêm mô tả nhiều hơn các câu trả lời ở trên

Chức năng Hẹn giờ cũng hoạt động với khoảng thời gian dưới đây:

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

Thí dụ:

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

6

(Thêm phản hồi trên q cũ vì đây là kết quả hàng đầu trên google)

Tôi đã thử tạo một trạng thái mới trong lệnh gọi lại trong một khối và nó không hoạt động. Đã thử với Timer và Future.delayed.

Tuy nhiên, những gì đã làm là ...

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

yield newState;

Đang chờ một tương lai trống rồi chạy chức năng sau đó.



2
import 'dart:async';   
Timer timer;

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

autoPress();

2

Bạn có thể thực hiện theo hai cách 1 là Future.delayedvà 2 làTimer

Sử dụng bộ hẹn giờ

Timer là một lớp đại diện cho bộ đếm thời gian đếm ngược được định cấu hình để kích hoạt một hành động khi đạt đến thời gian kết thúc và nó có thể kích hoạt một lần hoặc nhiều lần.

Đảm bảo nhập  dart:async gói để bắt đầu chương trình để sử dụng Timer

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

Sử dụng Future.delayed

Future.delayed là tạo ra một tương lai chạy tính toán của nó sau một thời gian trễ.

Đảm bảo import "dart:async"; đóng gói để bắt đầu chương trình để sử dụng Future.delayed

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


0

Chỉ cần để lại ở đây đoạn mã mà mọi người đang tìm kiếm:

Future.delayed(Duration(milliseconds: 100), () {
  // Do something
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.