Skip to content
Snippets Groups Projects
Commit 74f9ef9b authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Merge branch '67-create-styled-widgets' into 'master'

Resolve "Create styled widgets"

Closes #67

See merge request !65
parents c6346730 842b5302
No related branches found
No related tags found
1 merge request!65Resolve "Create styled widgets"
Pipeline #6023 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=1.0.53
app.versionCode=54
app.versionName=1.0.54
app.versionCode=55
......@@ -6,6 +6,7 @@ import 'package:random/config/theme.dart';
import 'package:random/cubit/data_cubit.dart';
import 'package:random/cubit/settings_cubit.dart';
import 'package:random/ui/widgets/header_app.dart';
import 'package:random/ui/widgets/styles_widget.dart';
class DemoPage extends StatelessWidget {
const DemoPage({super.key});
......@@ -29,6 +30,30 @@ class DemoPage extends StatelessWidget {
fakeApiCall(),
const SizedBox(height: 20),
const AppHeader(text: 'BOTTOM'),
const StyledWidget(
child: SizedBox.square(
dimension: 40,
child: Center(child: Text('default')),
),
),
const SizedBox(height: 8),
const StyledWidget(
borderRadius: 0,
borderWidth: 12,
// depth: 8,
lowerColor: Colors.red,
upperColor: Colors.yellow,
child: Center(child: Text('custom 1')),
),
const SizedBox(height: 8),
const StyledWidget(
borderRadius: 10,
borderWidth: 20,
depth: 20,
lowerColor: Colors.blueGrey,
upperColor: Colors.blue,
child: Center(child: Text('custom 2')),
),
],
),
);
......
import 'package:flutter/material.dart';
class StyledWidget extends StatelessWidget {
const StyledWidget({
super.key,
required this.child,
this.borderWidth = 10,
this.borderRadius = 4,
this.depth = 5,
this.lowerColor,
this.upperColor,
});
final Widget child;
final double borderWidth;
final double borderRadius;
final int depth;
final Color? lowerColor;
final Color? upperColor;
Widget nestedContainers({
required Widget child,
required int containerDepth,
required Color lowerColor,
required Color upperColor,
}) {
final double singleBorderWidth = borderWidth / depth;
final Color borderColor =
Color.lerp(upperColor, lowerColor, (containerDepth / depth - 0.5).abs() * 2) ??
Colors.white;
final double radius = borderRadius + borderRadius * (containerDepth / depth);
return Container(
decoration: BoxDecoration(
color: borderColor,
border: Border.all(
color: borderColor,
width: singleBorderWidth,
),
borderRadius: BorderRadius.circular(radius),
),
child: containerDepth == 0
? Padding(
padding: const EdgeInsets.all(8),
child: child,
)
: nestedContainers(
child: child,
containerDepth: containerDepth - 1,
lowerColor: lowerColor,
upperColor: upperColor,
),
);
}
@override
Widget build(BuildContext context) {
return nestedContainers(
child: child,
containerDepth: depth,
lowerColor: lowerColor ?? Theme.of(context).colorScheme.onPrimary,
upperColor: upperColor ?? Theme.of(context).colorScheme.onSecondary,
);
}
}
......@@ -3,7 +3,7 @@ description: A random application, for testing purpose only.
publish_to: "none"
version: 1.0.53+54
version: 1.0.54+55
environment:
sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment