Dalam Flutter, Stream adalah sebuah objek yang mewakili aliran data yang dapat diterima secara asynchronous. Anda dapat mendengarkan stream dengan menggunakan metode listen()
dan menghentikan dengar dengan metode cancel()
.
Anda juga dapat mengubah data yang diterima dari stream dengan menggunakan operator-operator stream seperti map
, where
, buffer
, expand
, take
, skip
, dll. Misalnya, Anda dapat menggunakan operator map
untuk mengubah setiap elemen dari stream dari satu tipe ke tipe lain, atau menggunakan operator where
untuk menyaring elemen-elemen yang tidak sesuai dengan kriteria tertentu.
Flutter menyediakan widget StreamBuilder
yang memungkinkan Anda untuk menampilkan data dari sebuah stream secara real-time. Anda dapat menggunakan widget ini dengan menentukan stream yang akan didengarkan dan menentukan bagaimana data dari stream harus ditampilkan. Widget akan secara otomatis memperbarui tampilan ketika data dari stream berubah.
Sebagai contoh:
- Anda dapat menggunakan Stream untuk menangani event dari tombol seperti onTap dan mengirimkan data ke server.
- atau jika ingin mendapatkan lokasi dari GPS, anda bisa menggunakan stream untuk mendapatkan update lokasi secara real-time.
- atau membuat aplikasi chat, anda bisa menggunakan stream untuk mendapatkan pesan dari server secara real-time.
Semua ini hanyalah contoh sederhana dari apa yang dapat dilakukan dengan stream dalam Flutter. Ada banyak cara lain untuk menggunakan stream untuk menangani berbagai jenis data dan situasi.
Penerapan Stream
Berikut ini adalah contoh sederhana penggunaan stream dalam Flutter. Ini adalah contoh yang menampilkan teks yang di-generate secara acak setiap 5 detik menggunakan Stream dan StreamBuilder.
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: RandomText(),
);
}
}
class RandomText extends StatefulWidget {
@override
_RandomTextState createState() => _RandomTextState();
}
class _RandomTextState extends State<RandomText> {
Stream<String> _textStream;
@override
void initState() {
super.initState();
// Membuat Stream yang menghasilkan teks acak setiap 5 detik
_textStream = Stream.periodic(Duration(seconds: 5), (int count) {
return "Random text: ${count + 1}";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Random Text"),
),
body: StreamBuilder<String>(
stream: _textStream,
initialData: "Loading...",
builder: (context, snapshot) {
return Center(
child: Text(snapshot.data),
);
},
),
);
}
}
Pada kode diatas kita menggunakan Stream.periodic(Duration(seconds: 5), (int count)
untuk membuat stream yang akan membuat event (teks acak) setiap 5 detik. Kemudian untuk menampilkan data dari stream, kita menggunakan StreamBuilder
yang akan mendengarkan stream yang kita buat dan memperbarui tampilan secara real-time ketika ada event yang diterima.
Ini hanyalah contoh sederhana dari apa yang dapat dilakukan dengan stream dalam Flutter. Anda dapat menggunakan stream untuk menangani berbagai jenis data dan situasi, mulai dari event yang diterima secara real-time dari sensor sampai mendapatkan data dari server secara asynchronous.