feat: add contact during call if contact is unknown
All checks were successful
/ mirror (push) Successful in 4s
/ build (push) Successful in 9m51s
/ build-stealth (push) Successful in 9m51s

This commit is contained in:
Florian Griffon 2025-04-29 23:26:28 +03:00
parent 81187f4384
commit ce7a5b10b0

View File

@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'dart:typed_data'; import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_contacts/flutter_contacts.dart';
import 'package:dialer/services/call_service.dart'; import 'package:dialer/services/call_service.dart';
import 'package:dialer/services/obfuscate_service.dart'; import 'package:dialer/services/obfuscate_service.dart';
import 'package:dialer/widgets/username_color_generator.dart'; import 'package:dialer/widgets/username_color_generator.dart';
@ -35,6 +36,8 @@ class _CallPageState extends State<CallPage> {
StreamSubscription<String>? _callStateSubscription; StreamSubscription<String>? _callStateSubscription;
StreamSubscription<Map<String, dynamic>>? _audioStateSubscription; StreamSubscription<Map<String, dynamic>>? _audioStateSubscription;
bool get isNumberUnknown => widget.displayName == widget.phoneNumber;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -198,6 +201,23 @@ class _CallPageState extends State<CallPage> {
} }
} }
void _addContact() async {
if (await FlutterContacts.requestPermission()) {
final newContact = Contact()..phones = [Phone(widget.phoneNumber)];
final updatedContact =
await FlutterContacts.openExternalInsert(newContact);
if (updatedContact != null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Contact added successfully!')),
);
}
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Permission denied for contacts')),
);
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final double avatarRadius = isKeypadVisible ? 45.0 : 45.0; final double avatarRadius = isKeypadVisible ? 45.0 : 45.0;
@ -416,11 +436,12 @@ class _CallPageState extends State<CallPage> {
Row( Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly, mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [ children: [
if (isNumberUnknown)
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
IconButton( IconButton(
onPressed: () {}, onPressed: _addContact,
icon: const Icon( icon: const Icon(
Icons.person_add, Icons.person_add,
color: Colors.white, color: Colors.white,