Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
9b464d4
Updated dependencies.
bosskmk May 25, 2022
8c376c1
Merge branch 'develop' into release/pluto_grid_export
bosskmk May 25, 2022
a36b247
Merge branch 'develop' into release/pluto_grid_export
bosskmk May 25, 2022
6a089bb
Merge branch 'develop' into release/pluto_grid_export
bosskmk May 28, 2022
ee1d882
Merge branch 'develop' into release/pluto_grid_export
bosskmk Jun 7, 2022
815c353
Merge branch 'develop' into release/pluto_grid_export
bosskmk Jun 7, 2022
9d8177d
Updated pubspec.
bosskmk Jun 7, 2022
1c009c9
Merge branch 'develop' into release/pluto_grid_export
bosskmk Jul 12, 2022
9bb008c
PlutoGridExport 1.0.3
bosskmk Jul 12, 2022
722b8e8
Update 6.0.0
bosskmk Jan 26, 2023
2388f25
Merge branch 'develop' into release/pluto_grid_export
bosskmk Jan 26, 2023
0a3a660
Bump PlutoGrid.
bosskmk Jan 26, 2023
e51cb06
Removed ternary operator bug
lille-morille May 9, 2023
7b3b8da
Merge branch 'develop' into release/pluto_grid_export
bosskmk May 16, 2023
619534f
Merge branch 'master' of https://github.com/RedRozio/pluto_grid into …
bosskmk May 16, 2023
a949b05
Merge branch 'RedRozio-master' into develop
bosskmk May 16, 2023
8e9a58d
Merge branch 'develop' into release/pluto_grid_export
bosskmk May 16, 2023
16c8c4d
Bump PlutoGrid.
bosskmk May 16, 2023
71b441f
Merge remote-tracking branch 'origin/release/pluto_grid_export' into …
bosskmk May 16, 2023
3b6f423
[Export] Bump pdf version.
bosskmk May 16, 2023
5f9a11f
chore: fix a compile error after `flutter 3.19`
chan150 Feb 27, 2024
73898d4
fix warning
bosskmk Mar 1, 2024
5049e4d
Merge branch 'chan150-master' into develop
bosskmk Mar 1, 2024
acaf985
fix tests
bosskmk Mar 1, 2024
2b0d6c4
update 3.19
bosskmk Mar 1, 2024
3a2e741
Merge pull request #1021 from bosskmk/develop
bosskmk Mar 1, 2024
3ace69a
update 3.38
bosskmk Dec 11, 2025
f1bbf3d
update 3.38
bosskmk Dec 11, 2025
1719db3
update 3.38
bosskmk Dec 12, 2025
7d44294
update 3.38
bosskmk Dec 12, 2025
b15f2aa
Merge branch 'develop'
bosskmk Dec 12, 2025
95ecc44
update 3.38
bosskmk Dec 12, 2025
bb3d597
Merge branch 'develop'
bosskmk Dec 12, 2025
8f168d6
update 3.38
bosskmk Dec 12, 2025
d594812
Merge branch 'develop'
bosskmk Dec 12, 2025
ce2a861
update 3.38
bosskmk Dec 12, 2025
05d1067
Merge branch 'develop'
bosskmk Dec 12, 2025
b4c1c56
update 3.38
bosskmk Dec 12, 2025
fb44c41
Merge branch 'develop'
bosskmk Dec 12, 2025
bbaa99a
update 3.38
bosskmk Dec 12, 2025
96e6c99
Merge branch 'develop'
bosskmk Dec 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,24 @@ codecov:
coverage:
precision: 2
round: down
range: "70...100"
range: "0...100"
status:
project:
default:
enabled: false
patch:
default:
enabled: false

parsers:
gcov:
branch_detection:
conditional: yes
loop: yes
method: nod
method: no
macro: no

