尝试直接从 FLUTTER 发出呼叫:MissingPluginException(未找到方法 callNumber 的实现
Posted
技术标签:
【中文标题】尝试直接从 FLUTTER 发出呼叫:MissingPluginException(未找到方法 callNumber 的实现【英文标题】:TRYING TO PLACE CALL DIRECTLY FROM FLUTTER: MissingPluginException(No implementation found for method callNumber 【发布时间】:2021-08-06 22:11:00 【问题描述】:我希望我的应用在出现特定情况时自动拨打特定号码。两个流行的插件是flutter_phone_direct_caller 和url_launcher。网址启动器的问题是该方法会将号码推送到您手机的拨号器,但不会启动呼叫,但 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):[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] 未处理的异常:MissingPluginException(在通道 flutter_phone_direct_caller 上找不到方法 callNumber 的实现)
这个插件有 94% 的流行度,所以它适用于大多数人。有谁知道是什么问题?
【问题讨论】:
我看到你已经在他们的 github 上提出了issue
。您使用哪种设备进行开发?
是的,红米note 9 pro
我使用的是 Oppo Reno 5 Pro,只是复制了您的代码并替换了我的电话号码。它实际上对我来说工作得很好。
您使用的是哪个版本的flutter_phone_direct_caller
?
我已经添加了一个答案。检查它是否解决了您的问题。
【参考方案1】:
flutter 与原生功能集成的方式是创建所谓的MethodChannels
,使用它可以调用注册在原生java
dart 代码中的函数。
所以这个错误可能出现的一个原因是您的颤振代码无法与本机 java 代码通信,这意味着它没有找到任何 channel
或者它没有找到包通过以下方式注册的 method
channel
那里。
我怀疑这可能是构建问题。
步骤
-
从您的设备上卸载应用程序。
再次重建应用程序。
这应该可以解决问题。
【讨论】:
是的,这行得通!非常感谢你,我自己永远也想不通。 很高兴有帮助:D 有效答案+1以上是关于尝试直接从 FLUTTER 发出呼叫:MissingPluginException(未找到方法 callNumber 的实现的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 来自 WebViewScaffold 中显示的网页的电话呼叫
如何从flutter应用程序向本地主机发出http get请求?