• Stars
    star
    205
  • Rank 191,264 (Top 4 %)
  • Language
    Dart
  • License
    MIT License
  • Created over 5 years ago
  • Updated 8 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Flutter package: Json Table Widget to create table from json array

Json Table Widget GitHub stars Twitter Follow GitHub last commit Website shields.ioOpen Source Love

Join us on Discord: https://discord.gg/7byeCn7MGF

πŸ’™ Proudly Sponsored by FieldAssist


Request a Demo

This Flutter package provides a Json Table Widget for directly showing table from a json(Map). Supports Column toggle also.

Live Demo: https://apgapg.github.io/json_table/

Live Data Testing: https://apgapg.github.io/json_table/#/customData

Features

  • The table constructed isn't the flutter's native DataTable.
  • The table is manually coded hence serves a great learning purpose on how to create simple tables manually in flutter
  • Supports vertical & horizontal scroll
  • Supports custom columns includes default value, column name, value builder
  • Supports nested data showing
  • Supports pagination
  • Supports row select color, callback

JsonTable JsonTable JsonTable JsonTable JsonTable JsonTable

πŸ’» Installation

In the dependencies: section of your pubspec.yaml, add the following line:

Version

dependencies:
  json_table: <latest version>

❔ Usage

Import this class

import 'package:json_table/json_table.dart';

- Vanilla Implementation

//Decode your json string
final String jsonSample='[{"id":1},{"id":2}]';
var json = jsonDecode(jsonSample);

//Simply pass this json to JsonTable
child: JsonTable(json)

- Implementation with HEADER and CELL widget builders

JsonTable(
   json,
   tableHeaderBuilder: (String header) {
     return Container(
       padding: EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
       decoration: BoxDecoration(border: Border.all(width: 0.5),color: Colors.grey[300]),
       child: Text(
         header,
         textAlign: TextAlign.center,
         style: Theme.of(context).textTheme.display1.copyWith(fontWeight: FontWeight.w700, fontSize: 14.0,color: Colors.black87),
       ),
     );
   },
   tableCellBuilder: (value) {
     return Container(
       padding: EdgeInsets.symmetric(horizontal: 4.0, vertical: 2.0),
       decoration: BoxDecoration(border: Border.all(width: 0.5, color: Colors.grey.withOpacity(0.5))),
       child: Text(
         value,
         textAlign: TextAlign.center,
         style: Theme.of(context).textTheme.display1.copyWith(fontSize: 14.0, color: Colors.grey[900]),
       ),
     );
   },
 )

Head over to example code: simple_table.dart

- Implementation with custom COLUMNS list

  • Pass custom column list to control what columns are displayed in table
  • The list item must be constructed using JsonTableColumn class
  • JsonTableColumn provides 4 parameters, namely,
JsonTableColumn("age", label: "Eligible to Vote", valueBuilder: eligibleToVote, defaultValue:"NA")
  • First parameter is the field/key to pick from the data
  • label: The column header label to be displayed
  • defaultValue: To be used when data or key is null
  • valueBuilder: To get the formatted value like date etc

JsonTable

//Decode your json string
final String jsonSample='[{"name":"Ram","email":"[email protected]","age":23,"DOB":"1990-12-01"},'
                              '{"name":"Shyam","email":"[email protected]","age":18,"DOB":"1995-07-01"},'
                              '{"name":"John","email":"[email protected]","age":10,"DOB":"2000-02-24"},'
                              '{"name":"Ram","age":12,"DOB":"2000-02-01"}]';
var json = jsonDecode(jsonSample);
//Create your column list
var columns = [
      JsonTableColumn("name", label: "Name"),
      JsonTableColumn("age", label: "Age"),
      JsonTableColumn("DOB", label: "Date of Birth", valueBuilder: formatDOB),
      JsonTableColumn("age", label: "Eligible to Vote", valueBuilder: eligibleToVote),
      JsonTableColumn("email", label: "E-mail", defaultValue: "NA"),
    ];
//Simply pass this column list to JsonTable
child: JsonTable(json,columns: columns)

//Example of valueBuilder
String eligibleToVote(value) {
    if (value >= 18) {
      return "Yes";
    } else
      return "No";
}

Head over to example code: custom_column_table.dart

- Implementation with nested data list

Suppose your json object has nested data like email as shown below:

{"name":"Ram","email":{"1":"[email protected]"},"age":23,"DOB":"1990-12-01"}
  • Just use email.1 instead of email as key
JsonTableColumn("email.1", label: "Email", defaultValue:"NA")

JsonTable

//Decode your json string
final String jsonSample='[{"name":"Ram","email":{"1":"[email protected]"},"age":23,"DOB":"1990-12-01"},'
                               '{"name":"Shyam","email":{"1":"[email protected]"},"age":18,"DOB":"1995-07-01"},'
                               '{"name":"John","email":{"1":"[email protected]"},"age":10,"DOB":"2000-02-24"}]';
var json = jsonDecode(jsonSample);
//Create your column list
var columns = [
      JsonTableColumn("name", label: "Name"),
      JsonTableColumn("age", label: "Age"),
      JsonTableColumn("DOB", label: "Date of Birth", valueBuilder: formatDOB),
      JsonTableColumn("age", label: "Eligible to Vote", valueBuilder: eligibleToVote),
      JsonTableColumn("email.1", label: "E-mail", defaultValue: "NA"),
    ];
//Simply pass this column list to JsonTable
child: JsonTable(json,columns: columns)

Head over to example code: custom_column_nested_table.dart

Column toggle

