From 65f2a5d60b12ed127a99497e713f0257ad7b7c03 Mon Sep 17 00:00:00 2001 From: Jonas Wanke Date: Sat, 30 Dec 2023 11:02:32 +0100 Subject: [PATCH] Interpolate colors in Oklab space i/o HSV --- example/pubspec.lock | 42 +++++++++++++++++++++++++++++++++----- lib/src/app_bar/state.dart | 9 ++++++-- pubspec.yaml | 1 + 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/example/pubspec.lock b/example/pubspec.lock index 5a4b0a6..94408c4 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -105,6 +105,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.0" + color_models: + dependency: transitive + description: + name: color_models + sha256: "3683f0a461570161ca22b7d3e1765b2ce2bce3534db14e00d5ee458d0287abac" + url: "https://pub.dev" + source: hosted + version: "1.3.3" convert: dependency: transitive description: @@ -215,6 +223,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_color_models: + dependency: transitive + description: + name: flutter_color_models + sha256: "8454198ba9a82e533452d0764f1df3d6c3ccc2b33e18eb1f2fedc7ae4a5c43be" + url: "https://pub.dev" + source: hosted + version: "1.3.3+2" flutter_lints: dependency: transitive description: @@ -307,10 +323,18 @@ packages: dependency: transitive description: name: meta - sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e url: "https://pub.dev" source: hosted - version: "1.9.1" + version: "1.10.0" + num_utilities: + dependency: transitive + description: + name: num_utilities + sha256: "170695bcafd17a19ee3a060325e7e10fb35bb878c8bcb3e6f5691dde1462c0ae" + url: "https://pub.dev" + source: hosted + version: "1.0.5" oxidized: dependency: transitive description: @@ -359,6 +383,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.2" + powers: + dependency: transitive + description: + name: powers + sha256: "389ba222d4264655ecd3ffa461921bc707a07e4597b98831d21dd516eed6f496" + url: "https://pub.dev" + source: hosted + version: "1.0.0+2" pub_semver: dependency: transitive description: @@ -505,10 +537,10 @@ packages: dependency: transitive description: name: web - sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10 + sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152 url: "https://pub.dev" source: hosted - version: "0.1.4-beta" + version: "0.3.0" web_socket_channel: dependency: transitive description: @@ -534,5 +566,5 @@ packages: source: hosted version: "3.1.2" sdks: - dart: ">=3.1.0-185.0.dev <4.0.0" + dart: ">=3.2.0-194.0.dev <4.0.0" flutter: ">=3.10.0" diff --git a/lib/src/app_bar/state.dart b/lib/src/app_bar/state.dart index 63998e5..cd6083f 100644 --- a/lib/src/app_bar/state.dart +++ b/lib/src/app_bar/state.dart @@ -3,6 +3,7 @@ import 'dart:ui'; import 'package:black_hole_flutter/black_hole_flutter.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_color_models/flutter_color_models.dart'; import 'leading.dart'; @@ -55,8 +56,12 @@ class MorphingState { SystemUiOverlayStyle get systemOverlayStyle => t < 0.5 ? parent.systemOverlayStyle : child.systemOverlayStyle; - static Color _lerpColor(Color a, Color b, double t) => - HSVColor.lerp(HSVColor.fromColor(a), HSVColor.fromColor(b), t)!.toColor(); + /// Interpolate between colors in Oklab space. + static Color _lerpColor(Color a, Color b, double t) { + return OklabColor.fromColor(a) + .interpolate(OklabColor.fromColor(b), t) + .toColor(); + } } @immutable diff --git a/pubspec.yaml b/pubspec.yaml index a75f93a..511f230 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,6 +15,7 @@ dependencies: collection: ^1.15.0 flutter: sdk: flutter + flutter_color_models: ^1.3.3+2 list_diff: ^2.0.0 dev_dependencies: