ui_kit/feat/add-other-components #133
@ -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