Flutter Bloc

Bloc(Business Logic Components) merupakan sebuah Design Pattern yang diperkenalkan oleh Paolo Soares dan Cong hui(Google) di DartConf 2018.

Awalnya, pola BLoC disusun untuk memungkinkan penggunaan kembali kode yang sama secara independen dari platform: aplikasi web, aplikasi mobile, back-end. Jadi ya, pola ini dikembangkan dengan tujuan untuk meringankan beban kerja pada pengembang saat mengembangkan aplikasi untuk platform yang berbeda dengan gagasan penggunaan kembali kode.

Untuk mengetahui BLoC secara mendetail, pertama mari kita ketahui tentang Streaming.

Streams

Secara umum, Stream adalah aliran atau suksesi apa pun secara terus-menerus. Namun secara teknis, Stream tidak lain adalah aliran data yang berkelanjutan.

Key terms:

  • Stream, the conveyor belt is called as a stream
  • StreamController, this is what controls the stream
  • StreamTransformer, this is what processes the input data
  • StreamBuilder, it’s a method that takes stream as an input and provides us with a builder which rebuilds every time there is a new value of a stream
  • sink, the property which takes an input
  • stream, the property which gives the output out of the Stream

Jadi sekarang kita punya sedikit gambaran tentang Streams. Kembali ke Flutter, salah satu kendala utama yang ditemui saat pengkodean di Flutter adalah saat berurusan dengan UI, misal Fluttertidak memiliki bahasa perancang perantara untuk UI seperti di Android yang memiliki XML, Di Flutter kita menulis semua kode di satu tempat (secara tradisional). Di situlah BLoC berperan dan membantu menghilangkan masalah ini dengan cara yang efisien.

  • BLoC tidak hanya memecahkan masalah berbagi kode tetapi juga memanfaatkan fungsionalitas Streams untuk mengelola dan menyebarkan perubahan status dalam Flutter.
  • BLoC membantu kita untuk memisahkan Business Logic dari UI. Dalam kata lain, UI components hanya merupakan UI dan bukan merupakan Logic.
  • Jadi, meskipun Flutter tidak memiliki bahasa perantara untuk UI dengan menggunakan BLoC dapat memisahkan kedua hal yang membuat independen satu sama lain.
  • Jika Anda seorang pengembang Android, pikirkan objek BLoC sebagai ViewModel dan StreamController sebagai LiveData.

Gambarannya seperti ini:

  • Input diambil menggunakan properti shink
  • Output disediakan menggunakan properti stream
  • Widget mengirim event ke BLoC melalui shinks
  • BLoC memberi tahu widget melalui streams
  • Sekarang setelah Bussiness Logic dan UI Component dipisahkan, kita dapat mengubah Bussiness Logic aplikasi kapan saja tanpa dampak apa pun pada UI
  • Sebaliknya, kita dapat mengubah UI tanpa berdampak pada Bussines Logic

Why use BLoC?

Sekarang setelah memiliki gambaran tentang Bloc, mungkin ada pertanyaan mengapa kita perlu menggunakannya untuk mengelola state, dimana sudah ada beberapa cara untuk menanganinya, saya akan menjelaskan mengapa BloC lebih efisien.

setState()

Metode setState () memberi tahu framework  bahwa sebuah objek telah berubah.

setState(() 
 { 
   _myState = newValue 
 }
);

berdampak pada UI pengguna di subtree ini, yang menyebabkan kerangka kerja menjadwalkan membangun untuk objek state ini.

Permasalahannya adalah:
– Keseluruhan widget melakukan rebuilt setiap state dirubah.
– Hal ini tidak membantu untuk memisahkan antara UI dan Bussiness Logic.