بداية تأكد من إعتمادك اخر إصدار من Flutter ثم بعد هذا الكود الذي طرحته لا يمكن إعتماده مباشرة في المشروع, لكن سأقوم بكتابة الكود لك حتى تتمكن من إعتماده بشكل مباشر ووضعه في ملف main.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'dart:isolate';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Isolate Demo',
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: new MyHomePage(title: 'Flutter Isolates'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => new _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
Isolate _isolate;
bool _running = false;
static int _counter = 0;
String notification = "";
ReceivePort _receivePort;
void _start() async {
_running = true;
_receivePort = ReceivePort();
_isolate = await Isolate.spawn(_checkTimer, _receivePort.sendPort);
_receivePort.listen(_handleMessage, onDone:() {
stdout.writeln('جاري إعادة بدأ العازل');
});
}
static void _checkTimer(SendPort sendPort) async {
Timer.periodic(new Duration(seconds: 1), (Timer t) {
_counter++;
String msg = 'إشعار ' + counter.toString();
stdout.write('أرسل: ' + msg + ' - ');
sendPort.send(msg);
});
}
void _handleMessage(dynamic data) {
stdout.write('إستقبل: ' + data + ', ');
setState(() {
notification = data;
});
}
void _stop() {
if (_isolate != null) {
setState(() {
_running = false;
notification = '';
});
_receivePort.close();
_isolate.kill(priority: Isolate.immediate);
_isolate = null;
}
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new Text(
notification,
),
],
),
),
floatingActionButton: new FloatingActionButton(
onPressed: _running ? _stop : _start,
tooltip: _running ? 'إيقاف العداد' : 'بدأ العداد',
child: _running ? new Icon(Icons.stop) : new Icon(Icons.play_arrow),
),
);
}
}
وتأكد من ان ملف dart.exe موجود في المسار, وفي النهاية نفذ ببساطة الأمر (Command) التالي "dart main.dart" ليعمل التطبيق
يجب أن تحصل على نتيجة في الـconsole مثل :
جاري إعادة بدأ العازل
أرسل: إشعار 1 - إستقبل: إشعار 1,أرسل: إشعار 2 - إستقبل: إشعار 2,أرسل: إشعار 3 - إستقبل: إشعار 3,