Flutter信息获取插件info_kit的使用

Flutter信息获取插件info_kit的使用

安装

flutter pub add info_kit

示例

初始化

InfoKit.init({
  flavorEnabled: true,
  List<InfoFlavor> flavors = DefaultInfoFlavor.flavors,
  InfoFlavor fallbackFlavor = DefaultInfoFlavor.fallbackFlavor,
  InfoSize fallbackSize = DefaultInfoSize.fallbackSize,
  bool envEnabled = true,
  bool envFlavorEnabled = true,
  bool envFlavorPerPlatformEnabled = true,
  String envFolder = 'env', // 设置为空字符串以使用根文件夹
});

可用的getter

// 设备大小,基于一组预定义的大小
InfoSize size = InfoKit.size;

// Web平台的原始URL,否则返回空字符串
String origin = InfoKit.origin;

// 设备语言
Locale locale = InfoKit.locale;

// 设备平台(iOS应用、Web应用、macOS应用等)
InfoPlatform platform = InfoKit.platform;

// 设备的操作系统
InfoOS os = InfoKit.os;

// 应用构建风味
InfoFlavor flavor = InfoKit.flavor;

// 是否为发布版或调试版
InfoMode mode = InfoKit.mode;

int buildNumber = InfoKit.buildNumber;

String version = InfoKit.version;

String packageName = InfoKit.packageName;

String appName = InfoKit.appName;

使用

风味(Flavor)

该插件提供了对当前应用风味的访问。

  1. 使用flavors参数设置支持的风味列表。可以使用默认的风味列表,也可以添加更多或创建自己的风味列表。
  2. 使用构建参数定义当前风味:flutter run --dart-define=flavor=<flavor>(此包忽略了--flavor标志,因为该标志在Web构建中不可用)。
  3. 在应用的任何地方,都可以通过flavor getter访问当前风味。

大小(Size)

  1. 在项目的根部包裹一个LayoutBuilder并使用constraints属性获取尺寸:
    LayoutBuilder(
      builder: (context, constraints) {
        InfoKit.setConstrains(constraints);
        return Text('${constraints.maxWidth} x ${constraints.maxHeight}');
      },
    );
    
  2. size getter返回的尺寸来自一组预定义的尺寸。
  3. 可以使用默认的尺寸列表,也可以添加更多或创建自己的尺寸列表。

环境变量(Env)

设置不同风味的不同环境变量。

  1. 文件结构应如下所示:
    - env
      - .env
      - .env.flavor1
      - .env.flavor2
      - .env.flavor3
      - ios
        - .env.flavor1
        - .env.flavor2
        - .env.flavor3
      - android
        - .env.flavor1
        - .env.flavor2
        - .env.flavor3
      - web
        - .env.flavor1
        - .env.flavor2
        - .env.flavor3
    
  2. 环境变量的合并方式是更具体的环境变量覆盖较不具体的环境变量。别忘了将文件夹作为资源添加到pubspec.yaml文件中。
  3. 现在可以通过flutter_dotenv包访问这些变量。

截图

示例代码

import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:info_kit/info_kit.dart';

void main() async {
  await InfoKit.init();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return LayoutBuilder(
      builder: (context, constraints) {
        InfoKit.setConstrains(constraints);
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Padding(
            padding: const EdgeInsets.all(8),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text('设备信息', style: Theme.of(context).textTheme.titleLarge),
                Text('屏幕大小: ${InfoKit.size.toString()}'),
                Text('语言: ${InfoKit.locale.toLanguageTag()}'),
                Text('平台: ${InfoKit.platform.name}'),
                Text('操作系统: ${InfoKit.os.name}'),
                Text('应用信息', style: Theme.of(context).textTheme.titleLarge),
                Text('来源: ${InfoKit.origin}'),
                Text('风味: ${InfoKit.flavor.name}'),
                Text('模式: ${InfoKit.mode.name}'),
                Text('构建信息', style: Theme.of(context).textTheme.titleLarge),
                Text('构建号: ${InfoKit.buildNumber}'),
                Text('版本: ${InfoKit.version}'),
                Text('包名: ${InfoKit.packageName}'),
                Text('应用名: ${InfoKit.appName}'),
                Text('环境变量', style: Theme.of(context).textTheme.titleLarge),
                Text('环境颜色: ${dotenv.get('COLOR')}'),
                Text('环境水果: ${dotenv.get('FRUIT')}'),
                Text('环境饮料: ${dotenv.get('DRINK')}'),
              ],
            ),
          ),
        );
      },
    );
  }
}

