Как получить идентификатор пакета во флаттере

Я использовал приведенный ниже метод, чтобы получить имя приложения и имя пакета, но мне нужен идентификатор пакета для пользователей iPhone. Я хочу поделиться ссылкой на приложение. Я сделал это в Android, но на iPhone мне нужен идентификатор пакета.

 Future<Null> _initPackageInfo() async {
        final PackageInfo info = await PackageInfo.fromPlatform();
        setState(() {
          _packageInfo = info;
          packageName = info.packageName;
          appName = info.appName;
          buildNumber = info.buildNumber;
        });
      }

person Vithani Chandresh    schedule 29.06.2018    source источник
comment
info.packageName должно работать на iOS. Не так ли?   -  person Bostrot    schedule 29.06.2018


Ответы (4)


Чтобы найти имя проекта вручную, вы можете посмотреть в AndroidManifest.xml или в Info.plist.

Андроид

В Android имя пакета находится в AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    package="com.example.appname">

iOS

В iOS имя пакета — это идентификатор пакета в Info.plist:

<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>

который находится в Runner.xcodeproj/project.pbxproj:

PRODUCT_BUNDLE_IDENTIFIER = com.example.appname;

Смотрите также

person Suragch    schedule 12.03.2019

В части iOS проекта Flutter Идентификатор пакета продукта находится в project.pbxproj файле по пути:

[your-flutter-project-dir]\ios\Runner.xcodeproj\project.pbxproj

и это указано следующим образом:

PRODUCT_BUNDLE_IDENTIFIER = com.app.flutter.example;

Обратите внимание, что это значение такое же, как Android Package Name в проектах Flutter.

person Mohsen Emami    schedule 22.04.2020

Вы можете использовать пакет get_version для получения идентификатора приложения, имени и кода версии на iOS и Android.

Добавьте эту зависимость в свое приложение и получите такой идентификатор приложения.

String projectAppID;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
  projectAppID = await GetVersion.appID;
} on PlatformException {
  projectAppID = 'Failed to get app ID.';
}

Полный пример

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get_version/get_version.dart';

void main() => runApp(new MyApp());

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

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';
  String _projectVersion = '';
  String _projectCode = '';
  String _projectAppID = '';
  String _projectName = '';

  @override
  initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  initPlatformState() async {
    String platformVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      platformVersion = await GetVersion.platformVersion;
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    String projectVersion;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      projectVersion = await GetVersion.projectVersion;
    } on PlatformException {
      projectVersion = 'Failed to get project version.';
    }

    String projectCode;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      projectCode = await GetVersion.projectCode;
    } on PlatformException {
      projectCode = 'Failed to get build number.';
    }

    String projectAppID;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      projectAppID = await GetVersion.appID;
    } on PlatformException {
      projectAppID = 'Failed to get app ID.';
    }
    
    String projectName;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      projectName = await GetVersion.appName;
    } on PlatformException {
      projectName = 'Failed to get app name.';
    }

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
      _projectVersion = projectVersion;
      _projectCode = projectCode;
      _projectAppID = projectAppID;
      _projectName = projectName;
    });
  }

  

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Plugin example app'),
        ),
        body: new SingleChildScrollView(
          child: new ListBody(
            children: <Widget>[
              new Container(
                height: 10.0,
              ),
              new ListTile(
                leading: new Icon(Icons.info),
                title: const Text('Name'),
                subtitle: new Text(_projectName),
              ),
              new Container(
                height: 10.0,
              ),
              new ListTile(
                leading: new Icon(Icons.info),
                title: const Text('Running on'),
                subtitle: new Text(_platformVersion),
              ),
              new Divider(
                height: 20.0,
              ),
               new ListTile(
                leading: new Icon(Icons.info),
                title: const Text('Version Name'),
                subtitle: new Text(_projectVersion),
              ),
              new Divider(
                height: 20.0,
              ),
              new ListTile(
                leading: new Icon(Icons.info),
                title: const Text('Version Code'),
                subtitle: new Text(_projectCode),
              ),
              new Divider(
                height: 20.0,
              ),
              new ListTile(
                leading: new Icon(Icons.info),
                title: const Text('App ID'),
                subtitle: new Text(_projectAppID),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

введите здесь описание изображения

person Paresh Mangukiya    schedule 04.01.2021

Используйте пакет get_version . это самый простой способ

Установка:

 dependencies:
   get_version: any

Использование:

String projectAppID;
// Platform messages may fail, so we use a try/catch PlatformException.
try {
  projectAppID = await GetVersion.appID;
} on PlatformException {
  projectAppID = 'Failed to get app ID.';
}

Вы можете использовать его как строку внутри всего, что хотите, например текстового виджета и т. д.


Еще один фрагмент get_version в небольшом приложении:

import 'package:get_version/get_version.dart';    
  class _MyAppState extends State<MyApp> {
  String _projectAppID = '';
  @override
  initState() {
    super.initState();
    initPlatformState();
  }    
  // Platform messages are asynchronous, so we initialize in an async method.
  initPlatformState() async {
    String projectAppID;
    try {
      projectAppID = await GetVersion.appID;
    } catch (e) {
      projectAppID = 'Failed to get app ID.';
    }
    setState(() {
      _projectAppID = projectAppID;
    });
  }
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: ListTile(
          leading: new Icon(Icons.info),
          title: const Text('App ID'),
          subtitle: new Text(_projectAppID),
        ),
      ),
    );
  }
}

Вывод:

введите здесь описание изображения

person Kabirou Agouda    schedule 07.02.2021