تتبع حالة الاتصال في فلاتر ومعرفة اذا كان الهاتف يرن وهل تم قبول المكالمه ام لا

تتبع حالة الاتصال في فلاتر ومعرفة اذا كان الهاتف يرن وهل تم قبول المكالمه ام لا


تتبع حالة الاتصال في فلاتر ومعرفة اذا كان الهاتف يرن وهل تم قبول المكالمه ام لا

من احد المكتبات الجميله التي يمكنك استخدامها في فلاتر والتي تسهل عليك كتابة كود كبير اذا كنت ترغب  بمعرفة حالة الاتصال في هاتفك وبناء عليها تقوم بتنفيذ امر معين مثال على ذلك عندما يقوم احد الاشخاص بالاتصال عليك بشكل مباشر  عن طريق الهاتف يمكنك عرض رقم الشخص ومعرفة اسمه مثل الخدمة التي يقدمها تروكولر او حتى عندما يقوم شخص بالاتصال عليك يمكنك تغيير الصفحة التي توجد بالتطبيق اي اي صفحة اخرى او تنفيذ اي امر معين تريده عندما يقوم الاشخاص بالاتصال عليك .


توجد اطارات عمل مشتركة بين الأنظمة الأساسية مثل 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;
    }
  }

}


مزيد من المقالات

تعليقات