master #81
@ -46,9 +46,9 @@ abstract class PortfolioCardComponent extends CardComponent
|
|||||||
|
|
||||||
final bool? showImagesOnTop;
|
final bool? showImagesOnTop;
|
||||||
final List<TextWrapper>? keyword;
|
final List<TextWrapper>? keyword;
|
||||||
final List<String>? assets;
|
final List<Widget>? assets;
|
||||||
final TextWrapper? description;
|
final TextWrapper? description;
|
||||||
final String? logo;
|
final Widget? logo;
|
||||||
final TextWrapper? projectName;
|
final TextWrapper? projectName;
|
||||||
final TextWrapper? subtitle;
|
final TextWrapper? subtitle;
|
||||||
final List<Widget>? ctas;
|
final List<Widget>? ctas;
|
||||||
|
@ -10,11 +10,11 @@ abstract class $PortfolioCardComponentCWProxy {
|
|||||||
PortfolioCardComponent showImagesOnTop(bool? showImagesOnTop);
|
PortfolioCardComponent showImagesOnTop(bool? showImagesOnTop);
|
||||||
PortfolioCardComponent keyword(List<TextWrapper>? keyword);
|
PortfolioCardComponent keyword(List<TextWrapper>? keyword);
|
||||||
PortfolioCardComponent description(TextWrapper? description);
|
PortfolioCardComponent description(TextWrapper? description);
|
||||||
PortfolioCardComponent logo(String? logo);
|
PortfolioCardComponent logo(Widget? logo);
|
||||||
PortfolioCardComponent projectName(TextWrapper? projectName);
|
PortfolioCardComponent projectName(TextWrapper? projectName);
|
||||||
PortfolioCardComponent subtitle(TextWrapper? subtitle);
|
PortfolioCardComponent subtitle(TextWrapper? subtitle);
|
||||||
PortfolioCardComponent ctas(List<Widget>? ctas);
|
PortfolioCardComponent ctas(List<Widget>? ctas);
|
||||||
PortfolioCardComponent assets(List<String>? assets);
|
PortfolioCardComponent assets(List<Widget>? assets);
|
||||||
PortfolioCardComponent radius(double? radius);
|
PortfolioCardComponent radius(double? radius);
|
||||||
PortfolioCardComponent padding(double? padding);
|
PortfolioCardComponent padding(double? padding);
|
||||||
PortfolioCardComponent borderColors(List<Color>? borderColors);
|
PortfolioCardComponent borderColors(List<Color>? borderColors);
|
||||||
@ -28,11 +28,11 @@ abstract class $PortfolioCardComponentCWProxy {
|
|||||||
bool? showImagesOnTop,
|
bool? showImagesOnTop,
|
||||||
List<TextWrapper>? keyword,
|
List<TextWrapper>? keyword,
|
||||||
TextWrapper? description,
|
TextWrapper? description,
|
||||||
String? logo,
|
Widget? logo,
|
||||||
TextWrapper? projectName,
|
TextWrapper? projectName,
|
||||||
TextWrapper? subtitle,
|
TextWrapper? subtitle,
|
||||||
List<Widget>? ctas,
|
List<Widget>? ctas,
|
||||||
List<String>? assets,
|
List<Widget>? assets,
|
||||||
double? radius,
|
double? radius,
|
||||||
double? padding,
|
double? padding,
|
||||||
List<Color>? borderColors,
|
List<Color>? borderColors,
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:gap/gap.dart';
|
import 'package:gap/gap.dart';
|
||||||
import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.dart';
|
import 'package:wyatt_ui_kit_example/cards/information_card/information_cards.dart';
|
||||||
|
import 'package:wyatt_ui_kit_example/cards/portfolio_card/portfolio_cards.dart';
|
||||||
|
import 'package:wyatt_ui_kit_example/cards/quote_card/quote_cards.dart';
|
||||||
|
import 'package:wyatt_ui_kit_example/cards/skill_card/skill_cards.dart';
|
||||||
|
|
||||||
class Cards extends StatelessWidget {
|
class Cards extends StatelessWidget {
|
||||||
const Cards({super.key});
|
const Cards({super.key});
|
||||||
@ -17,6 +20,13 @@ class Cards extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const Gap(20),
|
const Gap(20),
|
||||||
const InformationCards(),
|
const InformationCards(),
|
||||||
|
const Gap(20),
|
||||||
|
const PortfolioCards(),
|
||||||
|
const Gap(20),
|
||||||
|
const QuoteCards(),
|
||||||
|
const Gap(20),
|
||||||
|
const SkillCards(),
|
||||||
|
const Gap(20),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,177 @@
|
|||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
|
||||||
|
|
||||||
|
class PortfolioCards extends StatelessWidget {
|
||||||
|
const PortfolioCards({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Portfolio Cards',
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.titleMedium!
|
||||||
|
.copyWith(color: Colors.white),
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
PortfolioCard(
|
||||||
|
logo: const FlutterLogo(
|
||||||
|
size: 50,
|
||||||
|
),
|
||||||
|
projectName: const TextWrapper('Flutter Project.'),
|
||||||
|
subtitle: const TextWrapper('Mobile / Web / Macos.'),
|
||||||
|
description: const TextWrapper('Developpement de 8 mois.'),
|
||||||
|
ctas: [
|
||||||
|
CupertinoButton(
|
||||||
|
color: Colors.grey.withOpacity(0.3),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(
|
||||||
|
Icons.settings,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
assets: [
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
keyword: const [
|
||||||
|
TextWrapper('UI Design'),
|
||||||
|
TextWrapper('Developpement'),
|
||||||
|
TextWrapper('Deploiement')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
PortfolioCard(
|
||||||
|
showImagesOnTop: true,
|
||||||
|
logo: const FlutterLogo(
|
||||||
|
size: 50,
|
||||||
|
),
|
||||||
|
projectName: const TextWrapper('Flutter Project.'),
|
||||||
|
subtitle: const TextWrapper('Mobile / Web / Macos.'),
|
||||||
|
description: const TextWrapper('Developpement de 8 mois.'),
|
||||||
|
ctas: [
|
||||||
|
CupertinoButton(
|
||||||
|
color: Colors.grey.withOpacity(0.3),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(
|
||||||
|
Icons.settings,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
assets: [
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
PortfolioCard(
|
||||||
|
logo: const FlutterLogo(
|
||||||
|
size: 50,
|
||||||
|
),
|
||||||
|
projectName: const TextWrapper('Flutter Project.'),
|
||||||
|
subtitle: const TextWrapper('Mobile / Web / Macos.'),
|
||||||
|
description: const TextWrapper('Developpement de 8 mois.'),
|
||||||
|
ctas: [
|
||||||
|
CupertinoButton(
|
||||||
|
color: Colors.grey.withOpacity(0.3),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(
|
||||||
|
Icons.settings,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
assets: [
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
keyword: const [
|
||||||
|
TextWrapper('UI Design'),
|
||||||
|
TextWrapper('Developpement'),
|
||||||
|
TextWrapper('Deploiement')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
PortfolioCard(
|
||||||
|
logo: const FlutterLogo(
|
||||||
|
size: 50,
|
||||||
|
),
|
||||||
|
projectName: const TextWrapper(
|
||||||
|
'Flutter Project.',
|
||||||
|
gradient: [
|
||||||
|
Colors.blue,
|
||||||
|
Colors.green,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
subtitle: const TextWrapper('Mobile / Web / Macos.'),
|
||||||
|
description: const TextWrapper('Developpement de 8 mois.'),
|
||||||
|
ctas: [
|
||||||
|
CupertinoButton(
|
||||||
|
color: Colors.grey.withOpacity(0.3),
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Icon(
|
||||||
|
Icons.settings,
|
||||||
|
color: Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
assets: [
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_2.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
Image.asset(
|
||||||
|
'assets/mockup_1.png',
|
||||||
|
alignment: Alignment.topCenter,
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
keyword: const [
|
||||||
|
TextWrapper('UI Design'),
|
||||||
|
TextWrapper('Developpement'),
|
||||||
|
TextWrapper('Deploiement')
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
|
||||||
|
|
||||||
|
class QuoteCards extends StatelessWidget {
|
||||||
|
const QuoteCards({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Quote Cards',
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.titleMedium!
|
||||||
|
.copyWith(color: Colors.white),
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
QuoteCard(
|
||||||
|
quote: 'Cupidatat reprehenderit aliqua eiusmod Lorem. '
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute '
|
||||||
|
'quis elit ut amet velit. Incididunt fugiat proident '
|
||||||
|
'proident deserunt tempor Lorem cillum qui do '
|
||||||
|
'ullamco Lorem magna ipsum. Ullamco cupidatat velit '
|
||||||
|
.wrap(),
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
QuoteCard(
|
||||||
|
quote: 'Cupidatat reprehenderit aliqua eiusmod Lorem. '
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute '
|
||||||
|
'quis elit ut amet velit. Incididunt fugiat proident '
|
||||||
|
'proident deserunt tempor Lorem cillum qui do '
|
||||||
|
'ullamco Lorem magna ipsum. Ullamco cupidatat velit '
|
||||||
|
.wrap(gradient: [Colors.red, Colors.orange]),
|
||||||
|
avatar: const FlutterLogo(
|
||||||
|
size: 40,
|
||||||
|
),
|
||||||
|
name: 'John Doe'.wrap(),
|
||||||
|
subtitle: 'Agence anonyme'.wrap(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
|
||||||
|
|
||||||
|
class SkillCards extends StatelessWidget {
|
||||||
|
const SkillCards({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'Skill Cards',
|
||||||
|
style: Theme.of(context)
|
||||||
|
.textTheme
|
||||||
|
.titleMedium!
|
||||||
|
.copyWith(color: Colors.white),
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
SkillCard(
|
||||||
|
gradient: const [Colors.red, Colors.orange],
|
||||||
|
icon: Icons.ac_unit_sharp,
|
||||||
|
title: 'Lorem Ipsum'.wrap(),
|
||||||
|
description: 'Cupidatat reprehenderit aliqua eiusmod Lorem. '
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute '
|
||||||
|
'quis elit ut amet velit. Incididunt fugiat proident '
|
||||||
|
'proident deserunt tempor Lorem cillum qui do '
|
||||||
|
'ullamco Lorem magna ipsum. Ullamco cupidatat velit '
|
||||||
|
.wrap(),
|
||||||
|
skills: [
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
TextWrapper.text(
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute ',
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
SkillCard(
|
||||||
|
gradient: const [Colors.blue, Colors.green],
|
||||||
|
icon: Icons.ac_unit_sharp,
|
||||||
|
title: 'Lorem Ipsum'.wrap(),
|
||||||
|
description: 'Cupidatat reprehenderit aliqua eiusmod Lorem. '
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute '
|
||||||
|
'quis elit ut amet velit. Incididunt fugiat proident '
|
||||||
|
'proident deserunt tempor Lorem cillum qui do '
|
||||||
|
'ullamco Lorem magna ipsum. Ullamco cupidatat velit '
|
||||||
|
.wrap(),
|
||||||
|
skills: [
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
const TextWrapper(
|
||||||
|
'Qui ipsum id ea ea nulla labore aute ullamco aute ',
|
||||||
|
gradient: [Colors.red, Colors.orange],
|
||||||
|
),
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
TextWrapper.text('Firebase'),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -15,3 +15,6 @@
|
|||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
export './information_card/information_card.dart';
|
export './information_card/information_card.dart';
|
||||||
|
export './portfolio_card/portfolio_card.dart';
|
||||||
|
export './quote_card/quote_card.dart';
|
||||||
|
export './skill_card/skill_card.dart';
|
||||||
|
@ -0,0 +1,111 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_description.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_header.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/portfolio_card/widgets/portfolio_card_images.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart';
|
||||||
|
|
||||||
|
part 'portfolio_card.g.dart';
|
||||||
|
|
||||||
|
@ComponentCopyWithExtension()
|
||||||
|
class PortfolioCard extends PortfolioCardComponent with $PortfolioCardCWMixin {
|
||||||
|
const PortfolioCard({
|
||||||
|
super.showImagesOnTop,
|
||||||
|
super.keyword,
|
||||||
|
super.description,
|
||||||
|
super.logo,
|
||||||
|
super.projectName,
|
||||||
|
super.subtitle,
|
||||||
|
super.ctas,
|
||||||
|
super.assets,
|
||||||
|
super.radius,
|
||||||
|
super.padding,
|
||||||
|
super.borderColors,
|
||||||
|
super.backgroundColor,
|
||||||
|
super.minSize,
|
||||||
|
super.maxSize = const Size(330, double.infinity),
|
||||||
|
super.shadow,
|
||||||
|
super.background,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => CardWrapper(
|
||||||
|
background: background,
|
||||||
|
padding: padding,
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColors: borderColors,
|
||||||
|
shadow: shadow,
|
||||||
|
maxSize: maxSize,
|
||||||
|
minSize: minSize,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
if (showImagesOnTop ?? false) ...[
|
||||||
|
if (assets != null) ...[
|
||||||
|
PortfolioCardImages(
|
||||||
|
radius: radius,
|
||||||
|
maxSize: maxSize,
|
||||||
|
images: assets,
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
],
|
||||||
|
PortfolioCardDescription(
|
||||||
|
description: description,
|
||||||
|
ctas: ctas,
|
||||||
|
),
|
||||||
|
const Gap(10),
|
||||||
|
PortfolioCardHeader(
|
||||||
|
logo: logo,
|
||||||
|
padding: padding,
|
||||||
|
radius: radius,
|
||||||
|
projectName: projectName,
|
||||||
|
subtitle: subtitle,
|
||||||
|
keyword: keyword,
|
||||||
|
),
|
||||||
|
] else ...[
|
||||||
|
PortfolioCardHeader(
|
||||||
|
logo: logo,
|
||||||
|
padding: padding,
|
||||||
|
radius: radius,
|
||||||
|
projectName: projectName,
|
||||||
|
subtitle: subtitle,
|
||||||
|
keyword: keyword,
|
||||||
|
),
|
||||||
|
const Gap(10),
|
||||||
|
if (assets != null) ...[
|
||||||
|
PortfolioCardImages(
|
||||||
|
radius: radius,
|
||||||
|
maxSize: maxSize,
|
||||||
|
images: assets,
|
||||||
|
),
|
||||||
|
const Gap(20),
|
||||||
|
],
|
||||||
|
PortfolioCardDescription(
|
||||||
|
description: description,
|
||||||
|
ctas: ctas,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,95 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'portfolio_card.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// ComponentCopyWithGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class $PortfolioCardCWProxyImpl implements $PortfolioCardComponentCWProxy {
|
||||||
|
const $PortfolioCardCWProxyImpl(this._value);
|
||||||
|
final PortfolioCard _value;
|
||||||
|
@override
|
||||||
|
PortfolioCard showImagesOnTop(bool? showImagesOnTop) =>
|
||||||
|
this(showImagesOnTop: showImagesOnTop);
|
||||||
|
@override
|
||||||
|
PortfolioCard keyword(List<TextWrapper>? keyword) => this(keyword: keyword);
|
||||||
|
@override
|
||||||
|
PortfolioCard description(TextWrapper? description) =>
|
||||||
|
this(description: description);
|
||||||
|
@override
|
||||||
|
PortfolioCard logo(Widget? logo) => this(logo: logo);
|
||||||
|
@override
|
||||||
|
PortfolioCard projectName(TextWrapper? projectName) =>
|
||||||
|
this(projectName: projectName);
|
||||||
|
@override
|
||||||
|
PortfolioCard subtitle(TextWrapper? subtitle) => this(subtitle: subtitle);
|
||||||
|
@override
|
||||||
|
PortfolioCard ctas(List<Widget>? ctas) => this(ctas: ctas);
|
||||||
|
@override
|
||||||
|
PortfolioCard assets(List<Widget>? assets) => this(assets: assets);
|
||||||
|
@override
|
||||||
|
PortfolioCard radius(double? radius) => this(radius: radius);
|
||||||
|
@override
|
||||||
|
PortfolioCard padding(double? padding) => this(padding: padding);
|
||||||
|
@override
|
||||||
|
PortfolioCard borderColors(List<Color>? borderColors) =>
|
||||||
|
this(borderColors: borderColors);
|
||||||
|
@override
|
||||||
|
PortfolioCard backgroundColor(Color? backgroundColor) =>
|
||||||
|
this(backgroundColor: backgroundColor);
|
||||||
|
@override
|
||||||
|
PortfolioCard minSize(Size? minSize) => this(minSize: minSize);
|
||||||
|
@override
|
||||||
|
PortfolioCard maxSize(Size? maxSize) => this(maxSize: maxSize);
|
||||||
|
@override
|
||||||
|
PortfolioCard shadow(BoxShadow? shadow) => this(shadow: shadow);
|
||||||
|
@override
|
||||||
|
PortfolioCard background(Widget? background) => this(background: background);
|
||||||
|
@override
|
||||||
|
PortfolioCard key(Key? key) => this(key: key);
|
||||||
|
@override
|
||||||
|
PortfolioCard call({
|
||||||
|
bool? showImagesOnTop,
|
||||||
|
List<TextWrapper>? keyword,
|
||||||
|
TextWrapper? description,
|
||||||
|
Widget? logo,
|
||||||
|
TextWrapper? projectName,
|
||||||
|
TextWrapper? subtitle,
|
||||||
|
List<Widget>? ctas,
|
||||||
|
List<Widget>? assets,
|
||||||
|
double? radius,
|
||||||
|
double? padding,
|
||||||
|
List<Color>? borderColors,
|
||||||
|
Color? backgroundColor,
|
||||||
|
Size? minSize,
|
||||||
|
Size? maxSize,
|
||||||
|
BoxShadow? shadow,
|
||||||
|
Widget? background,
|
||||||
|
Key? key,
|
||||||
|
}) =>
|
||||||
|
PortfolioCard(
|
||||||
|
showImagesOnTop: showImagesOnTop ?? _value.showImagesOnTop,
|
||||||
|
keyword: keyword ?? _value.keyword,
|
||||||
|
description: description ?? _value.description,
|
||||||
|
logo: logo ?? _value.logo,
|
||||||
|
projectName: projectName ?? _value.projectName,
|
||||||
|
subtitle: subtitle ?? _value.subtitle,
|
||||||
|
ctas: ctas ?? _value.ctas,
|
||||||
|
assets: assets ?? _value.assets,
|
||||||
|
radius: radius ?? _value.radius,
|
||||||
|
padding: padding ?? _value.padding,
|
||||||
|
borderColors: borderColors ?? _value.borderColors,
|
||||||
|
backgroundColor: backgroundColor ?? _value.backgroundColor,
|
||||||
|
minSize: minSize ?? _value.minSize,
|
||||||
|
maxSize: maxSize ?? _value.maxSize,
|
||||||
|
shadow: shadow ?? _value.shadow,
|
||||||
|
background: background ?? _value.background,
|
||||||
|
key: key ?? _value.key,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin $PortfolioCardCWMixin on Component {
|
||||||
|
$PortfolioCardComponentCWProxy get copyWith =>
|
||||||
|
$PortfolioCardCWProxyImpl(this as PortfolioCard);
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart';
|
||||||
|
|
||||||
|
class PortfolioCardDescription extends StatelessWidget {
|
||||||
|
const PortfolioCardDescription({
|
||||||
|
this.description,
|
||||||
|
this.ctas,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final TextWrapper? description;
|
||||||
|
final List<Widget>? ctas;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Row(
|
||||||
|
children: [
|
||||||
|
if (description != null) ...[
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
description!.text,
|
||||||
|
style: description!.style ?? context.textTheme.bodyMedium,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
description!.gradient,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
if (ctas != null) ...[
|
||||||
|
const Gap(5),
|
||||||
|
...ctas!.map(
|
||||||
|
(e) => Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
|
child: e,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,99 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/wyatt_ui_kit.dart';
|
||||||
|
|
||||||
|
class PortfolioCardHeader extends StatelessWidget {
|
||||||
|
const PortfolioCardHeader({
|
||||||
|
this.logo,
|
||||||
|
this.padding,
|
||||||
|
this.radius,
|
||||||
|
this.projectName,
|
||||||
|
this.subtitle,
|
||||||
|
this.keyword,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final Widget? logo;
|
||||||
|
final double? padding;
|
||||||
|
final double? radius;
|
||||||
|
final TextWrapper? projectName;
|
||||||
|
final TextWrapper? subtitle;
|
||||||
|
final List<TextWrapper>? keyword;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
if (logo != null) logo!,
|
||||||
|
const Gap(10),
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
if (projectName != null)
|
||||||
|
Text(
|
||||||
|
projectName!.text,
|
||||||
|
style:
|
||||||
|
projectName!.style ?? context.textTheme.titleMedium,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
projectName!.gradient,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (subtitle != null) ...[
|
||||||
|
const Gap(5),
|
||||||
|
Text(
|
||||||
|
subtitle!.text,
|
||||||
|
style: subtitle!.style ?? context.textTheme.titleSmall,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
subtitle!.gradient,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
const Gap(10),
|
||||||
|
Wrap(
|
||||||
|
children: [
|
||||||
|
if (keyword != null)
|
||||||
|
...keyword!.map(
|
||||||
|
(e) => Container(
|
||||||
|
margin: const EdgeInsets.all(3),
|
||||||
|
padding: const EdgeInsets.all(6),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Theme.of(context).focusColor,
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
e.text,
|
||||||
|
style: e.style ?? context.textTheme.bodySmall,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
|
||||||
|
class PortfolioCardImages extends StatelessWidget {
|
||||||
|
const PortfolioCardImages({
|
||||||
|
this.images,
|
||||||
|
this.radius,
|
||||||
|
this.maxSize,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final List<Widget>? images;
|
||||||
|
final double? radius;
|
||||||
|
final Size? maxSize;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final result = <Widget>[];
|
||||||
|
for (final image in images ?? List<Widget>.empty()) {
|
||||||
|
result.addAll([
|
||||||
|
Expanded(
|
||||||
|
child: ClipRRect(
|
||||||
|
borderRadius: BorderRadius.circular(radius ?? 0),
|
||||||
|
child: Container(
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
maxHeight: maxSize != null ? maxSize!.width : 100,
|
||||||
|
),
|
||||||
|
child: image,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const Gap(25),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
result.removeLast();
|
||||||
|
return Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: result,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,127 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
|
||||||
|
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart';
|
||||||
|
part 'quote_card.g.dart';
|
||||||
|
|
||||||
|
@ComponentCopyWithExtension()
|
||||||
|
class QuoteCard extends QuoteCardComponent with $QuoteCardCWMixin {
|
||||||
|
const QuoteCard({
|
||||||
|
super.avatar,
|
||||||
|
super.name,
|
||||||
|
super.subtitle,
|
||||||
|
super.gradient,
|
||||||
|
super.quote,
|
||||||
|
super.leftQuote,
|
||||||
|
super.rightQuote,
|
||||||
|
super.radius,
|
||||||
|
super.padding,
|
||||||
|
super.borderColors,
|
||||||
|
super.backgroundColor,
|
||||||
|
super.minSize,
|
||||||
|
super.maxSize,
|
||||||
|
super.shadow,
|
||||||
|
super.background,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => CardWrapper(
|
||||||
|
background: background,
|
||||||
|
padding: padding,
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColors: borderColors,
|
||||||
|
shadow: shadow,
|
||||||
|
maxSize: maxSize,
|
||||||
|
minSize: minSize,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
leftQuote ??
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.topLeft,
|
||||||
|
child: GradientText(
|
||||||
|
'“',
|
||||||
|
gradient: gradient,
|
||||||
|
style: context.textTheme.titleLarge
|
||||||
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (quote != null) ...[
|
||||||
|
Text(
|
||||||
|
quote!.text,
|
||||||
|
style: quote!.style ??
|
||||||
|
context.textTheme.bodyMedium
|
||||||
|
?.copyWith(fontStyle: FontStyle.italic),
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
quote!.gradient,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
const Gap(15),
|
||||||
|
rightQuote ??
|
||||||
|
Align(
|
||||||
|
alignment: Alignment.bottomRight,
|
||||||
|
child: GradientText(
|
||||||
|
'”',
|
||||||
|
gradient: gradient,
|
||||||
|
style: context.textTheme.titleLarge
|
||||||
|
?.copyWith(fontWeight: FontWeight.bold),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
if (avatar != null) ...[
|
||||||
|
avatar!,
|
||||||
|
const Gap(25),
|
||||||
|
],
|
||||||
|
Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
if (name != null) ...[
|
||||||
|
Text(
|
||||||
|
name!.text,
|
||||||
|
style: name!.style ?? context.textTheme.titleMedium,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
name!.gradient,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
if (subtitle != null) ...[
|
||||||
|
const Gap(5),
|
||||||
|
Text(
|
||||||
|
subtitle!.text,
|
||||||
|
style: subtitle!.style ?? context.textTheme.titleMedium,
|
||||||
|
).toGradient(gradient),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,88 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'quote_card.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// ComponentCopyWithGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class $QuoteCardCWProxyImpl implements $QuoteCardComponentCWProxy {
|
||||||
|
const $QuoteCardCWProxyImpl(this._value);
|
||||||
|
final QuoteCard _value;
|
||||||
|
@override
|
||||||
|
QuoteCard avatar(Widget? avatar) => this(avatar: avatar);
|
||||||
|
@override
|
||||||
|
QuoteCard name(TextWrapper? name) => this(name: name);
|
||||||
|
@override
|
||||||
|
QuoteCard subtitle(TextWrapper? subtitle) => this(subtitle: subtitle);
|
||||||
|
@override
|
||||||
|
QuoteCard gradient(Gradient? gradient) => this(gradient: gradient);
|
||||||
|
@override
|
||||||
|
QuoteCard quote(TextWrapper? quote) => this(quote: quote);
|
||||||
|
@override
|
||||||
|
QuoteCard leftQuote(Widget? leftQuote) => this(leftQuote: leftQuote);
|
||||||
|
@override
|
||||||
|
QuoteCard rightQuote(Widget? rightQuote) => this(rightQuote: rightQuote);
|
||||||
|
@override
|
||||||
|
QuoteCard radius(double? radius) => this(radius: radius);
|
||||||
|
@override
|
||||||
|
QuoteCard padding(double? padding) => this(padding: padding);
|
||||||
|
@override
|
||||||
|
QuoteCard borderColors(List<Color>? borderColors) =>
|
||||||
|
this(borderColors: borderColors);
|
||||||
|
@override
|
||||||
|
QuoteCard backgroundColor(Color? backgroundColor) =>
|
||||||
|
this(backgroundColor: backgroundColor);
|
||||||
|
@override
|
||||||
|
QuoteCard minSize(Size? minSize) => this(minSize: minSize);
|
||||||
|
@override
|
||||||
|
QuoteCard maxSize(Size? maxSize) => this(maxSize: maxSize);
|
||||||
|
@override
|
||||||
|
QuoteCard shadow(BoxShadow? shadow) => this(shadow: shadow);
|
||||||
|
@override
|
||||||
|
QuoteCard background(Widget? background) => this(background: background);
|
||||||
|
@override
|
||||||
|
QuoteCard key(Key? key) => this(key: key);
|
||||||
|
@override
|
||||||
|
QuoteCard call({
|
||||||
|
Widget? avatar,
|
||||||
|
TextWrapper? name,
|
||||||
|
TextWrapper? subtitle,
|
||||||
|
Gradient? gradient,
|
||||||
|
TextWrapper? quote,
|
||||||
|
Widget? leftQuote,
|
||||||
|
Widget? rightQuote,
|
||||||
|
double? radius,
|
||||||
|
double? padding,
|
||||||
|
List<Color>? borderColors,
|
||||||
|
Color? backgroundColor,
|
||||||
|
Size? minSize,
|
||||||
|
Size? maxSize,
|
||||||
|
BoxShadow? shadow,
|
||||||
|
Widget? background,
|
||||||
|
Key? key,
|
||||||
|
}) =>
|
||||||
|
QuoteCard(
|
||||||
|
avatar: avatar ?? _value.avatar,
|
||||||
|
name: name ?? _value.name,
|
||||||
|
subtitle: subtitle ?? _value.subtitle,
|
||||||
|
gradient: gradient ?? _value.gradient,
|
||||||
|
quote: quote ?? _value.quote,
|
||||||
|
leftQuote: leftQuote ?? _value.leftQuote,
|
||||||
|
rightQuote: rightQuote ?? _value.rightQuote,
|
||||||
|
radius: radius ?? _value.radius,
|
||||||
|
padding: padding ?? _value.padding,
|
||||||
|
borderColors: borderColors ?? _value.borderColors,
|
||||||
|
backgroundColor: backgroundColor ?? _value.backgroundColor,
|
||||||
|
minSize: minSize ?? _value.minSize,
|
||||||
|
maxSize: maxSize ?? _value.maxSize,
|
||||||
|
shadow: shadow ?? _value.shadow,
|
||||||
|
background: background ?? _value.background,
|
||||||
|
key: key ?? _value.key,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin $QuoteCardCWMixin on Component {
|
||||||
|
$QuoteCardComponentCWProxy get copyWith =>
|
||||||
|
$QuoteCardCWProxyImpl(this as QuoteCard);
|
||||||
|
}
|
@ -0,0 +1,85 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_component_copy_with_extension/component_copy_with_extension.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_header.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/skill_card/widgets/skill_card_skills.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/cards/widgets/card_wrapper.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/helpers/helpers.dart';
|
||||||
|
part 'skill_card.g.dart';
|
||||||
|
|
||||||
|
@ComponentCopyWithExtension()
|
||||||
|
class SkillCard extends SkillCardComponent with $SkillCardCWMixin {
|
||||||
|
const SkillCard({
|
||||||
|
super.icon,
|
||||||
|
super.gradient,
|
||||||
|
super.title,
|
||||||
|
super.description,
|
||||||
|
super.skills,
|
||||||
|
super.leadingIcon,
|
||||||
|
super.radius,
|
||||||
|
super.padding,
|
||||||
|
super.borderColors,
|
||||||
|
super.backgroundColor,
|
||||||
|
super.minSize,
|
||||||
|
super.maxSize = const Size(330, double.infinity),
|
||||||
|
super.shadow,
|
||||||
|
super.background,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => CardWrapper(
|
||||||
|
background: background,
|
||||||
|
padding: padding,
|
||||||
|
backgroundColor: backgroundColor,
|
||||||
|
borderColors: borderColors,
|
||||||
|
shadow: shadow,
|
||||||
|
maxSize: maxSize,
|
||||||
|
minSize: minSize,
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
SkillCardHeader(
|
||||||
|
icon: icon,
|
||||||
|
title: title,
|
||||||
|
gradient: gradient,
|
||||||
|
),
|
||||||
|
const Gap(25),
|
||||||
|
if (description != null) ...[
|
||||||
|
Text(
|
||||||
|
description!.text,
|
||||||
|
style: description!.style ?? context.textTheme.bodyMedium,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(description!.gradient),
|
||||||
|
),
|
||||||
|
const Gap(25),
|
||||||
|
],
|
||||||
|
if (skills != null)
|
||||||
|
SkillCardSkills(
|
||||||
|
gradient: gradient,
|
||||||
|
skills: skills,
|
||||||
|
leadingIcon: leadingIcon,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,86 @@
|
|||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'skill_card.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// ComponentCopyWithGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
class $SkillCardCWProxyImpl implements $SkillCardComponentCWProxy {
|
||||||
|
const $SkillCardCWProxyImpl(this._value);
|
||||||
|
final SkillCard _value;
|
||||||
|
@override
|
||||||
|
SkillCard icon(IconData? icon) => this(icon: icon);
|
||||||
|
@override
|
||||||
|
SkillCard gradient(List<Color>? gradient) => this(gradient: gradient);
|
||||||
|
@override
|
||||||
|
SkillCard title(TextWrapper? title) => this(title: title);
|
||||||
|
@override
|
||||||
|
SkillCard description(TextWrapper? description) =>
|
||||||
|
this(description: description);
|
||||||
|
@override
|
||||||
|
SkillCard skills(List<TextWrapper>? skills) => this(skills: skills);
|
||||||
|
@override
|
||||||
|
SkillCard leadingIcon(IconData? leadingIcon) =>
|
||||||
|
this(leadingIcon: leadingIcon);
|
||||||
|
@override
|
||||||
|
SkillCard radius(double? radius) => this(radius: radius);
|
||||||
|
@override
|
||||||
|
SkillCard padding(double? padding) => this(padding: padding);
|
||||||
|
@override
|
||||||
|
SkillCard borderColors(List<Color>? borderColors) =>
|
||||||
|
this(borderColors: borderColors);
|
||||||
|
@override
|
||||||
|
SkillCard backgroundColor(Color? backgroundColor) =>
|
||||||
|
this(backgroundColor: backgroundColor);
|
||||||
|
@override
|
||||||
|
SkillCard minSize(Size? minSize) => this(minSize: minSize);
|
||||||
|
@override
|
||||||
|
SkillCard maxSize(Size? maxSize) => this(maxSize: maxSize);
|
||||||
|
@override
|
||||||
|
SkillCard shadow(BoxShadow? shadow) => this(shadow: shadow);
|
||||||
|
@override
|
||||||
|
SkillCard background(Widget? background) => this(background: background);
|
||||||
|
@override
|
||||||
|
SkillCard key(Key? key) => this(key: key);
|
||||||
|
@override
|
||||||
|
SkillCard call({
|
||||||
|
IconData? icon,
|
||||||
|
List<Color>? gradient,
|
||||||
|
TextWrapper? title,
|
||||||
|
TextWrapper? description,
|
||||||
|
List<TextWrapper>? skills,
|
||||||
|
IconData? leadingIcon,
|
||||||
|
double? radius,
|
||||||
|
double? padding,
|
||||||
|
List<Color>? borderColors,
|
||||||
|
Color? backgroundColor,
|
||||||
|
Size? minSize,
|
||||||
|
Size? maxSize,
|
||||||
|
BoxShadow? shadow,
|
||||||
|
Widget? background,
|
||||||
|
Key? key,
|
||||||
|
}) =>
|
||||||
|
SkillCard(
|
||||||
|
icon: icon ?? _value.icon,
|
||||||
|
gradient: gradient ?? _value.gradient,
|
||||||
|
title: title ?? _value.title,
|
||||||
|
description: description ?? _value.description,
|
||||||
|
skills: skills ?? _value.skills,
|
||||||
|
leadingIcon: leadingIcon ?? _value.leadingIcon,
|
||||||
|
radius: radius ?? _value.radius,
|
||||||
|
padding: padding ?? _value.padding,
|
||||||
|
borderColors: borderColors ?? _value.borderColors,
|
||||||
|
backgroundColor: backgroundColor ?? _value.backgroundColor,
|
||||||
|
minSize: minSize ?? _value.minSize,
|
||||||
|
maxSize: maxSize ?? _value.maxSize,
|
||||||
|
shadow: shadow ?? _value.shadow,
|
||||||
|
background: background ?? _value.background,
|
||||||
|
key: key ?? _value.key,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin $SkillCardCWMixin on Component {
|
||||||
|
$SkillCardComponentCWProxy get copyWith =>
|
||||||
|
$SkillCardCWProxyImpl(this as SkillCard);
|
||||||
|
}
|
@ -0,0 +1,65 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/extensions/extensions.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart';
|
||||||
|
|
||||||
|
class SkillCardHeader extends StatelessWidget {
|
||||||
|
const SkillCardHeader({super.key, this.icon, this.title, this.gradient});
|
||||||
|
|
||||||
|
final IconData? icon;
|
||||||
|
final TextWrapper? title;
|
||||||
|
final List<Color>? gradient;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
children: [
|
||||||
|
if (icon != null) ...[
|
||||||
|
if (gradient != null)
|
||||||
|
GradientIcon(
|
||||||
|
icon,
|
||||||
|
size: 60,
|
||||||
|
gradient: LinearGradient(colors: gradient!),
|
||||||
|
)
|
||||||
|
else
|
||||||
|
Icon(
|
||||||
|
icon,
|
||||||
|
size: 60,
|
||||||
|
),
|
||||||
|
const Gap(25),
|
||||||
|
Column(
|
||||||
|
children: [
|
||||||
|
if (title != null) ...[
|
||||||
|
Text(
|
||||||
|
title!.text,
|
||||||
|
style: title!.style ?? context.textTheme.titleLarge,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(
|
||||||
|
title!.gradient,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
)
|
||||||
|
],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,62 @@
|
|||||||
|
// Copyright (C) 2023 WYATT GROUP
|
||||||
|
// Please see the AUTHORS file for details.
|
||||||
|
//
|
||||||
|
// This program is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// any later version.
|
||||||
|
//
|
||||||
|
// This program is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:gap/gap.dart';
|
||||||
|
import 'package:wyatt_ui_components/wyatt_wyatt_ui_components.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_icon.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/components/gradients/gradient_text.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/extensions/theme_extensions.dart';
|
||||||
|
import 'package:wyatt_ui_kit/src/core/helpers/linear_gradient_helper.dart';
|
||||||
|
|
||||||
|
class SkillCardSkills extends StatelessWidget {
|
||||||
|
const SkillCardSkills({
|
||||||
|
super.key,
|
||||||
|
this.skills,
|
||||||
|
this.leadingIcon,
|
||||||
|
this.gradient,
|
||||||
|
});
|
||||||
|
|
||||||
|
final List<TextWrapper>? skills;
|
||||||
|
final IconData? leadingIcon;
|
||||||
|
final List<Color>? gradient;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) => Column(
|
||||||
|
children: skills!
|
||||||
|
.map(
|
||||||
|
(e) => Row(
|
||||||
|
children: [
|
||||||
|
Icon(
|
||||||
|
leadingIcon ?? Icons.check,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(gradient),
|
||||||
|
),
|
||||||
|
const Gap(10),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
e.text,
|
||||||
|
style: e.style ?? context.textTheme.bodyMedium,
|
||||||
|
).toGradient(
|
||||||
|
LinearGradientHelper.fromNullableColors(e.gradient),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user