Skip to content
Snippets Groups Projects
credit_card.dart 5.82 KiB
Newer Older
vjrj's avatar
vjrj committed
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
vjrj's avatar
vjrj committed
import 'package:flutter_dotenv/flutter_dotenv.dart';
vjrj's avatar
vjrj committed
import 'package:flutter_svg/svg.dart';
import 'package:qr_flutter/qr_flutter.dart';
vjrj's avatar
vjrj committed

vjrj's avatar
vjrj committed
import '../../../shared_prefs.dart';
vjrj's avatar
vjrj committed
import '../../ui_helpers.dart';

class CreditCard extends StatelessWidget {
vjrj's avatar
vjrj committed
  CreditCard({super.key});

  final String publicKey = SharedPreferencesHelper().getPubKey();
vjrj's avatar
vjrj committed
  final TextStyle cardTextStyle = TextStyle(
    fontFamily: 'SourceCodePro',
    // decoration: TextDecoration.underline,
    color: Colors.white,
    fontSize: 22.0,
    fontWeight: FontWeight.bold,
    shadows: <Shadow>[
      Shadow(
        blurRadius: 1,
        color: Colors.black.withOpacity(0.7),
        offset: const Offset(0, 2),
      ),
      Shadow(
        blurRadius: 1,
        color: Colors.white.withOpacity(0.5),
        offset: const Offset(0, -1),
      ),
    ],
  );
vjrj's avatar
vjrj committed

  @override
  Widget build(BuildContext context) {
vjrj's avatar
vjrj committed
    const double cardRadius = 10.0;
    const double cardPadding = 26.0;

vjrj's avatar
vjrj committed
    final String pubKey = SharedPreferencesHelper().getPubKey();
vjrj's avatar
vjrj committed
    return Card(
vjrj's avatar
vjrj committed
        elevation: 8.0,
        shape: RoundedRectangleBorder(
          borderRadius: BorderRadius.circular(cardRadius),
vjrj's avatar
vjrj committed
        ),
vjrj's avatar
vjrj committed
        child: AspectRatio(
            aspectRatio: 1.58, // Credit cart aspect ratio
            child: Container(
              decoration: BoxDecoration(
                borderRadius: BorderRadius.circular(cardRadius),
                boxShadow: <BoxShadow>[
                  BoxShadow(
                    color: Colors.grey[400]!,
                    blurRadius: 10.0,
                    spreadRadius: 1.0,
                  )
                ],
vjrj's avatar
vjrj committed
                gradient: LinearGradient(
vjrj's avatar
vjrj committed
                  begin: Alignment.bottomLeft,
                  end: Alignment.topRight,
                  colors: <Color>[
vjrj's avatar
vjrj committed
                    Color(int.parse("${dotenv.env['CARD_COLOR_LEFT']}")),
                    Color(int.parse("${dotenv.env['CARD_COLOR_RIGHT']}")),
vjrj's avatar
vjrj committed
                  ],
vjrj's avatar
vjrj committed
                ),
              ),
vjrj's avatar
vjrj committed
              child: Stack(children: <Widget>[
                Padding(
                    padding: const EdgeInsets.fromLTRB(160, 10, 0, 0),
                    child: Opacity(
                        opacity: 0.1,
                        child: Image.asset('assets/img/gbrevedot_alt.png'))),
                Column(crossAxisAlignment: CrossAxisAlignment.start, children: <
                    Widget>[
                  Padding(
                    padding: const EdgeInsets.all(cardPadding),
                    child: Text(
vjrj's avatar
vjrj committed
                      dotenv.env['CARD_COLOR_TEXT'] ?? tr('g1_wallet'),
vjrj's avatar
vjrj committed
                      style: const TextStyle(
                        color: Colors.white,
                        fontSize: 24.0,
                        fontWeight: FontWeight.bold,
                      ),
vjrj's avatar
vjrj committed
                    ),
                  ),
vjrj's avatar
vjrj committed
                  const SizedBox(height: 8.0),
                  Padding(
                      padding:
                          const EdgeInsets.symmetric(horizontal: cardPadding),
                      child: GestureDetector(
                          onTap: () {
                            _showQrDialog(context);
                          },
                          child: SvgPicture.asset(
                            'assets/img/chip.svg',
                          ))),
                  const SizedBox(height: 8.0),
vjrj's avatar
vjrj committed
                  Padding(
                      padding:
                          const EdgeInsets.symmetric(horizontal: cardPadding),
                      child: Row(children: <Widget>[
                        GestureDetector(
                            onTap: () =>
vjrj's avatar
vjrj committed
                                showTooltip(context, '', tr('keys_tooltip')),
vjrj's avatar
vjrj committed
                            child: Text('**** **** ', style: cardTextStyle)),
                        GestureDetector(
                            onTap: () => copyPublicKeyToClipboard(context),
                            child: Text(
                              '${pubKey.substring(0, 4)} ${pubKey.substring(4, 8)}',
                              style: cardTextStyle,
                            ))
                      ])),
vjrj's avatar
vjrj committed
                  const SizedBox(height: 12.0),
                  Padding(
                    padding:
                        const EdgeInsets.symmetric(horizontal: cardPadding),
                    child: GestureDetector(
                      onTap: () =>
vjrj's avatar
vjrj committed
                          showTooltip(context, '', tr('card_validity_tooltip')),
vjrj's avatar
vjrj committed
                      child: Text(
vjrj's avatar
vjrj committed
                        tr('card_validity'),
vjrj's avatar
vjrj committed
                        style: TextStyle(
                          decoration: TextDecoration.underline,
                          color: Colors.white.withOpacity(0.8),
                          fontSize: 14.0,
                        ),
                      ),
                    ),
                  )
                ]),
              ]),
            )));
  }

  void _showQrDialog(BuildContext context) {
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return Dialog(
vjrj's avatar
vjrj committed
            child: SizedBox(
                height: MediaQuery.of(context).size.width,
                child: Padding(
                    padding: const EdgeInsets.all(16.0),
                    child: GestureDetector(
                      onTap: () => copyPublicKeyToClipboard(context),
                      child: Column(children: <Widget>[
                        Text(tr('show_qr_to_client')),
                        QrImage(
                          data: publicKey,
                          size: MediaQuery.of(context).size.width * 0.8,
                          gapless: false,
                          foregroundColor: Colors.orange,
                        ),
                      ]),
                    ))));
vjrj's avatar
vjrj committed
    );
  }
}