Skip to content

Commit

Permalink
[dev] Prerelease v1.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Nialixus committed Oct 20, 2024
1 parent 2999c1b commit 729e54d
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 37 deletions.
17 changes: 13 additions & 4 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,19 @@ class _MAP extends State<MyApp> {
children: [
Thicken(
thickness: thickness,
child: const Text(
'Thicc',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.black),
child: const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
Icons.format_bold_rounded,
color: Colors.black,
),
Text(
'Thicc',
textAlign: TextAlign.center,
style: TextStyle(color: Colors.black),
),
],
),
),
Center(
Expand Down
26 changes: 13 additions & 13 deletions example/pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -79,18 +79,18 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a"
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
url: "https://pub.dev"
source: hosted
version: "10.0.4"
version: "10.0.5"
leak_tracker_flutter_testing:
dependency: transitive
description:
name: leak_tracker_flutter_testing
sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8"
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.5"
leak_tracker_testing:
dependency: transitive
description:
Expand Down Expand Up @@ -119,18 +119,18 @@ packages:
dependency: transitive
description:
name: material_color_utilities
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
url: "https://pub.dev"
source: hosted
version: "0.8.0"
version: "0.11.1"
meta:
dependency: transitive
description:
name: meta
sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136"
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
url: "https://pub.dev"
source: hosted
version: "1.12.0"
version: "1.15.0"
path:
dependency: transitive
description:
Expand Down Expand Up @@ -188,17 +188,17 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f"
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
url: "https://pub.dev"
source: hosted
version: "0.7.0"
version: "0.7.2"
thicken:
dependency: "direct main"
description:
path: ".."
relative: true
source: path
version: "1.0.0"
version: "1.1.0"
vector_math:
dependency: transitive
description:
Expand All @@ -211,10 +211,10 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec"
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
version: "14.2.1"
version: "14.2.5"
sdks:
dart: ">=3.4.4 <4.0.0"
flutter: ">=3.18.0-18.0.pre.54"
49 changes: 31 additions & 18 deletions lib/thicken.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ library thicken;
import 'dart:ui' as ui;
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/widgets.dart';

/// A widget that creates a thick visual effect by stacking multiple
/// layers of a given [child] widget with slight translations based on the
Expand All @@ -33,6 +34,7 @@ import 'package:flutter/rendering.dart';
/// Example usage:
/// ```dart
/// Thicken(
/// pixelRatio: 10.0,
/// thickness: 3.0,
/// child: Icon(
/// Icons.star,
Expand All @@ -41,6 +43,8 @@ import 'package:flutter/rendering.dart';
/// )
/// ```
///
/// [pixelRatio] : Is the sharpness quality of the stroke.
///
/// [thickness] : The amount of thickness to apply to the child. Higher values
/// will create more layers.
/// _**(It is not recommended to set thickness greater than 1.0)**_
Expand All @@ -50,15 +54,18 @@ class Thicken extends StatelessWidget {
/// Creates a [Thicken] widget.
///
/// The [thickness] parameter defines how many layers of the child widget
/// will be drawn, and the [child] is the widget that will be stacked with
/// offset translations.
const Thicken({
/// will be drawn, as the [pixelRatio] parameter is used to define the sharpness of the strokes,
/// and the [child] is the widget that will be thickened.
Thicken({
super.key,
this.pixelRatio = 1.0,
required this.thickness,
required this.child,
});

/// The key used to convert the [child] widget to an image.
late final _key = GlobalKey(debugLabel: 'thicken.$key');

/// The amount of thickness applied. The thickness controls how many layers
/// of the [child] widget are created. A higher [thickness] value creates more
/// layers and larger translations between them.
Expand All @@ -68,6 +75,11 @@ class Thicken extends StatelessWidget {
/// The child widget that will be thickened with multiple layers.
final Widget child;

/// The sharpness quality of the strokes used to create the thickening effect.
/// The bigger the value, the smoother the strokes will be and the more
/// resources will be used.
final double pixelRatio;

/// The number of layers calculated based on the [thickness] value.
///
/// This gives a base of 3 layers, and adds more layers as the thickness
Expand All @@ -77,20 +89,15 @@ class Thicken extends StatelessWidget {
return 3 + (range * 2);
}

/// The pixel ratio of the [child] widget.
/// By default, this is set to 1.0.
final double pixelRatio;

@override
Widget build(BuildContext context) {
final key = GlobalKey(debugLabel: 'thicken');
return FutureBuilder(
future: () async {
try {
// Wait until after the frame is built
await Future.delayed(Duration.zero);

final boundary = key.currentContext?.findRenderObject();
final boundary = _key.currentContext?.findRenderObject();
if (boundary is RenderRepaintBoundary) {
final image = await boundary.toImage(pixelRatio: pixelRatio);
final byte = await image.toByteData(
Expand All @@ -99,30 +106,36 @@ class Thicken extends StatelessWidget {

return byte?.buffer.asUint8List();
}

return null;
} catch (e) {
return null;
}
}(),
builder: (builder, snapshot) {
return Stack(
clipBehavior: Clip.none,
alignment: Alignment.center,
children: [
if (snapshot.hasData)
...List.generate(layers * layers, (index) {
...List.generate(
layers * layers,
(index) {
final indexX = index % layers;
final indexY = index ~/ layers;
final offsetX = (1 - (2 * indexX / layers)) * thickness;
final offsetY = (1 - (2 * indexY / layers)) * thickness;

if (index + indexY == 0) return const SizedBox();
return Transform.translate(
offset: Offset(offsetX, offsetY),
child: Image.memory(snapshot.data!),
return Positioned.fill(
child: Transform.translate(
offset: Offset(offsetX, offsetY),
child: snapshot.data != null
? Image.memory(snapshot.data!)
: child,
),
);
}),
},
),
RepaintBoundary(
key: key,
key: _key,
child: child,
),
],
Expand Down
4 changes: 2 additions & 2 deletions test/thicken_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ void main() {
testWidgets('Thicken Widget Test', (WidgetTester tester) async {
debugPrint("✅ Test is started !");
await tester.pumpWidget(
const MaterialApp(
MaterialApp(
home: Thicken(
thickness: 2.5,
child: Text(
child: const Text(
'Thickened Text',
style: TextStyle(fontSize: 24),
),
Expand Down

0 comments on commit 729e54d

Please sign in to comment.