تتبع حالة الاتصال في فلاتر ومعرفة اذا كان الهاتف يرن وهل تم قبول المكالمه ام لا
من احد المكتبات الجميله التي يمكنك استخدامها في فلاتر والتي تسهل عليك كتابة كود كبير اذا كنت ترغب بمعرفة حالة الاتصال في هاتفك وبناء عليها تقوم بتنفيذ امر معين مثال على ذلك عندما يقوم احد الاشخاص بالاتصال عليك بشكل مباشر عن طريق الهاتف يمكنك عرض رقم الشخص ومعرفة اسمه مثل الخدمة التي يقدمها تروكولر او حتى عندما يقوم شخص بالاتصال عليك يمكنك تغيير الصفحة التي توجد بالتطبيق اي اي صفحة اخرى او تنفيذ اي امر معين تريده عندما يقوم الاشخاص بالاتصال عليك .
توجد اطارات عمل مشتركة بين الأنظمة الأساسية مثل Xamarin و React Native بالفعل في السوق لتطوير تطبيقات iOS و Android بقاعدة رمز واحدة. بينما يشارك Flutter المفاهيم مع React Native و Xamarin ، تختلف البنية الفنية لجميع الاطارات الثلاثة اختلافًا كبيرًا. دعنا نرى كيف تتراكم Flutter مقابل أطر العمل المشتركة بين الأنظمة الأساسية باستخدام المعايير التالية. دون إجراء أي مقارنات مع الأنظمة الأساسية الأخرى ، إليك بعض الميزات والسمات التي يمكن أن تغريك بتجربة Flutter: في ديسمبر 2018 ، أصبح Flutter مستقرًا. ثم بدأ في إنشاء تطبيقات فيه ، ووصل إلى درجة غير مسبوقة من النشوة. هذا رائع؛ إنه أمر رائع بالنسبة لنا ، ولكن ماذا يعني ذلك لمطور البرامج الرائد لديك؟
المكتبات المخصصه لمعرفة حالة اتصال الهاتف واخذ اذن من الهاتف بتتبع حالة الاتصال
dependencies:
phone_state: ^1.0.1
permission_handler: ^9.2.0
شرح كيفية تتبع حالة الاتصال في فلاتر ومعرفة حالة الاتصال
عند تثبيت المكتبة السابقه لديك يمكنك بعدها ان تقوم بتنفيذ اي امر معين تريده ابسط مثال على ذلك وهو الكود التالي في البدايه سوف يطلب منك الوصول الى جهات الاتصال الخاصه بك وعليك السماح بذلك , بعدها سوف نقوم بتغيير الايقونه واللون الخاص بالعنصر بناء على حالة الاتصال سواء قام احد الاشخاص بالاتصال عليك او رفضت المكاله او في حالة الاتصال كل هذا يمكنك التعديل عليه بكل سهوله من خلال الاكواد التاليه .
call.dart
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:phone_state/phone_state.dart';
import 'package:permission_handler/permission_handler.dart';
class FullPage extends StatefulWidget {
const FullPage({Key? key}) : super(key: key);
@override
State<FullPage> createState() => _FullPageState();
}
class _FullPageState extends State<FullPage> {
PhoneStateStatus status = PhoneStateStatus.NOTHING;
bool granted = false;
Future<bool> requestPermission() async {
var status = await Permission.phone.request();
switch (status) {
case PermissionStatus.denied:
case PermissionStatus.restricted:
case PermissionStatus.limited:
case PermissionStatus.permanentlyDenied:
return false;
case PermissionStatus.granted:
return true;
}
}
@override
void initState() {
super.initState();
if (Platform.isIOS) setStream();
}
void setStream() {
PhoneState.phoneStateStream.listen((event) {
setState(() {
if (event != null) {
status = event;
}
});
});
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[300],
appBar: AppBar(
backgroundColor: Colors.grey[200],
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text(
"Status of call",
style: TextStyle(fontSize: 24),
),
// change icon and text during call .
Icon(
getIcons(),
color: getColor(),
size: 80,
),
// show button permission if permission is false .
if (Platform.isAndroid && granted == false)
MaterialButton(
color: Colors.blue,
child: const Text("Request permission of Phone"),
onPressed: !granted
? () async {
bool temp = await requestPermission();
setState(() {
granted = temp;
if (granted) {
setStream();
}
});
}
: null,
),
],
),
),
);
}
IconData getIcons() {
// PhoneStateStatus and return Icon
switch (status) {
case PhoneStateStatus.NOTHING:
return Icons.clear;
case PhoneStateStatus.CALL_INCOMING:
return Icons.add_call;
case PhoneStateStatus.CALL_STARTED:
return Icons.call;
case PhoneStateStatus.CALL_ENDED:
return Icons.call_end;
}
}
Color getColor() {
// PhoneStateStatus and return color
switch (status) {
case PhoneStateStatus.NOTHING:
case PhoneStateStatus.CALL_ENDED:
return Colors.red;
case PhoneStateStatus.CALL_INCOMING:
return Colors.green;
case PhoneStateStatus.CALL_STARTED:
return Colors.orange;
}
}
}
مزيد من المقالات