Flutter工具集插件app_utils的使用

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

Flutter工具集插件app_utils的使用

简介

app_utils 是一个Flutter插件,提供了一系列实用功能,支持在Android和iOS平台上使用。它可以帮助开发者轻松实现应用启动、获取已安装的应用列表、检查应用是否可启动等功能。

安装

Android

在Android中,您可以选择声明 QUERY_ALL_PACKAGES 权限以获得更广泛的包可见性,或者指定特定的包:

<!-- 仅适用于核心功能应用如杀毒软件等 -->
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> 

  OR 

<!-- 对于常见的用例 -->
<queries> 
 <package android:name="com.whatsapp.businessapp"/> 
 <package android:name="in.techbyvishesh.myapp"/> 
</queries>

注意:如果您的应用不真正需要 QUERY_ALL_PACKAGES 权限作为核心功能,则建议使用 <queries> 标签替代。

iOS

在iOS中,为了从您的应用打开目标应用,您需要提供目标应用的URL Scheme。

更多信息请访问 Apple官方文档

对于部署目标大于或等于9的情况,还需要在Info.plist中更新其他应用程序信息:

<key>LSApplicationQueriesSchemes</key>
<array>
<string>whatsapp</string> // URL Scheme
</array>

支持的功能

以下是app_utils插件支持的一些主要功能:

  • launchApp:根据提供的包名(Android)或URL Scheme(iOS)启动指定的应用。
  • getInstalledApps:返回设备上已安装的应用程序列表(仅Android)。
  • canLaunchApp:验证应用程序是否可以启动。
  • getCurrentDeviceInfo:返回当前设备的信息。
  • getCurrentAppInfo:返回关于您的应用程序的信息。
  • readLaunchedData:读取发送者应用程序的数据。
  • openDeviceSettings:启动设置页面。

示例代码

以下是一个完整的示例,展示如何使用app_utils插件:

import 'dart:io';
import 'package:app_utils/models.dart';
import 'package:flutter/material.dart';
import 'package:app_utils/app_utils.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('App Util Example')),
        body: Center(
          child: FutureBuilder<List<BundleInfo>>(
            future: AppUtils.getInstalledApps(),
            builder: (BuildContext context, AsyncSnapshot<List<BundleInfo>> snapShot) {
              if (snapShot.data != null) {
                return ListView.builder(
                  itemCount: snapShot.data?.length ?? 0,
                  itemBuilder: (context, index) {
                    final appDetail = snapShot.data![index];
                    return GestureDetector(
                      child: Card(
                        elevation: 2,
                        child: ListTile(
                          title: Text(appDetail.appName),
                          subtitle: Text("${appDetail.appIdentifier}"),
                        ),
                      ),
                      onTap: () {
                        AppUtils.launchApp(
                          androidPackage: appDetail.appIdentifier,
                          iosUrlScheme: "whatsapp://",
                          playStoreUrl: "https://play.google.com/store/apps/details?id=${appDetail.appIdentifier}",
                          appStoreUrl: "https://apps.apple.com/in/app/whatsapp-messenger/id310633997",
                          launchStore: true,
                        );
                      },
                    );
                  },
                );
              } else {
                return CircularProgressIndicator();
              }
            },
          ),
        ),
        floatingActionButton: Row(mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [
          ElevatedButton(
            onPressed: () async {
              final settings = Platform.isAndroid
                  ? AndroidSettings(settings: AndroidSettingsType.MAIN)
                  : IOSSettings(settings: IOSSettingsType.MAIN);
              await AppUtils.openDeviceSettings(settings);
            },
            child: Text("Open Settings"),
          ),
          Builder(builder: (BuildContext builderContext) {
            return ElevatedButton(
              onPressed: () async {
                final canLaunch = await AppUtils.canLaunchApp(
                  androidPackageName: "com.whatsapp",
                  iOSUrlScheme: "whatsapp://",
                );
                ScaffoldMessenger.of(builderContext).showSnackBar(SnackBar(
                  content: Text("Can launch application : $canLaunch"),
                ));
              },
              child: Text("Can Launch App"),
            );
          }),
          Builder(
            builder: (builderContext) => ElevatedButton(
              onPressed: () async {
                final deviceInfo = await AppUtils.getCurrentDeviceInfo();
                final appInfo = await AppUtils.getCurrentAppInfo();
                final launchData = await AppUtils.readLaunchedData();
                showCupertinoModalPopup(
                  context: builderContext,
                  builder: (context) {
                    return Material(
                      child: Container(
                        height: 100,
                        width: 500,
                        child: Column(
                          children: [
                            Text("Name : ${deviceInfo.name}", style: TextStyle(fontWeight: FontWeight.w600)),
                            Text("Id : ${deviceInfo.id}", style: TextStyle(fontWeight: FontWeight.w600)),
                            Text("Brand : ${deviceInfo.brand}", style: TextStyle(fontWeight: FontWeight.w600)),
                            Text("Os Version : ${deviceInfo.osVersion}", style: TextStyle(fontWeight: FontWeight.w600)),
                          ],
                        ),
                      ),
                    );
                  },
                );
              },
              child: Text("Device Info"),
            ),
          ),
        ]),
      ),
    );
  }
}

