#flutter #dart #plugins #phone-call
Вопрос:
Я хочу, чтобы мое приложение автоматически звонило на определенный номер при возникновении определенных условий. Двумя популярными плагинами являются flutter_phone_direct_caller и url_launcher. Проблема запуска Url-адресов заключается в том, что метод отправит номер на номеронабиратель вашего телефона, но не начнет вызов, но flutter_phone_direct_caller утверждает, что он будет инициирован. Это пример в их документации.
import 'package:flutter/material.dart';
import 'package:flutter_phone_direct_caller/flutter_phone_direct_caller.dart';
void main() {
runApp(Scaffold(
body: Center(
child: RaisedButton(
onPressed: _callNumber,
child: Text('Call Number'),
),
),
));
}
_callNumber() async{
const number = '08592119XXXX'; //set the number here
bool res = await FlutterPhoneDirectCaller.callNumber(number);
}
это код для моей страницы..когда кнопка нажата, должен начаться вызов, но для меня он возвращает ошибку.(мой номер телефона XXXd отключен ,когда я его запустил, я вставил свой фактический номер).
import 'package:flutter/material.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:vitality/components/bottomAppBar.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:vitality/components/biom.dart';
import 'package:flutter_phone_direct_caller/flutter_phone_direct_caller.dart';
class HomeScreen extends StatefulWidget {
static const String id = 'home_screen';
final String docid;
final bool isCaretaker;
HomeScreen({@required this.docid, @required this.isCaretaker});
@override
_HomeScreenState createState() => _HomeScreenState();
}
_callNumber() async {
const number = '86065XXXXX'; //set the number here
bool res = await FlutterPhoneDirectCaller.callNumber(number);
}
class _HomeScreenState extends State<HomeScreen> {
final auth = FirebaseAuth.instance;
var pulse;
var temp;
@override
Widget build(BuildContext context) {
print('got here');
print(auth.currentUser.uid);
String id = ModalRoute.of(context).settings.arguments;
CollectionReference main = FirebaseFirestore.instance.collection('maindb');
main.doc(id).get().then((DocumentSnapshot documentSnapshot) {
if (documentSnapshot.exists) {
print('Document exists on the database');
pulse = documentSnapshot['pulse'];
temp = documentSnapshot['temperature'];
}
});
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
backgroundColor: Color(0xFF602247),
toolbarHeight: 50.0,
centerTitle: true,
title: Text(
'HEALTH TRACKER',
style: Theme.of(context).textTheme.headline4,
)),
body: Container(
decoration: BoxDecoration(
image: DecorationImage(
image:
NetworkImage('https://cdn.wallpapersafari.com/12/24/GiZRfh.jpg'),
fit: BoxFit.cover,
colorFilter: new ColorFilter.mode(
Colors.black.withOpacity(.7), BlendMode.dstATop),
)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Text(widget.docid),
Text({widget.isCaretaker}.toString()),
biom(which: 'pulse', image: 'pulse', docid: widget.docid),
RoundBorderText(text: 'PULSE'),
biom(which: 'temperature', image: 'temper', docid: widget.docid),
RoundBorderText(text: 'TEMPERATURE'),
SizedBox(height: 30.0),
FlatButton(
child: Text('test call'),
onPressed: () async {
FlutterPhoneDirectCaller.callNumber('5');
})
]),
),
bottomNavigationBar: bottomAppBar(id: widget.docid),
);
}
}
class RoundBorderText extends StatelessWidget {
final String text;
RoundBorderText({this.text});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.only(
left: 40.0, right: 40.0, top: 8.0, bottom: 8.0),
decoration: BoxDecoration(
// border: Border.all(
// color: Colors.black,
// width: 1.0,
// ),
borderRadius: BorderRadius.all(Radius.circular(20))),
child: Text(text, style: Theme.of(context).textTheme.headline1));
}
}
E/flutter (23210): [ОШИБКА:flutter/lib/ui/ui_dart_state.cc(186)] Необработанное исключение: Исключение MissingPluginException(Не найдена реализация для номера вызова метода на канале flutter_phone_direct_caller)
Этот плагин пользуется популярностью на 94%, поэтому он работает для большинства людей. Кто-нибудь знает, в чем проблема?
Комментарии:
1. Я вижу, что вы уже подняли
issue
вопрос на их github. Какое устройство вы используете для разработки ?2. да, redmi note 9 pro
3. Я использую Oppo Reno 5 Pro и просто скопировал ваш код и заменил свой номер телефона. На самом деле это прекрасно работает для меня.
4. Какую версию
flutter_phone_direct_caller
вы используете ?5. Я добавил ответ. Проверьте, решает ли это вашу проблему.
Ответ №1:
Способ интеграции flutter с собственной функциональностью заключается в том, что он создает то, что называется MethodChannels
, с помощью которого они могут вызывать функции, зарегистрированные в собственном java
коде из dart.
Таким образом, одна из причин, по которой может возникнуть эта ошибка, заключается в том, что ваш код flutter не может взаимодействовать с собственным кодом java, что означает, что он не находит channel
его или не находит method
зарегистрированный пакет через channel
там.
Я подозреваю, что это может быть проблемой сборки.
Шаги
- Удалите приложение с вашего устройства.
- Перестройте приложение снова.
Это должно решить проблему.
Комментарии:
1. Да, это сработало! спасибо тебе огромное, никогда бы не догадался об этом сам.
2. Рад, что помог 😀