2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FlutterAdvent Calendar 2021

Day 19

【Flutter】FlutterJsonBeanFactoryがとても便利という話

Last updated at Posted at 2021-12-18

インドネシアのPT.AQ Business Consulting IndonesiaでFlutterのエンジニア兼アドバイザーをしております菊池と申します。

Zennで本を出版しておりますflutter chips(30,000字程度)
image.png

FlutterJsonBeanFactoryとは

image.png
FlutterJsonBeanFactoryとは、AndroidStudio用のプラグインで、Json形式のテキストを貼り付けるだけで、
Objectのクラスとパース用の関数を自動生成してくれるプラグインです。

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

AndroidStudioのMenuからPreferencesを選択
image.png

サイドメニューのプラグインを選択して「FlutterJsonBeanFactory」で検索し、インストール。
インストール後、AndroidStudioを再起動させてください。
image.png

使い方

ファイルを生成するディレクトリで右クリックして、New > JsonToBeanDartAction を選択
image.png

クラス名とjsonデータの入力ダイアログが開くので、クラス名とjsonデータを貼り付ける
クラス名: 生成時に語尾にEntityが付与されます。例: SampleResponse → SampleResponseEntity
image.png

すると以下の2ファイルが生成されます。

sample_response_entity.dart

import 'dart:convert';
import 'package:sample/generated/json/base/json_field.dart';
import 'package:sample/generated/json/sample_response_entity.g.dart';

@JsonSerializable()
class SampleResponseEntity {

	String? status;
	dynamic? result;
  
  SampleResponseEntity();

  factory SampleResponseEntity.fromJson(Map<String, dynamic> json) => $SampleResponseEntityFromJson(json);

  Map<String, dynamic> toJson() => $SampleResponseEntityToJson(this);

  @override
  String toString() {
    return jsonEncode(this);
  }
}

sample_response_entity.g.dart
import 'package:sample/generated/json/base/json_convert_content.dart';
import 'package:sample/models/entity/sample_response_entity.dart';

SampleResponseEntity $SampleResponseEntityFromJson(Map<String, dynamic> json) {
	SampleResponseEntity sampleResponseEntity = SampleResponseEntity();
	var status = jsonConvert.convert<String>(json['status']);
	if (status != null) {
		sampleResponseEntity.status = status;
	}
	var result = jsonConvert.convert<dynamic>(json['result']);
	if (result != null) {
		sampleResponseEntity.result = result;
	}
	return sampleResponseEntity;
}

Map<String, dynamic> $SampleResponseEntityToJson(SampleResponseEntity entity) {
	final Map<String, dynamic> data = <String, dynamic>{};
	data['status'] = entity.status;
	data['result'] = entity.result;
	return data;
}

実際の利用方法

以下のようにして、APIのレスポンスのjsonデータをObjectにパースします。

main.dart
final responseEntity = SampleResponseEntity.fromJson(response.data);

参考文献

2
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?