更多关于Flutter信息获取插件info_kit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter信息获取插件info_kit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


info_kit 是一个用于 Flutter 的应用信息获取插件,它可以帮助开发者获取与设备、应用程序相关的各种信息,例如设备型号、操作系统版本、应用程序版本号等。通过使用 info_kit,开发者可以轻松地获取这些信息并在应用程序中使用。

以下是如何在 Flutter 项目中使用 info_kit 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 info_kit 依赖:

dependencies:
  flutter:
    sdk: flutter
  info_kit: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 以安装依赖。

2. 导入包

在需要使用 info_kit 的 Dart 文件中导入包:

import 'package:info_kit/info_kit.dart';

3. 使用 info_kit 获取信息

info_kit 提供了多种方法来获取设备和应用相关的信息。以下是一些常见的用法:

获取设备信息

String deviceModel = await InfoKit.deviceModel;
String deviceName = await InfoKit.deviceName;
String deviceId = await InfoKit.deviceId;
String deviceType = await InfoKit.deviceType;

获取操作系统信息

String osName = await InfoKit.osName;
String osVersion = await InfoKit.osVersion;

获取应用信息

String appName = await InfoKit.appName;
String appVersion = await InfoKit.appVersion;
String buildNumber = await InfoKit.buildNumber;
String packageName = await InfoKit.packageName;

4. 示例代码

以下是一个完整的示例,展示如何在 Flutter 应用中使用 info_kit 获取并显示设备和应用信息:

import 'package:flutter/material.dart';
import 'package:info_kit/info_kit.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'InfoKit Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: InfoKitDemo(),
    );
  }
}

class InfoKitDemo extends StatefulWidget {
  [@override](/user/override)
  _InfoKitDemoState createState() => _InfoKitDemoState();
}

class _InfoKitDemoState extends State<InfoKitDemo> {
  String deviceModel = 'Unknown';
  String deviceName = 'Unknown';
  String deviceId = 'Unknown';
  String deviceType = 'Unknown';
  String osName = 'Unknown';
  String osVersion = 'Unknown';
  String appName = 'Unknown';
  String appVersion = 'Unknown';
  String buildNumber = 'Unknown';
  String packageName = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
    _loadDeviceInfo();
  }

  Future<void> _loadDeviceInfo() async {
    deviceModel = await InfoKit.deviceModel;
    deviceName = await InfoKit.deviceName;
    deviceId = await InfoKit.deviceId;
    deviceType = await InfoKit.deviceType;
    osName = await InfoKit.osName;
    osVersion = await InfoKit.osVersion;
    appName = await InfoKit.appName;
    appVersion = await InfoKit.appVersion;
    buildNumber = await InfoKit.buildNumber;
    packageName = await InfoKit.packageName;

    setState(() {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('InfoKit Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text('Device Model: $deviceModel'),
            Text('Device Name: $deviceName'),
            Text('Device ID: $deviceId'),
            Text('Device Type: $deviceType'),
            Text('OS Name: $osName'),
            Text('OS Version: $osVersion'),
            Text('App Name: $appName'),
            Text('App Version: $appVersion'),
            Text('Build Number: $buildNumber'),
            Text('Package Name: $packageName'),
          ],
        ),
      ),
    );
  }
}
回到顶部