Option for toggling column(s) also. User can customise which columns are to be shown

 showColumnToggle: true

JsonTable

Row Highlighting

Add row highlighting with custom color support

JsonTable

allowRowHighlight: true,
rowHighlightColor: Colors.yellow[500].withOpacity(0.7),

Row Select Callback

Get the index and data map of a particular selected row. Note index might return incorrect value in case of pagination

onRowSelect: (index, map) {
    print(index);
    print(map);
  },

Pagination

Just provide an int value to paginationRowCount parameter

JsonTable

paginationRowCount: 4,

TODO

  • Custom header list parameter. This will help to show only those keys as mentioned in header list
  • Add support for keys missing in json object
  • Add support for auto formatting of date
  • Extracting column headers logic must be change. Not to depend on first object
  • Nested data showing support
  • Row highlight support
  • Row select callback
  • Wrap filters in expansion tile
  • Pagination support
  • Add option to change header row to vertical row on left

⭐ My Flutter Packages

  • pie_chart GitHub stars Flutter Pie Chart with cool animation.
  • avatar_glow GitHub stars Flutter Avatar Glow Widget with glowing animation.
  • search_widget GitHub stars Flutter Search Widget for selecting an option from list.
  • animating_location_pin GitHub stars Flutter Animating Location Pin Widget providing Animating Location Pin Widget which can be used while fetching device location.

⭐ My Flutter Apps

πŸ‘ Contribution

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -m 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

More Repositories

1

avatar_glow

A Flutter Package providing Avatar Glow Widget
C++
260
star
2

search_widget

Flutter package: Search Widget for selecting an option from a data list.
Dart
196
star
3

pie_chart

Flutter Pie chart with animation
Dart
169
star
4

flutter_profile

Portfolio made using Flutter
Dart
120
star
5

flutter_physics_concepts

Physics Concepts by Ayush P Gupta
Dart
66
star
6

flutter_responsive_tabs

Flutter Responsive Tabs Demo
Dart
44
star
7

DotMyStyle_App

Official Flutter App of DotMyStyle
Dart
18
star
8

flutter_scrap

Website Scraping with Dart (Flutter)
CMake
17
star
9

vue_bootstrap_5_sample

Bootstrap 5 with VueJs
Vue
15
star
10

animating_location_pin

Animating Location Pin Flutter Package
Dart
15
star
11

flutter_portfolio

Flutter Portfolio of Ayush P Gupta
Dart
15
star
12

flutter_sample_key

Medium Article
Dart
10
star
13

rx_dart_samples

Collection of Rx Dart samples
Dart
10
star
14

flutter_teaching_notes

Questions, answers, notes app for IIT JEE preparation
Dart
9
star
15

flutter_streams

Dart
8
star
16

ShineEffect

Java
7
star
17

flutter_mvp_app

Dart
7
star
18

flutter_sankalan

Dart
7
star
19

flutter_add_bg

Flutter app to write text on images
Java
4
star
20

pixstory-android

Java
4
star
21

vuetify-admin-dashboard

Vue Admin Dashboard Template
Vue
4
star
22

flutter_drop_down

Dart
3
star
23

ReweyouForums

Java
3
star
24

my_hindi_shayari

A sample shayari website built using Svelte and Tailwindcss
Svelte
3
star
25

gravit-design

Gravit Designer illustrations by Ayush P Gupta
3
star
26

apgapg

Hi i am Ayush P Gupta @apgapg
3
star
27

ElasticScrollView

Java
3
star
28

firebase-samples

Different Firebase SDKs samples
JavaScript
2
star
29

flutter_listview_in_scrollview

Dart
2
star
30

flutter_red_screen_error

Dart
2
star
31

DotMyStyle_backend

JavaScript
2
star
32

vue-portfolio

Official portfolio of Ayush P Gupta
Vue
2
star
33

sunserg_web

Sunserg Official frontend web project
Vue
2
star
34

flutter_conference

Dart
2
star
35

git-introduction-001

PPT built using sli.dev
Vue
2
star
36

dotservices_App

Flutter App code of DOT Services
Dart
2
star
37

apgapg.github.io

Portfolio of Ayush P Gupta
HTML
2
star
38

vue3-tailwind-app

Sample demo of Vue3 and Tailwindcss
Vue
2
star
39

nestjs-typescript-sample

Test project for Nestjs
TypeScript
1
star
40

flutter_text_theme_demo

Demo of TextTheme in Flutter
CMake
1
star
41

flutter_flick

Dart
1
star
42

sankalan_web

Sankalan: Self Composed Hindi Poems, Stories
Vue
1
star
43

flutter_git

Dart
1
star
44

flutter_widget_rebuilding

Dart
1
star
45

QA

Java
1
star
46

nuxt-tailwind-app

Nuxt sample with tailwind and daisyui
Vue
1
star
47

flutter_json_parsing

Dart
1
star
48

iitjee

IIT JEE Notes by Ayush P Gupta
Vue
1
star
49

express-routing-controllers-demo

Express Routing Controller npm demo
TypeScript
1
star
50

youtube-vuejs-series

Official Youtube PPT stuffs by TheDotLabs
Vue
1
star
51

awesome-ayushpgupta

Collection of all the awesome repo(s) made with ❀️ by Ayush P Gupta
1
star
52

vuepress_iitjeenotes

Website to showcase IIT JEE notes by Ayush P Gupta
HTML
1
star
53

vuepress-diary

Official Diary of Ayush P Gupta
1
star
54

k8s_ingress_sample

Kubernetes ingress sample
1
star