Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
# using flutter
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
flutter-version: '3.38.10'
- run: dart --version
- run: flutter --version
- run: flutter pub get
Expand Down
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,11 @@ coverage/
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages

# FVM Support - https://fvm.app/
.fvm/flutter_sdk

# FVM Version Cache
.fvm/
.fvmrc


.claude/
.vscode
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
6 changes: 3 additions & 3 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 Down Expand Up @@ -95,9 +95,9 @@ class _DevelopmentScreenState extends State<DevelopmentScreen> {
),
// localeText: const PlutoGridLocaleText.korean(),
columnFilter: PlutoGridColumnFilterConfig(
filters: const [
filters: [
...FilterHelper.defaultFilters,
ClassYouImplemented(),
const ClassYouImplemented(),
],
resolveDefaultColumnFilter: (column, resolver) {
if (column.field == 'column3') {
Expand Down
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 Down
2 changes: 1 addition & 1 deletion demo/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1

environment:
sdk: ">=2.17.0 <3.0.0"
sdk: ">=3.9.0 <4.0.0"

dependencies:
flutter:
Expand Down
2 changes: 1 addition & 1 deletion example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1

environment:
sdk: ">=2.17.0 <3.0.0"
sdk: ">=3.9.0 <4.0.0"

# Dependencies specify other packages that your package needs in order to work.
# To automatically upgrade your package dependencies to the latest versions
Expand Down
34 changes: 27 additions & 7 deletions lib/src/helper/pluto_size_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,6 @@ class PlutoAutoSizeScale<T> extends PlutoAutoSize<T> {

@override
void update() {
final length = items.length;

double effectiveMaxSize = maxSize;

double totalWidth = items.fold<double>(0, (p, e) => p += getItemSize(e));
Expand All @@ -189,17 +187,39 @@ class PlutoAutoSizeScale<T> extends PlutoAutoSize<T> {
scale = effectiveMaxSize / totalWidth;
}

for (int i = 0; i < length; i += 1) {
final item = items.elementAt(i);
double currentTotal = 0;
T? lastResizableItem;

if (isSuppressedItem(item)) continue;
for (final item in items) {
if (isSuppressedItem(item)) {
currentTotal += getItemSize(item);
continue;
}

final minSize = getItemMinSize(item);

final size = max(minSize, getItemSize(item) * scale + 1);
final size = max(minSize, getItemSize(item) * scale);

setItemSize(item, size);
currentTotal += size;
lastResizableItem = item;
}

if (lastResizableItem == null) {
return;
}

final remaining = maxSize - currentTotal;

if (remaining == 0) {
return;
}

final currentLastSize = getItemSize(lastResizableItem);
final minLastSize = getItemMinSize(lastResizableItem);
setItemSize(
lastResizableItem,
max(minLastSize, currentLastSize + remaining),
);
}
}

Expand Down
9 changes: 6 additions & 3 deletions lib/src/manager/pluto_grid_event_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class PlutoGridEventManager {
.where((event) => event.type.isThrottleLeading)
.transform(
ThrottleStreamTransformer(
(_) => TimerStream<PlutoGridEvent>(_, _.duration as Duration),
(PlutoGridEvent event) =>
TimerStream<PlutoGridEvent>(event, event.duration as Duration),
trailing: false,
leading: true,
),
Expand All @@ -42,7 +43,8 @@ class PlutoGridEventManager {
.where((event) => event.type.isThrottleTrailing)
.transform(
ThrottleStreamTransformer(
(_) => TimerStream<PlutoGridEvent>(_, _.duration as Duration),
(PlutoGridEvent event) =>
TimerStream<PlutoGridEvent>(event, event.duration as Duration),
trailing: true,
leading: false,
),
Expand All @@ -51,7 +53,8 @@ class PlutoGridEventManager {
final debounceStream =
_subject.stream.where((event) => event.type.isDebounce).transform(
DebounceStreamTransformer(
(_) => TimerStream<PlutoGridEvent>(_, _.duration as Duration),
(PlutoGridEvent event) =>
TimerStream<PlutoGridEvent>(event, event.duration as Duration),
),
);

Expand Down
3 changes: 2 additions & 1 deletion lib/src/manager/pluto_grid_key_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ class PlutoGridKeyManager {
final movingStream =
_subject.stream.where((event) => event.needsThrottle).transform(
ThrottleStreamTransformer(
(_) => TimerStream(_, const Duration(milliseconds: 1)),
(PlutoKeyManagerEvent keyEvent) =>
TimerStream(keyEvent, const Duration(milliseconds: 1)),
),
);

Expand Down
4 changes: 2 additions & 2 deletions lib/src/pluto_grid_configuration.dart
Original file line number Diff line number Diff line change
Expand Up @@ -859,7 +859,7 @@ class PlutoGridColumnFilterConfig {

final int _debounceMilliseconds;

bool get hasUserFilter => _userFilters != null && _userFilters!.isNotEmpty;
bool get hasUserFilter => _userFilters != null && _userFilters.isNotEmpty;

List<PlutoFilterType> get filters =>
hasUserFilter ? _userFilters! : FilterHelper.defaultFilters;
Expand All @@ -878,7 +878,7 @@ class PlutoGridColumnFilterConfig {
return filters.first;
}

var resolvedFilter = _userResolveDefaultColumnFilter!(column, resolver);
var resolvedFilter = _userResolveDefaultColumnFilter(column, resolver);

assert(filters.contains(resolvedFilter));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,9 @@ import FlutterMacOS
import Foundation

import file_saver
import path_provider_foundation
import printing

func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FileSaverPlugin.register(with: registry.registrar(forPlugin: "FileSaverPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
PrintingPlugin.register(with: registry.registrar(forPlugin: "PrintingPlugin"))
}
4 changes: 2 additions & 2 deletions pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ homepage: https://pluto.weblaze.dev
repository: https://github.com/bosskmk/pluto_grid

environment:
sdk: '>=2.17.0 <4.0.0'
flutter: ">=2.5.0"
sdk: '>=3.9.0 <4.0.0'
flutter: ">=3.38.10"

dependencies:
flutter:
Expand Down
35 changes: 28 additions & 7 deletions test/src/helper/pluto_size_helper_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -146,11 +146,11 @@ void main() {
mode: mode,
).update();

expect(items[0].size, 100 * scale + 1);
expect(items[1].size, 200 * scale + 1);
expect(items[2].size, 200 * scale + 1);
expect(items[3].size, 100 * scale + 1);
expect(items[4].size, 100 * scale + 1);
expect(items[0].size, 100 * scale);
expect(items[1].size, 200 * scale);
expect(items[2].size, 200 * scale);
expect(items[3].size, 100 * scale);
expect(items[4].size, 100 * scale);
});

test(
Expand Down Expand Up @@ -203,12 +203,33 @@ void main() {
mode: mode,
).update();

expect(items[0].size, 100 * scale + 1);
expect(items[0].size, 100 * scale);
expect(items[1].size, 120);
expect(items[2].size, 130 * scale + 1);
expect(items[2].size, 130 * scale);
expect(items[3].size, 140);
expect(items[4].size, 150);
});

test('리사이즈 이후 전체 합은 maxSize 와 같아야 한다.', () {
final items = [
_ResizeItem(index: 0, size: 130, minSize: 50),
_ResizeItem(index: 1, size: 220, minSize: 50),
_ResizeItem(index: 2, size: 90, minSize: 50),
];

PlutoAutoSizeHelper.items<_ResizeItem>(
maxSize: 500,
items: items,
isSuppressed: (i) => i.suppressed,
getItemSize: (i) => i.size,
getItemMinSize: (i) => i.minSize,
setItemSize: (i, size) => i.size = size,
mode: mode,
).update();

final total = items.fold<double>(0, (p, e) => p + e.size);
expect(total, 500);
});
});
});

Expand Down
Loading