So erhalten Sie Build und Versionsnummer der Flutter App

76

Ich entwickle derzeit eine Anwendung, die sich derzeit im Beta-Modus befindet. Aus diesem Grund möchte ich ihnen zeigen, auf welcher Version sie sich befinden. Zum Beispiel "v1.0b10 - iOS". Bisher habe ich diesen Code : Text("Build: V1.0b10 - " + (Platform.isIOS ? "iOS" : "Android")). Wie könnte ich die Build-Version und -Nummer innerhalb des Flatterns erhalten?

iProgramm
quelle

Antworten:

137

Sie können package_info verwenden .

Die Versionen werden extrahiert aus:

Android:

build.gradle, versionCode and versionName

iOS:

Info.plist, CFBundleVersion

Verwendung

Fügen Sie die Abhängigkeit hinzu

  1. Fügen Sie dies der Datei pubspec.yaml Ihres Pakets hinzu:
dependencies:
  package_info: ^0.4.0+16
  1. Importieren Sie die Datei in Ihre Dartdatei:
import 'package:package_info/package_info.dart';
  1. wenn Ihre Methode markiert ist als async:
PackageInfo packageInfo = await PackageInfo.fromPlatform();

String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;

Wenn Sie nicht verwenden möchten await/async:

PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
  String appName = packageInfo.appName;
  String packageName = packageInfo.packageName;
  String version = packageInfo.version;
  String buildNumber = packageInfo.buildNumber;
});
Diegoveloper
quelle
In IOS gibt dies Version 1.0.0 anstelle von 1.0.0 + 6. Können Sie mir zeigen, was das Problem sein könnte?
Wajid Khan
@ Wajidkhan, 1.0.0 ist die Versionsnummer und 6 ist die Build-Nummer. Sehen Sie das .
Suragch
Bedeutet dies, dass ich verschiedene Versionen für iOS und Android manuell ändern / warten muss? Gibt es einen einheitlichen Ort?
Alan Steiman
2
Nicht behandelte Ausnahme: MissingPluginException (Keine Implementierung für Methode getAll auf Kanal plugins.flutter.io/package_info gefunden) nur bei Release apk
Jithin Joy
Wenn Sie möchten, dass Ihre App im Web funktioniert, verwenden Android und IOS stattdessen "package_info_plus". pub.dev/packages/package_info_plus .
Alex Correia
66

Es gibt ein Plugin, mit dem Sie den Versionsnamen und die Versionsnummer ermitteln können.

Fügen Sie die Abhängigkeit hinzu

Fügen Sie in pubspec.yaml das package_infoPaket hinzu.

dependencies:
  package_info: ^0.4.0+13

Aktualisieren Sie die Versionsnummer auf die aktuelle .

Importieren Sie das Paket

Fügen Sie in der Datei, die Sie benötigen, den folgenden Import hinzu.

import 'package:package_info/package_info.dart';

Holen Sie sich den Versionsnamen und den Code

In Ihrem Code können Sie den Namen und den Code der App-Version wie folgt abrufen:

PackageInfo packageInfo = await PackageInfo.fromPlatform();
String versionName = packageInfo.version;
String versionCode = packageInfo.buildNumber;

Siehe auch

Suragch
quelle
Ich sehe nicht, wie sich das von der akzeptierten Antwort unterscheidet.
4
@Volleyball, als ich die Frage beantwortete, war die akzeptierte Antwort viel kürzer (siehe Bearbeitungsverlauf). Später fügte dieser Benutzer viele Inhalte hinzu, sodass sie jetzt im Grunde gleich sind.
Suragch
1
Entschuldigung, das habe ich nicht gesehen. Sie haben Recht. Ihre Antwort sollte die akzeptierte sein, +1 von mir.
0

Mit get_version können Sie Informationen zum Versionsnamen der Anwendung, zum Versionscode, zur Plattform- und Betriebssystemversion sowie zur App-ID unter iOS und Android abfragen

Fügen Sie dies Ihrem Paket hinzu pubspec.yaml Datei :

dependencies:
  get_version: ^0.2.2

Jetzt können Sie in Ihrem Dart-Code Folgendes verwenden:

import 'package:get_version/get_version.dart';

Gehe zu build.gradle und aktualisiere:

defaultConfig {
  versionCode 1
  versionName "1.0"
  minSdkVersion 16
  testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Wie benutzt man

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;
    });
  }
  
}

Geben Sie hier die Bildbeschreibung ein

Paresh Mangukiya
quelle
0

Sie können das new_versionPlugin ausprobieren . Mit diesem Plugin können Sie die App-Version, die Playstore-App-Version und die App-URL installieren, die zum Playstore umgeleitet werden können.

Neues Versions-Plugin

void versionCheck() async {
    final NewVersion newVersion = NewVersion(context: context);
    VersionStatus versionStatus = await newVersion.getVersionStatus();
    if (versionStatus != null && versionStatus.canUpdate) {
      await ConfirmDialog(
          context: context,
          title: 'Update Available',
          body: Text('A new version, ${versionStatus.storeVersion}, is available.'),
          acceptButton: 'Update Now',
          cancelButton: 'Update Later'
      ).then((ConfirmAction res) async {
        if (res == ConfirmAction.CONFIRM && await canLaunch(versionStatus.appStoreLink)) {
          await launch(versionStatus.appStoreLink, forceWebView: false);
        }
      });
    }
  }

Dialogfeld "Benutzerdefinierte Warnung"

enum ConfirmAction{ CONFIRM, CANCEL }
Future<ConfirmAction> ConfirmDialog({
  BuildContext context,
  String title,
  Widget body,
  String acceptButton,
  String cancelButton
})
=> showDialog(
    context: context,
    barrierDismissible: false,
    builder: (BuildContext context) => AlertDialog(
      title: Wrap(
        crossAxisAlignment: WrapCrossAlignment.center,
        spacing: 4,
        children: <Widget>[
          Text(title)
        ],
      ),
      content: Wrap(
        runSpacing: 10,
        children: <Widget>[
          body,
        ],
      ),
      actions: <Widget>[
        FlatButton(
            padding: EdgeInsets.all(6),
            child: Text(acceptButton ?? 'Confirm'),
            onPressed: (){
              Navigator.of(context, rootNavigator: true).pop(ConfirmAction.CONFIRM);
            }
        ),
        FlatButton(
            padding: EdgeInsets.all(6),
            child: Text(cancelButton ?? 'Cancel'),
            onPressed: (){
              Navigator.of(context, rootNavigator: true).pop(ConfirmAction.CANCEL);
            }
        ),
      ],
    )
);
Tarun Sharma
quelle