flutter_user_agent 1.2.1

  • Readme
  • Changelog
  • Example
  • Installing
  • 95

flutter_user_agent #

Retrieve Android/iOS device user agents in Flutter.

Example user-agents: #

SystemUser-AgentWebView User-Agent
iOSCFNetwork/897.15 Darwin/17.5.0 (iPhone/6s iOS/11.3)Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E217
AndroidDalvik/2.1.0 (Linux; U; Android 5.1.1; Android SDK built for x86 Build/LMY48X)Mozilla/5.0 (Linux; Android 5.1.1; Android SDK built for x86 Build/LMY48X) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36

Additionally: #

Every version returns some additional constants that might be useful for custom user-agent building.

iOS version returns:

  • isEmulator
  • systemName
  • systemVersion
  • applicationName
  • applicationVersion
  • buildNumber
  • darwinVersion
  • cfnetworkVersion
  • deviceName
  • packageUserAgent

Android version returns:

  • systemName
  • systemVersion
  • packageName
  • shortPackageName
  • applicationName
  • applicationVersion
  • applicationBuildNumber
  • packageUserAgent

Credits 👍 #

Based off https://github.com/bebnev/react-native-user-agent

flutter_user_agent version history #

1.2.1 #

  • iOS user-agent database update. Specifically the iPhone XS, XR and 11 variants (thanks @pravinarr!)

1.2.0 #

  • iOS deprecation API change.

    ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs . See https://developer.apple.com/documentation/uikit/uiwebview for more information.

    • Remove references to UIWebView as it's deprecated and currently stops app submissions to the App Store - #3 (thanks @rodruiz!)

    • The plugin will only work on iOS 8 and up.

1.1.0 #

  • iOS API change for compatibility purposes.

    Change UIWebView (deprecated since iOS 12.0) to WKWebView - #1 (courtesy of @Triipaxx!)

1.0.1 #

  • API changes:
    • Make FlutterUserAgent.init cache user-agent properties by default, unless force: true is specified.
    • Add FlutterUserAgent.getPropertyAsync function for lazily fetching properties without having to call FlutterUserAgent.init.
    • Add FlutterUserAgent.release function for releasing all the user-agent properties temporarily statically stored in memory.

1.0.0 #

  • Add flutter example to the project.

0.0.1 #

  • Initial release.

example/lib/main.dart

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

import 'package:flutter/services.dart';
import 'package:flutter_user_agent/flutter_user_agent.dart';

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

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

class _MyAppState extends State<MyApp> {
  String _userAgent = '<unknown>';
  String _webUserAgent = '<unknown>';

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

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initUserAgentState() async {
    String userAgent, webViewUserAgent;
    // Platform messages may fail, so we use a try/catch PlatformException.
    try {
      userAgent = await FlutterUserAgent.getPropertyAsync('userAgent');
      await FlutterUserAgent.init();
      webViewUserAgent = FlutterUserAgent.webViewUserAgent;
      print('''
applicationVersion => ${FlutterUserAgent.getProperty('applicationVersion')}
systemName         => ${FlutterUserAgent.getProperty('systemName')}
userAgent          => $userAgent
webViewUserAgent   => $webViewUserAgent
packageUserAgent   => ${FlutterUserAgent.getProperty('packageUserAgent')}
      ''');
    } on PlatformException {
      userAgent = webViewUserAgent = '<error>';
    }

    // 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(() {
      _userAgent = userAgent;
      _webUserAgent = webViewUserAgent;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('User agent example app'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Device userAgent: $_userAgent'),
              Text('Web userAgent: $_webUserAgent')
            ],
          ),
        ),
      ),
    );
  }
}

Use this package as a library

1. Depend on it

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


dependencies:
  flutter_user_agent: ^1.2.1

2. Install it

You can install packages from the command line:

with Flutter:


$ flutter pub get

Alternatively, your editor might support flutter pub get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:flutter_user_agent/flutter_user_agent.dart';
  
Popularity:
Describes how popular the package is relative to other packages. [more]
89
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
95
Learn more about scoring.

We analyzed this package on Mar 30, 2020, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.7.1
  • pana: 0.13.6
  • Flutter: 1.12.13+hotfix.8

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.68.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11 1.14.12
meta 1.1.8
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8