LoginSignup
1
1

More than 1 year has passed since last update.

【Flutter】percent_indicator の使い方

Posted at

初めに

percent_indicator とは、以下の画像のように何らかの達成状況を示すための Widget です。
家計簿のアプリや習慣化のアプリに多く使用される印象です。

準備

まずは、percent_indicator パッケージ を「 pubspeck.yaml 」に記述します。
パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。

pubspeck.yaml
dependencies:
  flutter:
    sdk: flutter

  percent_indicator: ^4.2.2

Pub get をして準備は完了です。

実装

まずは実装したい画面で percent_indicator をインポートします。

main.dart
import 'package:percent_indicator/percent_indicator.dart';

percent_indicator には以下の二種類が用意されています。

  • CircularPercentIndicator
  • LinearPercentIndicator

CircularPercentIndicator

CircularPercentIndicator とは円型のインジケーターのことです。
一番初めに提示した画像と同じインジケーターです。

以下のように記述すると、画像のような CircularPercentIndicator が表示されます。

main.dart
CircularPercentIndicator(
  radius: 60.0,
  lineWidth: 5.0,
  percent: 0.5,
  center: const Text("50%"),
  progressColor: Colors.green,
),

radius

radius は CircularPercentIndicator の円の大きさ、正確には円の半径を指定するためのプロパティです。 int 型、 double 型、または MediaQuery を使った指定も可能です。

lineWidth

lineWidth は文字通り、インジケーターの線の太さを指定するためのプロパティです。

左の画像は lineWidth: 2.0, 右の画像は lineWidth: 5.0,
にしたものです。明らかに線の太さが変化していることがわかります。

percent

percent はインジケーターのパーセントを指定するためのプロパティです。
double 型で、 0 ~ 1 の値で指定します。 0 ~ 100 ではないことに注意しましょう。

center

center では CircularPercentIndicator の円の中心に配置する Widget を指定します。
テキストだけでなく、以下の画像のようにアイコンを指定することも可能です。

progressColor

progressColor は進捗部分の色を指定するためのプロパティです。上の画像では Colors.green に指定していますが、デフォルトでは Colors.red に設定されています。

backgroundColor

backgroundColor は進捗部分以外の部分、未達成の部分の色を指定するためのプロパティです。
以下の画像のように色を変更することができます。
指定しなければ灰色に近い色になります。

backgroundWidth

backgroundWidth はインジケーターの背景の線の太さを指定するためのプロパティです。
以下のように、進捗部分の線よりも太くすることも可能です。

header

header ではインジケーターの上部に表示させる Widget を指定します。
下の画像では header に「Homework」というテキストを指定し、 center にアイコンを指定することで、宿題の進捗状況を示すインジケーターを表示しています。

このように、 header にはインジケーターの内容を明らかにする役割があります。

footer

footer ではインジケーターの下部に表示させる Widget を指定します。
下の画像では先ほど作成したインジケーターの footer にパーセントの表示を追加することでより視覚的にわかりやすいインジケーターにしています。

animation

animation は以下のように、インジケーターが読み込まれた際のアニメーションをつけるためのプロパティです。
デフォルトでは false になっていますが、true にするとアニメーションが適用されます。
percent_indicator_animation.gif

animationDuration

animationDuration は animation が true の時、アニメーションが終わるまでの時間を指定するためのプロパティです。 int 型のミリ秒 (ms) で指定します。

LinearPercentIndicator

LinearPercentIndicator とは以下の画像のように、直線のインジケーターのことです。

main.dart
LinearPercentIndicator(
  width: 140.0,
  lineHeight: 14.0,
  percent: 0.5,
  backgroundColor: Colors.grey,
  progressColor: Colors.blue,
),

width

width は LinearPercentIndicator の幅を指定するためのプロパティです。

lineHeight

lineHeight は LinearPercentIndicator の高さを指定するためのプロパティです。

center

center は CircularPercentIndicator と同様に、インジケーターの内部に表示する Widget を指定するためのプロパティです。
以下の画像では center にテキストを指定しています。

leading

leading は LinearPercentIndicator の左側に配置する Widget を指定するためのプロパティです。
下の画像ではアイコンを指定しています。

trailing

trailing は LinearPercentIndicator の右側に配置する Widget を指定するためのプロパティです。
下の画像ではテキストを指定しています。

その他のプロパティは CircularPercentIndicator と比較して同じものも多いため、省略します。

indicator を動かす

最後に Riverpod を使って CircularPercentIndicator を動かしてみましょう。

main.dart
final percentProvider = StateProvider<double>((ref) => 0.0);

まずは CircularPercentIndicator の percent に代入する値を監視するための StateProvider を作成し、 percentProvider という変数に代入します。

main.dart
final percentNotifier = ref.watch(percentProvider.notifier);
final percent = ref.watch(percentProvider);

次に、 percent の状態を読み取り、 percentNotifier percent 変数に代入します。

main.dart
CircularPercentIndicator(
  radius: 60.0,
  lineWidth: 5.0,
  percent: percent,
  center: const Text("Homework"),
  progressColor: Colors.green,
),

CircularPercentIndicator の percent プロパティに先ほどの percent 変数の値を指定します。
こうすることで、 percent の値が変更された際にその変更が反映されるようになります。

main.dart
ElevatedButton(
  onPressed: () {
   percent > 0.9
   ? percentNotifier.state = 0
   : percentNotifier.state = percentNotifier.state + 0.1;
  },
  child: const Text("達成",style: TextStyle(color: Colors.white),),
  style: ElevatedButton.styleFrom(
   primary: Colors.green.shade400
  ),
),

次に percent を増加させるための ElevatedButton を設けます。
増加幅は 0.1 にしています。

main.dart
percent > 0.9
? percentNotifier.state = 0
: percentNotifier.state = percentNotifier.state + 0.1;

このコードでは、ElevatedButton が押された際、 percent の値が 0.9 より大きい場合は percent の値が 0 に戻り、それ以外は percentの値が 0.1 ずつ増加するようにしています。

したがって、 CircularPercentIndicator は以下のように 10% ずつ増加するような挙動になり、 100% になった状態でもう一度ボタンを押すと 0% に戻ります。
indicator.gif

あとがき

最後まで読んでいただきありがとうございました。

以上です。

参考にしていただければ幸いです。
誤っている箇所があればご指摘いただければ幸いです。

参考にしたサイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1