Sobes.tech
Middle

როგორ გამოიყენება სტრიმები Flutter-ში?

sobes.tech AI

პასუხი AI-სგან

Flutter-ში სტრიმები გამოიყენება ასინქრონული მოვლენების მიმდევრობის სამუშაოდ. ისინი დაფუძნებულია რეაქტიული პროგრამირების პარადიგმაზე და უზრუნველყოფენ მონაცემების დამუშავების გზას მათ მიღებისას.

სტრიმების ძირითადი გამოყენებები:

  • UI განახლებები: მონაცემების ცვლილებების მოსმენა (მაგალითად, ქსელური მოთხოვნებიდან ან მონაცემთა ბაზიდან) და ვიჯეტების ავტომატური განახლება.
  • BLoC/Cubit და UI შორის კავშირი: BLoC/Cubit იყენებს Stream-ს (გავლის StateStreamable-ის საშუალებით) მდგომარეობების გამოსაცემად, რომელზეც UI-ი აბონდება.
  • მომხმარებლის შეყვანის დამუშავება: შეყვანის მოვლენების მონიტორინგი (მაგალითად, ტექსტური ველებიდან).
  • WebSocket და სხვა ასინქრონული ოპერაციები: მონაცემების მიღება რეალურ დროში.

ძირითადი კონცეფციები:

  • Stream: ასინქრონული მოვლენების მიმდევრობა.
  • StreamController: მართავს სტრიმს, საშუალებას აძლევს მონაცემების დამატებას (add), შეცდომების (addError) და სტრიმის დახურვას (close).
  • StreamSubscription: ობიექტი, რომელიც წარმოადგენს აქტიურ გამოწერას სტრიმზე. საშუალებას აძლევს მონაცემების მიღებას (onData), შეცდომების დამუშავებას (onError) და სტრიმის დასრულებას (onDone).

StreamBuilder-თან გამოყენების მაგალითი:

// განვივითაროთ, რომ გვაქვს სტრიმი, რომელიც გამოსცემს მთელ რიცხვებს
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream, // გამოწერა სტრიმზე
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator(); // სანამ სტრიმი მონაცემებს ელოდება
        } else if (snapshot.hasError) {
          return Text('Error: ${snapshot.error}'); // თუ მოხდა შეცდომა
        } else {
          return Text('Count: ${snapshot.data}'); // ბოლო მონაცემების ჩვენება
        }
      },
    );
  }
}

სტრიმები შეიძლება იყოს:

  • Single-subscription: მხოლოდ ერთი მსმენელი შეიძლება იყოს გამოწერილი ნებისმიერ დროს. მეორე გამოწერა გამოიწვევს შეცდომას.
  • Broadcast: მრავალი მსმენელი შეიძლება იყოს გამოწერილი ერთ სტრიმზე. მონაცემები გადაეცემა ყველა აქტიურ მსმენელს.

სტრიმების დამუშავებისთვის ხშირად გამოიყენება rxdart პაკეტის ოპერატორები, რომლებიც უზრუნველყოფენ მდიდარ ინსტრუმენტებს ტრანსფორმაციის, ფილტრაციის და გაერთიანებისათვის.