以上代码展示了如何使用app_utils插件来获取已安装的应用列表,并通过点击某个应用来启动它。同时,还演示了如何打开设备设置页面以及检查应用是否可以启动等功能。

希望这个示例能帮助您更好地理解和使用app_utils插件!


更多关于Flutter工具集插件app_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter工具集插件app_utils的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter开发中,app_utils 是一个非常实用的工具集插件,它提供了一系列便捷的方法来简化常见的开发任务。下面是一些关于如何使用 app_utils 插件的代码示例。假设你已经将 app_utils 添加到你的 pubspec.yaml 文件中,并且已经运行了 flutter pub get

首先,确保你的 pubspec.yaml 文件中包含以下依赖:

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

然后,在你的 Dart 文件中导入 app_utils

import 'package:app_utils/app_utils.dart';

示例代码

1. 获取设备信息

void printDeviceInfo() async {
  DeviceInfo deviceInfo = await AppUtils.deviceInfo;
  print('品牌: ${deviceInfo.brand}');
  print('型号: ${deviceInfo.model}');
  print('系统版本: ${deviceInfo.systemVersion}');
  print('屏幕宽度: ${deviceInfo.screenWidth}px');
  print('屏幕高度: ${deviceInfo.screenHeight}px');
}

2. 获取应用信息

void printAppInfo() {
  AppInfo appInfo = AppUtils.appInfo;
  print('应用名称: ${appInfo.name}');
  print('应用包名: ${appInfo.packageName}');
  print('应用版本: ${appInfo.versionName}');
  print('应用版本号: ${appInfo.versionCode}');
}

3. 检查权限

void checkPermissions() async {
  bool hasCameraPermission = await AppUtils.hasPermission(Permission.camera);
  bool hasStoragePermission = await AppUtils.hasPermission(Permission.storage);

  print('是否有相机权限: $hasCameraPermission');
  print('是否有存储权限: $hasStoragePermission');

  // 请求权限
  Map<Permission, PermissionStatus> statusMap = await AppUtils.requestPermissions([
    Permission.camera,
    Permission.storage,
  ]);

  statusMap.forEach((permission, status) {
    print('${permission.toString()}: $status');
  });
}

4. 复制文本到剪贴板

void copyTextToClipboard() async {
  String textToCopy = "Hello, Flutter!";
  bool isCopied = await AppUtils.copyToClipboard(textToCopy);
  print('文本复制成功: $isCopied');
}

5. 打开设置页

void openSettings() async {
  bool isOpened = await AppUtils.openAppSettings;
  print('设置页打开成功: $isOpened');
}

注意事项

  • 在使用权限相关功能时,请确保在 AndroidManifest.xmlInfo.plist 中声明了相应的权限。
  • app_utils 插件的具体方法和属性可能会随着版本的更新而变化,请参考最新的官方文档或源代码以获取最新信息。

这些示例展示了如何使用 app_utils 插件来获取设备信息、应用信息、检查并请求权限、复制文本到剪贴板以及打开系统设置页。根据你的具体需求,你可以进一步扩展和定制这些功能。

回到顶部