comment:
layout: "reach,diff,flags,files,footer"
behavior: default
require_changes: false
require_changes: false
11 changes: 5 additions & 6 deletions .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,19 @@ on:
jobs:
build:
runs-on: ubuntu-latest
env:
CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
steps:
# Without this, there are no files in the directory.
- uses: actions/checkout@v3
- uses: actions/checkout@v4
# using flutter
- uses: subosito/flutter-action@v2.4.0
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- run: dart --version
- run: flutter --version
- run: flutter pub get
- run: flutter test --coverage
# codecov.io
- uses: codecov/codecov-action@v3
- uses: codecov/codecov-action@v5
with:
file: ./coverage/lcov.info
files: ./coverage/lcov.info
token: ${{ secrets.CODECOV_TOKEN }}
144 changes: 92 additions & 52 deletions CHANGELOG.md

Large diffs are not rendered by default.

27 changes: 25 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,40 +1,46 @@
## PlutoGrid for flutter - v7.0.2
## PlutoGrid for flutter - v8.1.0

[![Awesome Flutter](https://img.shields.io/badge/Awesome-Flutter-blue.svg)](https://github.com/Solido/awesome-flutter)
[![codecov](https://codecov.io/gh/bosskmk/pluto_grid/branch/master/graph/badge.svg)](https://codecov.io/gh/bosskmk/pluto_grid)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

<br>

`PlutoGrid` is a `DataGrid` that can be operated with the keyboard in various situations such as moving cells.
`PlutoGrid` is a `DataGrid` that can be operated with the keyboard in various situations such as
moving cells.
It is developed with priority on the web and desktop.
Improvements such as UI on mobile are being considered.
If you comment on an issue, mobile improvements can be made quickly.

<br>

### [Demo Web](https://bosskmk.github.io/pluto_grid/build/web/index.html)

> You can try out various functions and usage methods right away.
> All features provide example code.

<br>

### [Pub.Dev](https://pub.dev/packages/pluto_grid)

> Check out how to install from the official distribution site.

<br>

### [Documentation](https://pluto.weblaze.dev/series/pluto-grid)

> The documentation has more details.

<br>

### [ChangeLog](https://github.com/bosskmk/pluto_grid/blob/master/CHANGELOG.md)

> Please note the changes when changing the version of PlutoGrid you are using.

<br>

### [Issue](https://github.com/bosskmk/pluto_grid/issues)

> Report any questions or errors.

<br>
Expand All @@ -50,59 +56,71 @@ If you comment on an issue, mobile improvements can be made quickly.
### Screenshots

#### Change the color of the rows or make the cells look the way you want them.

![PlutoGrid Normal](https://bosskmk.github.io/images/pluto_grid/2.8.0/pluto_grid_2.8.0_01.png)

<br>

#### Date type input can be easily selected by pop-up and keyboard.

![PlutoGrid Select Popup](https://bosskmk.github.io/images/pluto_grid/3.1.0/pluto_grid_3.1.0_01.png)

<br>

#### The selection type column can be easily selected using a pop-up and keyboard.

![PlutoGrid Select Date](https://bosskmk.github.io/images/pluto_grid/2.8.0/pluto_grid_2.8.0_03.png)

<br>

#### Group columns by desired depth.

![PlutoGrid Cell renderer](https://bosskmk.github.io/images/pluto_grid/2.8.0/pluto_grid_2.8.0_04.png)

<br>

#### Grid can be expressed in dark mode or a combination of desired colors. Also, freeze the column, move it by dragging, or adjust the size.

![PlutoGrid Multi select](https://bosskmk.github.io/images/pluto_grid/2.8.0/pluto_grid_2.8.0_05.png)

<br>

### Example

Generate the data to be used in the grid.

```dart

List<PlutoColumn> columns = [

/// Text Column definition
PlutoColumn(
title: 'text column',
field: 'text_field',
type: PlutoColumnType.text(),
),

/// Number Column definition
PlutoColumn(
title: 'number column',
field: 'number_field',
type: PlutoColumnType.number(),
),

/// Select Column definition
PlutoColumn(
title: 'select column',
field: 'select_field',
type: PlutoColumnType.select(['item1', 'item2', 'item3']),
),

/// Datetime Column definition
PlutoColumn(
title: 'date column',
field: 'date_field',
type: PlutoColumnType.date(),
),

/// Time Column definition
PlutoColumn(
title: 'time column',
Expand Down Expand Up @@ -143,6 +161,7 @@ List<PlutoRow> rows = [
```

Create a grid with the data created above.

```dart
@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -173,6 +192,8 @@ Widget build(BuildContext context) {

| Flutter | PlutoGrid |
|------------------|-----------------------|
| 3.38.0 or higher | 8.1.0 or higher |
| 3.19.0 or higher | 8.0.0 or higher |
| 3.10.0 or higher | 7.0.0 or higher |
| 3.7.0 or higher | 6.0.0 or higher |
| 3.3.0 or higher | 5.0.6 or higher |
Expand All @@ -184,7 +205,9 @@ For other versions, contact the issue
<br>

### Related packages

> develop packages that make it easy to develop admin pages or CMS with Flutter.

* [PlutoGrid](https://github.com/bosskmk/pluto_grid)
* [PlutoMenuBar](https://github.com/bosskmk/pluto_menu_bar)
* [PlutoLayout](https://github.com/bosskmk/pluto_layout)
Expand Down
32 changes: 32 additions & 0 deletions demo/ios/Flutter/ephemeral/flutter_lldb_helper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#
# Generated file, do not edit.
#

import lldb

def handle_new_rx_page(frame: lldb.SBFrame, bp_loc, extra_args, intern_dict):
"""Intercept NOTIFY_DEBUGGER_ABOUT_RX_PAGES and touch the pages."""
base = frame.register["x0"].GetValueAsAddress()
page_len = frame.register["x1"].GetValueAsUnsigned()

# Note: NOTIFY_DEBUGGER_ABOUT_RX_PAGES will check contents of the
# first page to see if handled it correctly. This makes diagnosing
# misconfiguration (e.g. missing breakpoint) easier.
data = bytearray(page_len)
data[0:8] = b'IHELPED!'

error = lldb.SBError()
frame.GetThread().GetProcess().WriteMemory(base, data, error)
if not error.Success():
print(f'Failed to write into {base}[+{page_len}]', error)
return

def __lldb_init_module(debugger: lldb.SBDebugger, _):
target = debugger.GetDummyTarget()
# Caveat: must use BreakpointCreateByRegEx here and not
# BreakpointCreateByName. For some reasons callback function does not
# get carried over from dummy target for the later.
bp = target.BreakpointCreateByRegex("^NOTIFY_DEBUGGER_ABOUT_RX_PAGES$")
bp.SetScriptCallbackFunction('{}.handle_new_rx_page'.format(__name__))
bp.SetAutoContinue(True)
print("-- LLDB integration loaded --")
5 changes: 5 additions & 0 deletions demo/ios/Flutter/ephemeral/flutter_lldbinit
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#
# Generated file, do not edit.
#

command script import --relative-to-command-file flutter_lldb_helper.py
4 changes: 2 additions & 2 deletions demo/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ void main() {
}

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

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -119,7 +119,7 @@ class MyApp extends StatelessWidget {
scaffoldBackgroundColor: PlutoGridExampleColors.backgroundColor,
colorScheme: const ColorScheme.light(
primary: PlutoGridExampleColors.primaryColor,
background: PlutoGridExampleColors.backgroundColor,
surface: PlutoGridExampleColors.backgroundColor,
),
),
);
Expand Down
19 changes: 11 additions & 8 deletions demo/lib/screen/development_screen.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import 'package:faker/faker.dart';
import 'package:faker/faker.dart' hide Color, Image;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:pluto_grid/pluto_grid.dart';
Expand All @@ -13,14 +13,16 @@ enum _Test {
c;

bool get isA => this == _Test.a;

bool get isB => this == _Test.b;

bool get isC => this == _Test.c;
}

class DevelopmentScreen extends StatefulWidget {
static const routeName = 'development';

const DevelopmentScreen({Key? key}) : super(key: key);
const DevelopmentScreen({super.key});

@override
_DevelopmentScreenState createState() => _DevelopmentScreenState();
Expand Down Expand Up @@ -357,7 +359,7 @@ class ClassYouImplemented implements PlutoFilterType {
}

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

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -407,8 +409,7 @@ class _Header extends StatefulWidget {
required this.setTextDirection,
required this.setConfiguration,
required this.setGridMode,
Key? key,
}) : super(key: key);
});

@override
_HeaderState createState() => _HeaderState();
Expand Down Expand Up @@ -657,9 +658,11 @@ class _HeaderState extends State<_Header> {
return PlutoMenuBar(
borderColor: Colors.transparent,
mode: _isMobile ? PlutoMenuBarMode.tap : PlutoMenuBarMode.hover,
textStyle: const TextStyle(
color: Colors.black,
fontSize: 14,
itemStyle: PlutoMenuItemStyle(
textStyle: const TextStyle(
color: Colors.black,
fontSize: 14,
),
),
menus: [
PlutoMenuItem(
Expand Down
2 changes: 1 addition & 1 deletion demo/lib/screen/empty_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import '../dummy_data/development.dart';
class EmptyScreen extends StatefulWidget {
static const routeName = 'empty';

const EmptyScreen({Key? key}) : super(key: key);
const EmptyScreen({super.key});

@override
_EmptyScreenState createState() => _EmptyScreenState();
Expand Down
7 changes: 3 additions & 4 deletions demo/lib/screen/feature/add_and_remove_column_row_screen.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'dart:async';

import 'package:faker/faker.dart';
import 'package:faker/faker.dart' hide Color;
import 'package:flutter/material.dart';
import 'package:pluto_grid/pluto_grid.dart';

Expand All @@ -10,7 +10,7 @@ import '../../widget/pluto_example_screen.dart';
class AddAndRemoveColumnRowScreen extends StatefulWidget {
static const routeName = 'add-and-remove-column-row';

const AddAndRemoveColumnRowScreen({Key? key}) : super(key: key);
const AddAndRemoveColumnRowScreen({super.key});

@override
_AddAndRemoveColumnRowScreenState createState() =>
Expand Down Expand Up @@ -167,8 +167,7 @@ class _AddAndRemoveColumnRowScreenState
class _Header extends StatefulWidget {
const _Header({
required this.stateManager,
Key? key,
}) : super(key: key);
});

final PlutoGridStateManager stateManager;

Expand Down
2 changes: 1 addition & 1 deletion demo/lib/screen/feature/add_rows_asynchronously.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import '../../widget/pluto_example_screen.dart';
class AddRowsAsynchronouslyScreen extends StatefulWidget {
static const routeName = 'feature/add-rows-asynchronously';

const AddRowsAsynchronouslyScreen({Key? key}) : super(key: key);
const AddRowsAsynchronouslyScreen({super.key});

@override
_AddRowsAsynchronouslyScreenState createState() =>
Expand Down
2 changes: 1 addition & 1 deletion demo/lib/screen/feature/cell_renderer_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../../widget/pluto_example_screen.dart';
class CellRendererScreen extends StatefulWidget {
static const routeName = 'feature/cell-renderer';

const CellRendererScreen({Key? key}) : super(key: key);
const CellRendererScreen({super.key});

@override
_CellRendererScreenState createState() => _CellRendererScreenState();
Expand Down
2 changes: 1 addition & 1 deletion demo/lib/screen/feature/cell_selection_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../../widget/pluto_example_screen.dart';
class CellSelectionScreen extends StatefulWidget {
static const routeName = 'feature/cell-selection';

const CellSelectionScreen({Key? key}) : super(key: key);
const CellSelectionScreen({super.key});

@override
_CellSelectionScreenState createState() => _CellSelectionScreenState();
Expand Down
2 changes: 1 addition & 1 deletion demo/lib/screen/feature/column_filtering_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import '../../widget/pluto_example_screen.dart';
class ColumnFilteringScreen extends StatefulWidget {
static const routeName = 'feature/column-filtering';

const ColumnFilteringScreen({Key? key}) : super(key: key);
const ColumnFilteringScreen({super.key});

@override
_ColumnFilteringScreenState createState() => _ColumnFilteringScreenState();
Expand Down
Loading