How to get build and version number of Flutter app

后端 未结 4 1461
旧巷少年郎
旧巷少年郎 2020-12-14 05:03

I am currently developing an application which is currently in beta mode. Due to this, I would like to show them what version they are on. For example, \"v1.0b10 - iOS\". So

相关标签:
4条回答
  • 2020-12-14 05:50

    You can use package_info.

    The versions are extracted from:

    Android:

    build.gradle, versionCode and versionName
    

    iOS:

    Info.plist, CFBundleVersion
    

    Usage

    Add the dependency

    1. Add this to your package's pubspec.yaml file:
    dependencies:
      package_info: ^0.4.0+16
    
    1. Import the file into your dart file:
    import 'package:package_info/package_info.dart';
    
    1. if your method is marked as async:
    PackageInfo packageInfo = await PackageInfo.fromPlatform();
    
    String appName = packageInfo.appName;
    String packageName = packageInfo.packageName;
    String version = packageInfo.version;
    String buildNumber = packageInfo.buildNumber;
    

    If you don't want to use await/async:

    PackageInfo.fromPlatform().then((PackageInfo packageInfo) {
      String appName = packageInfo.appName;
      String packageName = packageInfo.packageName;
      String version = packageInfo.version;
      String buildNumber = packageInfo.buildNumber;
    });
    
    0 讨论(0)
  • 2020-12-14 05:50

    You can use the get_version to query information about the application Version Name, Version Code, Platform and OS Version, and App ID on iOS and Android

    Add this to your package's pubspec.yaml file:

    dependencies:
      get_version: ^0.2.2
    

    Now in your Dart code, you can use:

    import 'package:get_version/get_version.dart';
    

    Go to build.gradle and update:

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

    How to Use

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

    0 讨论(0)
  • 2020-12-14 05:55

    There is a plugin that will help you get the version name and number.

    Add the dependency

    In pubspec.yaml add the package_info package.

    dependencies:
      package_info: ^0.4.0+13
    

    Update the version number to the current one.

    Import the package

    In the file that you need it, add the following import.

    import 'package:package_info/package_info.dart';
    

    Get the version name and code

    In your code you can get the app version name and code like this:

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

    See also

    • How to set build and version number of Flutter app
    • How to get build and version number of Flutter Web app
    0 讨论(0)
  • 2020-12-14 06:00

    You can try new_version plugin.

    New Version Plugin

    void versionCheckToLogin() 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: true);
            }
          });
        }
      }
    

    Custom Alert Dialog Box

    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);
                }
            ),
          ],
        )
    );
    
    0 讨论(0)
提交回复
热议问题