Google Flutter

Flutter: รูัจักและใช้งาน StreamController

เรื่องที่เกี่ยวข้อง - Google Flutter, Stream

ในกรณีที่เราอยากให้ตัวแอพเราทำอะไรสักอย่างเพื่อตอบสนองกับข้อมูลที่มาจากแหล่งหนึ่ง โดยที่ให้ตัวแอพนั้นทำงานทันทีที่ตัวข้อมูลมีการเปลี่ยนแปลงนั้น สามารถทำได้โดยการใช้กลไกของ Stream

และในที่นี้ก็จะพูดเรื่อง StreamController ครับ

ภาพรวมของ StreamController

StreamController เป็นส่วนที่พัฒนาต่อยอดมาจากแนวคิด Stream พื้นฐาน (ถ้าเคยใช้ keyword yeild หรือ async* ก็ใช่เลย) แต่ถ้าส่วนตัวแล้วมันทำให้แนวคิดการใช้งาน Stream เข้าถึงได้ง่ายกว่า

โดยภาพรวมของ StreamController จะมีตามด้านล่างครับ

ลองดูการทำงานกัน

สร้างส่วนข้อมูล และ StreamController

เอาล่ะยกตัวอย่างเช่น เราต้องการให้มีแอพเรารันโค้ดส่วนหนึ่ง ถ้ามีข้อมูลชื่อ SubmitValue (ในที่นี้เป็น Enum) เกิดขึ้นมาในระบบ เราก็จะใช้ StreamController ส่งผ่านค่านี้นั่นเอง

// ค่า enum ที่จะถูกส่งผ่าน StreamController
enum SubmitValue {
  ON,
  OFF
}

ด้านล่าง เราจะทดลองสร้าง Class ขึ้นมาอันหนึ่ง ซึ่งจะมีเจ้า StreamController อยู่ข้างใน รายละเอียดแต่ละส่วนเขียนใน Comment แล้วนะ

import 'dart:async';
import 'package:nextflow_flutter_stream_controller_with_test/submit_value.dart';

class ExampleStream {
  // เราสามารถกำหนด Data Type ของข้อมูลที่จะส่งผ่าน StreamController ได้ในส่วน Generic type เช่นในที่นี้คือ SubmitValue 
  final StreamController<SubmitValue> controller =
      StreamController<SubmitValue>();
  
  // สร้าง method ขึ้นมาสวยๆ เพื่อเรียกใช้ตอนอยากส่งข้อมูลเข้า StreamController 
  // ในที่นี้บางคนอาจจะเรียกใช้ controller.add จากนอก Class ตรงๆ ก็ได้
  void sendToStream(SubmitValue submitValue) {
    // ส่วนนี้คือการเพิ่มข้อมูลเข้า Controller หลังจากนี้ StreamController จะส่งต่อข้อมูลเข้า Stream เอง
    controller.add(submitValue);
  }
}

วิธีการส่งข้อมูลเข้า StreamController

ดังนั้น ตอนเราต้องการใช้งาน เราก็สามารถสร้าง Instance ของคลาส ExampleStream ขึ้นมา และใช้ method ในการส่งค่า SubmitValue ตามที่เตรียมไว้ได้

exampleStream.sendToStream(SubmitValue.ON);

วิธีการรับค่าผ่าน Stream

เราสามารถใช้ function .listen ในการกำหนด function ที่จะทำงานเมื่อมีข้อมูลส่งเข้ามาใน Stream ได้ โดย function ดังกล่าวจะรับค่า parameter เป็น Data type เดียวกันกับที่กำหนดให้ StreamController นั่นเอง

exampleStream.controller.stream.listen((SubmitValue value) {
      //... do something
});

Git Repo

ตัว git repo ของโปรเจคนี้สามารถศึกษาได้ที่นี่

เริ่มต้นยุค AI ด้วยคอร์สฟรี และพรีเมี่ยม กับพล

หากชอบสิ่งที่พลเล่า เรื่องที่พลสอน สามารถสนับสนุนพลโดยการเข้าเรียนคอร์สออนไลน์ของพลนะคร้าบ

  • เข้าใจง่าย ใช้ได้จริง ออกแบบการสอนอย่างเข้าใจโดยโค้ชพล
  • มีคอร์สสำหรับคนใช้งานทั่วไป จนถึงเรียนรู้เพื่อใช้งานในสายอาชีพขั้นสูง
  • ทุกคอร์สมีใบประกาศณียบัตรรับรองหลังเรียนจบ

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save