Flutter JSON数据可视化插件json_tree_viewer的使用

发布于 1周前 作者 htzhanglong 来自 Flutter

Flutter JSON数据可视化插件json_tree_viewer的使用

功能特性

  • 美观展示JSON数据;
  • 自定义JSON元素颜色;
  • 支持复制键或值文本;

开始使用

pubspec.yaml文件中添加依赖:

dependencies:
    json_tree_viewer: ^0.0.2

屏幕截图

屏幕截图1 屏幕截图2

使用方法

以下是一个完整的示例代码,展示了如何在Flutter应用中使用json_tree_viewer插件来可视化JSON数据。这个示例包括了一个可以切换显示JSON对象和JSON数组的界面,并且可以通过按钮展开或折叠所有节点。

示例代码

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue, // 主题颜色
      ),
      home: const MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _expandedAll = false; // 控制是否展开所有节点
  final _toggleObject = [true, false]; // 控制切换JSON对象和数组

  // 定义一个JSON数组
  final _jsonArray = [
    {"message": "Hello world", "year": 2022},
    {"message": "你好世界", "year": 2022}
  ];

  // 定义一个JSON对象
  final _jsonObject = <String, dynamic>{
    "message": ["你好世界", "Hello world"],
    "date": {"year": 2022, "month": 1, "day": 29},
    "cities": [
      {
        "name": "Beijing",
        "country": "China",
        "whereami": false,
      },
      {
        "name": "Shanghai",
        "country": "China",
        "whereami": true,
      },
      {"name": "Tokyo", "country": "Japan"}
    ]
  };

  dynamic _data; // 当前显示的数据

  [@override](/user/override)
  void initState() {
    _data = _jsonObject; // 初始化时显示JSON对象
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Json Viewer'),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            children: [
              // 展开所有节点按钮
              IconButton(
                onPressed: () {
                  setState(() {
                    _expandedAll = true;
                  });
                },
                icon: Icon(Icons.unfold_more),
              ),
              // 折叠所有节点按钮
              IconButton(
                onPressed: () {
                  setState(() {
                    _expandedAll = false;
                  });
                },
                icon: Icon(Icons.unfold_less),
              ),
              const SizedBox(width: 16),
              // 切换JSON对象和数组的按钮
              ToggleButtons(
                children: [Text('Object'), Text('Array')],
                isSelected: _toggleObject,
                onPressed: (index) {
                  setState(() {
                    _toggleObject.fillRange(0, _toggleObject.length, false);
                    _toggleObject[index] = true;
                    switch (index) {
                      case 0:
                        _data = _jsonObject;
                        break;
                      case 1:
                        _data = _jsonArray;
                        break;
                    }
                  });
                },
              )
            ],
          ),
          Expanded(
            child: Padding(
              padding: const EdgeInsets.all(16),
              child: JsonTreeViewer(
                data: _data, // 显示的数据
                expandedAll: _expandedAll, // 是否展开所有节点
              ),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter JSON数据可视化插件json_tree_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON数据可视化插件json_tree_viewer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用json_tree_viewer插件来可视化JSON数据的示例代码。这个插件可以帮助你以树状结构展示JSON数据,便于调试和查看数据结构。

首先,确保你已经在pubspec.yaml文件中添加了json_tree_viewer依赖:

dependencies:
  flutter:
    sdk: flutter
  json_tree_viewer: ^3.0.0  # 请确保使用最新版本,版本号可能需要根据实际情况调整

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中创建一个页面来使用json_tree_viewer。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:json_tree_viewer/json_tree_builder.dart';
import 'package:json_tree_viewer/json_tree_core.dart';
import 'package:json_tree_viewer/json_tree_theme.dart';
import 'package:json_tree_viewer/json_tree_viewer.dart';

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

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

class JsonViewerScreen extends StatelessWidget {
  final String jsonData = '''
  {
    "name": "John Doe",
    "age": 30,
    "email": "john.doe@example.com",
    "address": {
      "street": "123 Main St",
      "city": "Anytown",
      "state": "CA",
      "zip": "12345"
    },
    "phoneNumbers": [
      {"type": "home", "number": "555-555-5555"},
      {"type": "work", "number": "555-555-6666"}
    ]
  }
  ''';

  @override
  Widget build(BuildContext context) {
    final JsonTreeBuilder builder = JsonTreeBuilder();
    final JsonTreeNode rootNode = builder.build(jsonDecode(jsonData));

    return Scaffold(
      appBar: AppBar(
        title: Text('JSON Tree Viewer'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: JsonTreeViewer(
          rootNode,
          theme: JsonTreeThemeData(
            nodeTextStyle: TextStyle(fontSize: 14),
            keyTextStyle: TextStyle(fontSize: 12, color: Colors.grey),
            stringColor: Colors.blue,
            numberColor: Colors.green,
            boolColor: Colors.red,
            nullColor: Colors.grey,
            keyColor: Colors.black,
            levelPadding: 16.0,
          ),
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖导入

    • 导入json_tree_viewer包中的相关类。
  2. MyApp

    • 创建一个基本的Flutter应用,设置主题,并将JsonViewerScreen作为主页。
  3. JsonViewerScreen

    • 定义一个包含示例JSON数据的字符串jsonData
    • 使用JsonTreeBuilder将JSON字符串解析为JsonTreeNode
    • Scaffold中,使用JsonTreeViewer小部件显示解析后的JSON树。
    • 通过JsonTreeThemeData自定义JSON树的主题,例如文本样式和颜色。

这个示例展示了如何使用json_tree_viewer插件在Flutter应用中可视化JSON数据。你可以根据需要调整JSON数据和主题样式。

回到顶部