PR

[Flutter]未使用のプラグインを教えてくれるプラグイン

Flutter

はじめに

Flutterで簡単に導入できるプラグインですが、気がついたら大量にいれていてどれが不要なのかわからないことがあります。

とりあえずpubspec.yamlの記述を削除してトライ・アンド・エラーでやるのも良いですがめんどくさいです。

そんな時に、簡単に未使用のプラグインを教えてくれるプラグインを今回は紹介します。

環境

  • Flutter 2.2.3
  • dependency_validator: ^3.1.0

実装方法

プラグインの最新バージョンを確認

下記のサイトにアクセスし、バージョンを確認します。

dependency_validator | Dart Package
Checks for missing, under-promoted, over-promoted, and unused dependencies.

記事作成の時点では3.1.0が最新バージョンでした。

プラグインのインストール

pubspec.yamldev_dependenciesに「dependency_validator: ^3.1.0」を追記します。

または常に最新版を使う設定の「dependency_validator: any」を追記します。

  cupertino_icons: ^1.0.2

dev_dependencies:
  flutter_test:
    sdk: flutter
  dependency_validator: any

# For information on the generic Dart part of this file, see the

その後、プロジェクト配下で「flutter pub get」コマンドを実行

よくわからない場合はAndroid Studiopubspec.yamlファイルを開くと右上に「Pub get」ボタンがあるのでそれを押して下さい。

使い方

使い方は簡単で上記の準備が終わったらプロジェクト配下以下のコマンドを叩くだけです

% flutter pub run dependency_validator

サンプルコード

では実験のために、今回は下記のようなコードの場合に、どのような結果になるか試してしてみたい思います。条件は下記のような感じです。

  • device_infoはコードを利用
  • app_reviewはインポートのみ記述
  • webview_flutterは未利用

main.dart

import 'dart:io';

import 'package:app_review/app_review.dart';
import 'package:device_info/device_info.dart';
import 'package:flutter/material.dart';

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

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

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> {
  int _counter = 0;

  void _incrementCounter() async {
    final deviceInfo = DeviceInfoPlugin();

    if (Platform.isAndroid) {
      AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
      print('Running on ${androidInfo.model}');
    } else if (Platform.isIOS) {
      IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
      print('Running on ${iosInfo.utsname.machine}');
    }
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter


  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.2
  app_review: any
  device_info: any
  webview_flutter: any

dev_dependencies:
  flutter_test:
    sdk: flutter
  dependency_validator: any

結果

結果は、未使用のcupertino_iconswebview_flutterが検出できました。

どうやらimportの記述だけの場合も利用していると判定されるようです。

% flutter pub run dependency_validator
Validating dependencies for flutter_app...
These packages may be unused, or you may be using assets from these packages:
  * cupertino_icons
  * webview_flutter

pub finished with exit code 1

またこの場合にcupertino_iconswebview_flutterを削除して同じコマンドを入力すると問題ないよと教えてくれます。

% flutter pub run dependency_validator
Validating dependencies for flutter_app...
✓ No dependency issues found!

さいごに

気がついたら使ってないプラグイン大量に入っててビビりますよね?

おすすめ参考書

コメント

タイトルとURLをコピーしました