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

Create styled container widget

parent c6346730
No related branches found
No related tags found
1 merge request!65Resolve "Create styled widgets"
Pipeline #6014 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.0.53 app.versionName=1.0.54
app.versionCode=54 app.versionCode=55
...@@ -6,6 +6,7 @@ import 'package:random/config/theme.dart'; ...@@ -6,6 +6,7 @@ import 'package:random/config/theme.dart';
import 'package:random/cubit/data_cubit.dart'; import 'package:random/cubit/data_cubit.dart';
import 'package:random/cubit/settings_cubit.dart'; import 'package:random/cubit/settings_cubit.dart';
import 'package:random/ui/widgets/header_app.dart'; import 'package:random/ui/widgets/header_app.dart';
import 'package:random/ui/widgets/styles_widget.dart';
class DemoPage extends StatelessWidget { class DemoPage extends StatelessWidget {
const DemoPage({super.key}); const DemoPage({super.key});
...@@ -29,6 +30,30 @@ class DemoPage extends StatelessWidget { ...@@ -29,6 +30,30 @@ class DemoPage extends StatelessWidget {
fakeApiCall(), fakeApiCall(),
const SizedBox(height: 20), const SizedBox(height: 20),
const AppHeader(text: 'BOTTOM'), 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. ...@@ -3,7 +3,7 @@ description: A random application, for testing purpose only.
publish_to: "none" publish_to: "none"
version: 1.0.53+54 version: 1.0.54+55
environment: environment:
sdk: "^3.0.0" sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment