Flutter设备市场名称获取插件device_market_name的使用

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

Flutter设备市场名称获取插件device_market_name的使用

device_market_name 是一个小型插件,用于根据设备型号代码(例如 SM-G970F 对应 Galaxy s10e,iPhone13,2 对应 iPhone 12)获取设备市场名称。该插件适用于带有 GMS 的 Android 设备和 iOS 设备。

你可以通过运行以下命令来更新数据库:

python3 db_update.py

完整示例 Demo

以下是使用 device_market_name 插件的完整示例代码:

import 'dart:io';

import 'package:device_info_plus/device_info_plus.dart';
import 'package:device_market_name/device_market_name.dart';
import 'package:flutter/material.dart';

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

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

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

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String? marketName;
  String? modelCode;

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

  asyncInit() async {
    /// E.g. 获取其他平台和设备的市场名称
    print(await DeviceMarketName().getMarketName('iPhone14,2', platform: TargetPlatform.iOS));
    print(await DeviceMarketName().getMarketName('SM-F900U1', platform: TargetPlatform.android));

    ///
    /// E.g. 获取当前设备的市场名称
    /// 要获取设备型号代码,请使用例如:
    /// [device_info_plus] - https://pub.dev/packages/device_info_plus
    ///
    try {
      if (Platform.isAndroid) {
        final deviceInfo = await DeviceInfoPlugin().androidInfo;
        modelCode = deviceInfo.model;
      } else if (Platform.isIOS) {
        final deviceInfo = await DeviceInfoPlugin().iosInfo;
        modelCode = deviceInfo.utsname.machine;
      }
    } catch (_) {
      modelCode = 'unknown';
    }
    if (mounted) setState(() {});

    try {
      marketName = await DeviceMarketName().getMarketName(modelCode!);
      ///
      /// [withoutNetwork] 只在 iOS 设备上有效
      /// marketName = await DeviceMarketName()
      ///     .getMarketName(modelCode!, withoutNetwork: true);
      ///
    } catch (_) {
      marketName = 'unknown';
    }
    if (mounted) setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'ModelCode: $modelCode',
            ),
            Text(
              'MarketName: $marketName',
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 导入必要的库

    import 'dart:io';
    import 'package:device_info_plus/device_info_plus.dart';
    import 'package:device_market_name/device_market_name.dart';
    import 'package:flutter/material.dart';
    
  2. 主应用入口

    void main() {
      runApp(MyApp());
    }
    
  3. 定义 MyApp

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          title: 'DeviceMarketName',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: MyHomePage(title: 'DeviceMarketName'),
        );
      }
    }
    
  4. 定义 MyHomePage

    class MyHomePage extends StatefulWidget {
      MyHomePage({Key? key, required this.title}) : super(key: key);
      final String title;
    
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
  5. 定义 _MyHomePageState

    class _MyHomePageState extends State<MyHomePage> {
      String? marketName;
      String? modelCode;
    
      @override
      void initState() {
        asyncInit();
        super.initState();
      }
    
      asyncInit() async {
        // 获取其他平台和设备的市场名称
        print(await DeviceMarketName().getMarketName('iPhone14,2', platform: TargetPlatform.iOS));
        print(await DeviceMarketName().getMarketName('SM-F900U1', platform: TargetPlatform.android));
    
        // 获取当前设备的市场名称
        try {
          if (Platform.isAndroid) {
            final deviceInfo = await DeviceInfoPlugin().androidInfo;
            modelCode = deviceInfo.model;
          } else if (Platform.isIOS) {
            final deviceInfo = await DeviceInfoPlugin().iosInfo;
            modelCode = deviceInfo.utsname.machine;
          }
        } catch (_) {
          modelCode = 'unknown';
        }
        if (mounted) setState(() {});
    
        try {
          marketName = await DeviceMarketName().getMarketName(modelCode!);
        } catch (_) {
          marketName = 'unknown';
        }
        if (mounted) setState(() {});
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text(widget.title),
          ),
          body: Center(
            child: Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                Text(
                  'ModelCode: $modelCode',
                ),
                Text(
                  'MarketName: $marketName',
                ),
              ],
            ),
          ),
        );
      }
    }
    

更多关于Flutter设备市场名称获取插件device_market_name的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter设备市场名称获取插件device_market_name的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用device_market_name插件来获取设备市场名称的示例代码。这个插件可以帮助你获取设备的市场名称(例如,设备是在中国市场上销售的还是在国际市场上销售的)。

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

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

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

接下来,在你的Flutter项目的主文件(通常是main.dart)中,你可以这样使用这个插件:

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

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

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

class _MyAppState extends State<MyApp> {
  String? deviceMarketName;

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

  Future<void> _getDeviceMarketName() async {
    try {
      String? name = await DeviceMarketName.getMarketName();
      setState(() {
        deviceMarketName = name;
      });
    } catch (e) {
      print("Error getting device market name: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Device Market Name Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                'Device Market Name:',
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 10),
              Text(
                deviceMarketName ?? 'Loading...',
                style: TextStyle(fontSize: 20, color: Colors.blue),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

  1. pubspec.yaml文件中添加了device_market_name依赖。
  2. main.dart文件中导入了device_market_name插件。
  3. 创建了一个Flutter应用,其中包含一个用于显示设备市场名称的文本。
  4. initState方法中调用_getDeviceMarketName方法,该方法异步获取设备市场名称并更新状态。
  5. 使用setState方法更新UI,以显示获取到的设备市场名称。

请确保你已经正确配置了Flutter开发环境,并且已经连接了一个支持的设备或模拟器来运行这个示例。如果插件版本有更新,请记得在pubspec.yaml文件中替换为最新版本号。

回到顶部