iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Mobile Development

畢業專題拯救計畫系列 第 24

Flutter中的排班--Async Programming

  • 分享至 

  • xImage
  •  

異步編程是一種編程方式,用來處理那些需要等待的操作,但不會讓整個應用程式卡住。當你需要執行像讀取文件、發送網路請求等需要一點時間才能完成的任務時,異步編程可以讓應用程式在等待這些操作的同時繼續處理其他工作,這樣應用程式在處理這些任務時依然可以保持順暢,不會出現卡頓。(有點像是系統程式裡面的RR Rotate)
https://ithelp.ithome.com.tw/upload/images/20240910/20163322aTDMuxIqFh.jpg

  • Future
    Future 是 Dart 中一個表示未來某個時間點將要完成的計算或操作的對象。當進行一個異步操作(例如網絡請求)時,這個操作會返回一個 Future。可以使用 .then() 來定義當這個操作完成時要執行的邏輯,也可以使用 await 關鍵字來暫停函數執行,直到 Future 完成。
import 'dart:async';

void main() {
  print('開始執行');
  fetchData().then((data) {
    print('收到資料: $data');
  });
  print('這行會先執行');
}

Future<String> fetchData() async {
  await Future.delayed(Duration(seconds: 2));  // 模擬耗時操作
  return '資料已返回';
}
  • async 和 await
    async 關鍵字用來標記一個函數為異步函數,允許在函數中使用 await。
    await 關鍵字用來等待一個異步操作完成,並返回其結果。使用 await 時,函數的執行會暫停,直到 Future 完成。
Future<void> fetchData() async {
  try {
    var response = await http.get(Uri.parse('https://example.com'));
    print('Response status: ${response.statusCode}');
    print('Response body: ${response.body}');
  } catch (e) {
    print('Error: $e');
  }
}
  • Stream
    Stream 是一個可觀察的數據流,允許你監聽一連串的異步事件。這在處理連續數據(如用戶輸入或數據更新)時非常有用。你可以使用 .listen() 來接收數據流的數據或變更。
import 'dart:async';

void main() {
  Stream<int> stream = countStream(5);
  stream.listen((count) {
    print('收到數字: $count');
  });
}

Stream<int> countStream(int max) async* {
  for (int i = 1; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));  // 模擬每秒發出一個數字
    yield i;  // 發送數字
  }
}

我們明天見~


上一篇
Flutter中的跨平台應用--Flutter Desktop
下一篇
Flutter中的小助手--Isolates
系列文
畢業專題拯救計畫30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言