Line data Source code
1 : // Copyright 2023 The terCAD team. All rights reserved.
2 : // Use of this source code is governed by a CC BY-NC-ND 4.0 license that can be found in the LICENSE file.
3 :
4 : import 'package:app_finance/_classes/herald/app_design.dart';
5 : import 'package:app_finance/_classes/herald/app_locale.dart';
6 : import 'package:app_finance/_configs/custom_text_theme.dart';
7 : import 'package:app_finance/_configs/theme_helper.dart';
8 : import 'package:app_finance/_ext/build_context_ext.dart';
9 : import 'package:app_finance/design/wrapper/text_wrapper.dart';
10 : import 'package:flutter/material.dart';
11 :
12 : typedef MemberData = ({
13 : String name,
14 : List<String> badge,
15 : });
16 :
17 : class MemberWidget extends StatelessWidget {
18 0 : static final colors = {
19 0 : AppLocale.labels.coAuthor: Colors.amber.withOpacity(0.2),
20 0 : AppLocale.labels.coDeveloper: Colors.indigo.withOpacity(0.2),
21 0 : AppLocale.labels.coTranslator: Colors.pink.withOpacity(0.2),
22 0 : AppLocale.labels.coPromoter: Colors.purple.withOpacity(0.2),
23 0 : AppLocale.labels.coConsult: Colors.cyan.withOpacity(0.2),
24 : };
25 :
26 : final MemberData member;
27 :
28 0 : const MemberWidget(this.member, {super.key});
29 :
30 0 : @override
31 : Widget build(BuildContext context) {
32 0 : final indent = ThemeHelper.getIndent();
33 0 : final border = BorderSide(width: 1, color: context.colorScheme.primary.withOpacity(0.1));
34 0 : return Container(
35 0 : padding: EdgeInsets.all(indent),
36 0 : margin: EdgeInsets.only(top: indent, right: indent),
37 0 : decoration: BoxDecoration(
38 0 : border: Border(top: border, bottom: border, left: border, right: border),
39 0 : color: context.colorScheme.surface,
40 0 : boxShadow: [
41 0 : BoxShadow(
42 0 : color: context.colorScheme.secondary.withOpacity(0.08),
43 : spreadRadius: 1,
44 : blurRadius: 2,
45 : offset: const Offset(2, 2),
46 : ),
47 : ],
48 : ),
49 0 : child: Column(
50 0 : mainAxisAlignment: AppDesign.getAlignment<MainAxisAlignment>(),
51 0 : crossAxisAlignment: AppDesign.getAlignment(),
52 0 : children: [
53 0 : TextWrapper(member.name, style: context.textTheme.headlineMedium),
54 0 : Expanded(
55 0 : child: ListView.builder(
56 : scrollDirection: Axis.horizontal,
57 0 : itemCount: member.badge.length,
58 0 : itemBuilder: (BuildContext context, int i) => Container(
59 0 : margin: EdgeInsets.only(right: indent),
60 0 : padding: EdgeInsets.symmetric(horizontal: indent / 2),
61 0 : decoration: BoxDecoration(
62 0 : border: Border(top: border, bottom: border, left: border, right: border),
63 0 : borderRadius: BorderRadius.all(Radius.circular(indent)),
64 0 : color: colors[member.badge[i]],
65 : ),
66 0 : child: TextWrapper(member.badge[i], style: context.textTheme.numberSmall),
67 : ),
68 : ),
69 : ),
70 : ],
71 : ),
72 : );
73 : }
74 : }
|