مدیریت داده های ناهمزمان در فلوتر – قدرت جریان ها

Flutter یک چارچوب توسعه برنامه موبایل منبع باز محبوب است که به توسعه دهندگان این امکان را می دهد تا برنامه های تلفن همراه با عملکرد بالا، از نظر بصری جذاب و دارای ویژگی های غنی ایجاد کنند. مفهوم جریان یکی از ویژگی های ضروری فلاتر است که به شما امکان می دهد داده های ناهمزمان را مدیریت کنید. این مقاله استریم فلاتر، کاربردهای آن و نحوه عملکرد آن را بررسی خواهد کرد.
استریم چیست؟
جریان flutter دنباله ای از داده های ناهمزمان است که می تواند به طور موثر پردازش و مصرف شود. در یک جریان، داده های پیوسته در یک جریان پیوسته به یک برنامه کاربردی تحویل داده می شود. این می تواند رویدادهای ورودی، پاسخ های شبکه و حتی انیمیشن ها را مدیریت کند.
جریانها برای مدیریت دادههای ناهمزمان در نظر گرفته شدهاند که ممکن است زمان نامشخصی برای رسیدن به آنها طول بکشد، و به توسعهدهنده اجازه میدهد تا به محض در دسترس شدن دادهها را مدیریت کند. جریان ها نیز بسیار کارآمد هستند زیرا فقط داده های موجود را پردازش می کنند و منابع را در انتظار داده هدر نمی دهند.
فرض کنید یک برنامه آب و هوا دارید که لیستی از به روز رسانی های آب و هوا را نمایش می دهد. بهجای بررسی مداوم بهروزرسانیهای جدید، میتوانید از یک جریان برای گوش دادن و نمایش بهروزرسانیهای یک سرور در زمان واقعی استفاده کنید. وقتی یک بهروزرسانی جدید دریافت میشود، از طریق جریان ارسال میشود و برنامه شما میتواند مطابق با آن پاسخ دهد.
انواع جریان
دو نوع استریم در فلاتر وجود دارد،
جریان اشتراک تک
جریانی که فقط یک بار می توان به آن گوش داد. هنگامی که داده ها مصرف شد، جریان بسته می شود.
پخش جریانی
جریانی که مکررا می توان به آن گوش داد. چندین مشترک می توانند به طور همزمان به یک جریان گوش دهند.
نحوه کار با Streams
برای کار با استریم ها در Flutter، مراحل زیر را برای ادغام موثر استریم در برنامه خود دنبال کنید.
مرحله 1
وارد کنید dart:async
کتابخانه
import 'dart:async';
را dart:async
کتابخانه در Dart و Flutter برای کار با برنامه نویسی ناهمزمان استفاده می شود.
گام 2
یک شی StreamController ایجاد کنید.
final StreamController<int> _controller = StreamController<int>();
در Flutter، شی StreamController به شما امکان ایجاد، اضافه کردن داده ها و گوش دادن به جریان ها را می دهد. در این مورد، ما یک StreamController جدید برای مدیریت اعداد صحیح می سازیم.
مرحله 3
داده ها را به جریان اضافه کنید.
_controller.sink.add(1);
_controller.sink.add(2);
_controller.sink.add(3);
ویژگی StreamController sink برای افزودن داده به جریان استفاده می شود. در این مورد، ما سه مقدار صحیح را به جریان اضافه می کنیم: 1، 2، و 3.
مرحله 4
یک شی StreamSubscription ایجاد کنید:
final StreamSubscription<int> _subscription = _controller.stream.listen((event) {
print(event);
});
شی _subscription
برای گوش دادن به جریان داده ایجاد شده است. StreamController’s listen
متد یک تابع فراخوانی را ثبت می کند که هر زمان که رویداد جدیدی به جریان اضافه شود فراخوانی می شود. در این مورد، ما از print
تابعی برای چاپ مقدار هر رویداد جدید در کنسول.
مرحله 5
اشیاء StreamSubscription و StreamController را ببندید
_subscription.onDone(() {
_controller.close();
});
اشتراک Stream’s onDone
متد یک تابع فراخوانی را ثبت می کند که پس از پایان اشتراک، گوش دادن به جریان فراخوانی می شود. در این مورد، ما StreamController را صدا می کنیم close
روشی برای بستن جریان و انتشار هر گونه منابع مرتبط.
بیایید یک برنامه شمارنده با یک جریان ایجاد کنیم،
ما اکنون با استفاده از استریم ها، یک برنامه پیشخوان اولیه را توسعه خواهیم داد، که مفاهیمی را که تاکنون آموخته ایم را در بر می گیرد.
import 'package:flutter/material.dart';
import 'dart:async';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final StreamController<int> _streamController = StreamController<int>();
Stream<int> get counterStream => _streamController.stream;
int _counter = 0;
@override
void dispose() {
_streamController.close();
super.dispose();
}
void _incrementCounter() {
_counter++;
_streamController.sink.add(_counter);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text(
'You have pushed the button this many times:',
),
StreamBuilder<int>(
stream: counterStream,
initialData: _counter,
builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
return Text(
'${snapshot.data}',
style: Theme.of(context).textTheme.headlineMedium,
);
},
),
]),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}
ما از ویجت StreamBuilder برای ایجاد یک رابط کاربری استفاده کردیم که بر اساس جریان داده به روز می شود. استریم دنباله ای از رویدادهای ناهمزمان است که قابل مشاهده است و ویجت StreamBuilder به این جریان گوش می دهد و هر زمان که رویداد جدیدی دریافت می شود، رابط کاربری را به روز می کند.
برای استفاده از ویجت StreamBuilder، یک جریان و یک تابع سازنده برای آن ارائه می کنید. تابع سازنده دو آرگومان می گیرد: یک BuildContext برای ساخت رابط کاربری و یک AsyncSnapshot حاوی جدیدترین داده های منتشر شده توسط جریان.
از موارد Stream استفاده کنید
در فلاتر، استریم ها ابزارهای همه کاره ای هستند که می توانند به طرق مختلف مورد استفاده قرار گیرند. در اینجا چند نمونه آورده شده است،
درخواست های شبکه
یک جریان می تواند داده ها را از یک سرور در زمان واقعی دریافت کرده و آن را پردازش کند.
انیمیشن
استریم ها می توانند وضعیت انیمیشن را در حین پخش به روز کنند.
ورودی کاربر
جریانها میتوانند به رویدادها در فیلدها و دکمههای نوشتاری گوش دهند و وضعیت برنامه را متناسب با آن بهروزرسانی کنند.
مدیریت دولتی
از استریم ها می توان برای مدیریت وضعیت برنامه استفاده کرد. میتوانید جریانی ایجاد کنید که هنگام تغییر وضعیت، رویدادها را منتشر کند و از آن برای بهروزرسانی رابط کاربری استفاده کنید.
نتیجه
مدیریت داده های ناهمزمان یکی از مهمترین جنبه های توسعه Flutter است. آنها کارآمد، کاربر پسند هستند و می توانند در زمینه های مختلف مانند درخواست های شبکه، انیمیشن ها و ورودی کاربر استفاده شوند. درک کامل جریانها برای هر توسعهدهنده فلاتر ضروری است و امیدواریم این مقاله مقدمهای عالی برای این مفهوم حیاتی در اختیار شما قرار داده باشد.