phone_state 1.0.3 phone_state: ^1.0.3 copied to clipboard
This plugin allows you to know quickly and easily if your Android or iOS device is receiving a call and to know the status of the call.
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:phone_state/phone_state.dart';
main() {
runApp(
const MaterialApp(
home: Example(),
),
);
}
class Example extends StatefulWidget {
const Example({Key? key}) : super(key: key);
@override
State<Example> createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
PhoneState status = PhoneState.nothing();
bool granted = false;
Future<bool> requestPermission() async {
var status = await Permission.phone.request();
return switch (status) {
PermissionStatus.denied || PermissionStatus.restricted || PermissionStatus.limited || PermissionStatus.permanentlyDenied => false,
PermissionStatus.provisional || PermissionStatus.granted => true,
};
}
@override
void initState() {
super.initState();
if (Platform.isIOS) setStream();
}
void setStream() {
PhoneState.stream.listen((event) {
setState(() {
if (event != null) {
status = event;
}
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Phone State"),
centerTitle: true,
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
if (Platform.isAndroid)
MaterialButton(
onPressed: !granted
? () async {
bool temp = await requestPermission();
setState(() {
granted = temp;
if (granted) {
setStream();
}
});
}
: null,
child: const Text("Request permission of Phone"),
),
const Text(
"Status of call",
style: TextStyle(fontSize: 24),
),
if (status.status == PhoneStateStatus.CALL_INCOMING || status.status == PhoneStateStatus.CALL_STARTED)
Text(
"Number: ${status.number}",
style: const TextStyle(fontSize: 24),
),
Icon(
getIcons(),
color: getColor(),
size: 80,
)
],
),
),
);
}
IconData getIcons() {
return switch (status.status) {
PhoneStateStatus.NOTHING => Icons.clear,
PhoneStateStatus.CALL_INCOMING => Icons.add_call,
PhoneStateStatus.CALL_STARTED => Icons.call,
PhoneStateStatus.CALL_ENDED => Icons.call_end,
};
}
Color getColor() {
return switch (status.status) {
PhoneStateStatus.NOTHING || PhoneStateStatus.CALL_ENDED => Colors.red,
PhoneStateStatus.CALL_INCOMING => Colors.green,
PhoneStateStatus.CALL_STARTED => Colors.orange,
};
}
}