Sobes.tech
Junior

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

sobes.tech AI

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

Flutter- ში სტრიმები გამოიყენება ასინქრონული მოვლენების მიმდევრობის დამუშავებისთვის:

ძირითადი შემთხვევები:

  1. მონაცემთა ცვლილებაზე რეაგირება: Redux, BLoC-პატერნები იყენებენ სტრიმებს აპლიკაციის მდგომარეობის მართვის და რეაქტიული UI განახლებისთვის ცვლილებების დროს:
  2. ტალღოვანი მონაცემების მუშაობა: ქსელიდან მონაცემების მიღება (მაგალითად, WebSocket), ფაილიდან კითხვა, მოწყობილობის სენსორებთან მუშაობა:
  3. მომხმარებლის ინტერაქციების დამუშავება: სქროლინგის მონიტორინგი, Draggable / DragTarget:
  4. ასინქრონული ოპერაციები: სამუშაოების შესრულება ფონზე და შედეგების მიღება მათი მზადყოფნის დროს:

ძირითადი ცნებები:

  • Stream: ასინქრონული მოვლენების მიმდევრობა. სტრიმი შეიძლება გამოუშვას 0 ან მეტი მოვლენა, და შემდეგ დასრულდეს (წარმატებით ან შეცდომით):
  • StreamSubscription: წარმოადგენს სტრიმზე გამოწერას. საშუალებას აძლევს მიიღოს მოვლენები სტრიმიდან და მართოს გამოწერა (შესაჩერებლად, განახლებისთვის, გაუქმებისთვის):
  • Sink: გამოიყენება მონაცემების დამატებისთვის სტრიმში:
  • StreamBuilder: ვიჯეტი, რომელიც განახლდება ახალი მონაცემების მიღებისას:
// მაგალითი StreamBuilder-ის გამოყენებით
StreamBuilder<int>(
  stream: counterStream, // თქვენი სტრიმი
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('შეცდომა: ${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('მოსალოდნელობა...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('მნიშვნელობა: ${snapshot.data}');
      case ConnectionState.done:
        return Text('სტრიმი დასრულდა. ბოლო მნიშვნელობა: ${snapshot.data}');
    }
  },
)
// მარტივი სტრიმის მაგალითი, რომელიც გამოუშვებს რიცხვებს
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // გამოუშვით მნიშვნელობა
  }
}