Flutter来电识别插件who_called_me的使用

发布于 1周前 作者 wuwangju 来自 Flutter

Flutter来电识别插件who_called_me的使用

这是一个简单的工具,用于提取有关调用函数的信息。

只需调用 Caller.whoCalledMe 来获取一个包含调用函数信息(如路径、行号等)的 Caller 实例。

在调试时,这非常有用,因为每次我都想知道是谁调用了我的函数。

它能够处理 package:file: 路径。

使用方法

只需调用 Caller.whoCalledMeCaller.whoCalledWhoCalledMeCaller.whoAmI 中的一个来获取一个包含调用者、调用者的调用者或当前函数信息的 Caller 实例。

示例

示例代码

main.dart

void main() {
  someFun();
  // 将打印出以下内容之一:
  // `Called by 'main' in file://main.dart 2:2`
  // 或
  // `Called by 'main' in package:yourPackage/main.dart:2:2`
  // 这取决于调用上下文。
  // 在 Android Studio 中,这两个链接似乎是可点击的,并且会带你到正确的调用位置。
  f();
}

void f(){
  someFun();
  // 打印出以下内容之一:
  // `Called by 'f' in file://main.dart 13:2`
  // 或
  // `Called by 'f' in package:yourPackage/main.dart:13:2`
}

void someFun() {
  var caller = Caller.whoCalledMe;
  print("Called by '${caller.functionName}' in ${caller.path}");
}

示例代码文件

import 'package:who_called_me/who_called_me.dart';

void debug(s) {
  var caller = Caller.whoCalledMe;
  print("$s 发生在 ${caller?.path}");
}

void main() {
  debug("hello");
  f();
}

void f() {
  debug("world");
}

更多关于Flutter来电识别插件who_called_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter来电识别插件who_called_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用who_called_me插件来进行来电识别的代码案例。请注意,这个插件的具体功能和API可能会根据插件的版本有所不同,因此请确保你查阅了最新的插件文档。此外,来电识别功能可能需要设备具有相应的权限,并且在实际应用中可能会受到操作系统的限制。

首先,你需要在你的pubspec.yaml文件中添加who_called_me插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  who_called_me: ^最新版本号  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装插件。

接下来,在你的Flutter项目中,你需要请求必要的权限(如读取电话日志权限),然后初始化并使用who_called_me插件。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:who_called_me/who_called_me.dart';
import 'package:permission_handler/permission_handler.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Who Called Me Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  WhoCalledMe? _whoCalledMe;
  List<dynamic>? _callLogs;

  @override
  void initState() {
    super.initState();
    _initializePlugin();
  }

  Future<void> _initializePlugin() async {
    // 请求读取电话日志权限
    var status = await Permission.phoneLogs.status;
    if (!status.isGranted) {
      var result = await Permission.phoneLogs.request();
      if (result.isGranted) {
        // 权限被授予,初始化插件
        _whoCalledMe = WhoCalledMe();
        _getCallLogs();
      } else {
        // 权限被拒绝,处理拒绝情况
        print('读取电话日志权限被拒绝');
      }
    } else {
      // 权限已经被授予,初始化插件
      _whoCalledMe = WhoCalledMe();
      _getCallLogs();
    }
  }

  Future<void> _getCallLogs() async {
    if (_whoCalledMe != null) {
      try {
        // 获取来电记录
        _callLogs = await _whoCalledMe!.getCallLogs();
        setState(() {}); // 刷新UI
      } catch (e) {
        print('获取来电记录失败: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Who Called Me Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: _callLogs != null
            ? ListView.builder(
                itemCount: _callLogs!.length,
                itemBuilder: (context, index) {
                  Map<String, dynamic> callLog = _callLogs![index] as Map<String, dynamic>;
                  return ListTile(
                    title: Text('Number: ${callLog['number']}'),
                    subtitle: Text('Date: ${callLog['date']}'),
                  );
                },
              )
            : Center(
                child: CircularProgressIndicator(),
              ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. 使用permission_handler插件请求读取电话日志的权限。
  2. 初始化who_called_me插件。
  3. 调用getCallLogs方法获取来电记录。
  4. 在UI中显示来电记录。

请注意,由于操作系统的限制,某些设备或模拟器可能无法提供完整的电话日志数据,或者可能根本不允许访问这些数据。因此,在实际应用中,你应该处理好这些情况,并提供用户友好的反馈。

此外,由于插件的API可能会变化,因此请务必查阅最新的who_called_me插件文档,以确保你使用的是正确的API和方法。

回到顶部