Skip to content
Snippets Groups Projects
Commit 067e9eb9 authored by vjrj's avatar vjrj
Browse files

More work with cards and themes

parent 65d66118
No related branches found
No related tags found
No related merge requests found
...@@ -224,5 +224,6 @@ ...@@ -224,5 +224,6 @@
"qr_scanner_flash_off": "FLASH OFF", "qr_scanner_flash_off": "FLASH OFF",
"qr_scanner_title": "Scan QR Code", "qr_scanner_title": "Scan QR Code",
"display_amounts_du": "Display amounts in DU", "display_amounts_du": "Display amounts in DU",
"wallet_already_imported": "Wallet already imported" "wallet_already_imported": "Wallet already imported",
"card_theme_select": "Select a theme for your card"
} }
...@@ -227,5 +227,6 @@ ...@@ -227,5 +227,6 @@
"qr_scanner_flash_off": "FLASH OFF", "qr_scanner_flash_off": "FLASH OFF",
"qr_scanner_title": "Escanea un QR Code", "qr_scanner_title": "Escanea un QR Code",
"display_amounts_du": "Mostrar importes en DU", "display_amounts_du": "Mostrar importes en DU",
"wallet_already_imported": "Monedero ya importado" "wallet_already_imported": "Monedero ya importado",
"card_theme_select": "Selecciona un tema para tu tarjeta"
} }
import 'package:flutter/material.dart';
import '../../ui/widgets/first_screen/credit_card_theme_item.dart';
import 'cesium_card.dart';
import 'credit_card_themes.dart';
class CardThemeSelector extends StatelessWidget {
const CardThemeSelector({super.key, required this.card});
final CesiumCard card;
@override
Widget build(BuildContext context) {
return GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 1.58,
),
itemCount: CreditCardThemes.themes.length,
itemBuilder: (BuildContext context, int index) {
final CreditCardTheme themeData = CreditCardThemes.themes[index];
return GestureDetector(
onTap: () {},
child: Center(
child: CreditCardThemeItem(themeIndex: index),
),
);
},
);
}
}
import 'dart:ui'; import 'package:flutter/material.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
import 'is_json_serializable.dart'; import 'is_json_serializable.dart';
...@@ -7,46 +6,53 @@ import 'is_json_serializable.dart'; ...@@ -7,46 +6,53 @@ import 'is_json_serializable.dart';
part 'credit_card_themes.g.dart'; part 'credit_card_themes.g.dart';
class CreditCardThemes { class CreditCardThemes {
static const CreditCardTheme theme1 = CreditCardTheme( static const CreditCardTheme theme1 =
Color(0xFF1A237E), CreditCardTheme(Color(0xFF05112B), Color(0xFF085476));
Color(0xFFFFBA00),
);
static const CreditCardTheme theme2 = CreditCardTheme( static const CreditCardTheme theme2 = CreditCardTheme(
Color(0xFFEC1C24), Colors.blueGrey,
Color(0xFFFF5F00), Colors.pink,
); );
static const CreditCardTheme theme3 = CreditCardTheme( static const CreditCardTheme theme3 = CreditCardTheme(
Color(0xFF0077B5),
Color(0xFF00A9E0), Color(0xFF00A9E0),
Color(0xFF0077B5),
); );
static const CreditCardTheme theme4 = CreditCardTheme( static const CreditCardTheme theme4 = CreditCardTheme(
Color(0xFF8C1D40),
Color(0xFFFDB813), Color(0xFFFDB813),
Color(0xFF8C1D40),
); );
static const CreditCardTheme theme5 = CreditCardTheme( static const CreditCardTheme theme5 = CreditCardTheme(
Color(0xFF117AC9), Colors.blueGrey,
Color(0xFFEE7203), Colors.deepPurple,
);
static const CreditCardTheme theme6 = CreditCardTheme(
Color(0xFF00529B),
Color(0xFF00AEEF),
); );
static const CreditCardTheme theme6 =
CreditCardTheme(Colors.lightGreen, Colors.green);
static const CreditCardTheme theme7 = CreditCardTheme( static const CreditCardTheme theme7 = CreditCardTheme(
Color(0xFFE41422), Colors.black54,
Color(0xFF1C5D8D), Colors.black,
); );
static const CreditCardTheme theme8 = CreditCardTheme( static const CreditCardTheme theme8 = CreditCardTheme(
Colors.blueGrey,
Color(0xFF004678), Color(0xFF004678),
Color(0xFFB5C8E5),
); );
static const CreditCardTheme theme9 = CreditCardTheme( static const CreditCardTheme theme9 = CreditCardTheme(
Color(0xFFCE002D), Color(0xFFCE002D),
Color(0xFF673F1E), Color(0xFF673F1E),
); );
static const CreditCardTheme theme10 = CreditCardTheme( static const CreditCardTheme theme10 =
Color(0xFFDD5600), CreditCardTheme(Color(0xFF598040), Color(0xFF225500));
Color(0xFFC6A700),
); static const List<CreditCardTheme> themes = <CreditCardTheme>[
CreditCardThemes.theme1,
CreditCardThemes.theme2,
CreditCardThemes.theme3,
CreditCardThemes.theme4,
CreditCardThemes.theme5,
CreditCardThemes.theme6,
CreditCardThemes.theme7,
CreditCardThemes.theme8,
CreditCardThemes.theme9,
CreditCardThemes.theme10,
];
} }
@JsonSerializable() @JsonSerializable()
......
...@@ -10,7 +10,6 @@ import 'package:flutter/material.dart'; ...@@ -10,7 +10,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart'; import 'package:flutter_displaymode/flutter_displaymode.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:ginkgo/ui/pay_helper.dart';
import 'package:hive_flutter/hive_flutter.dart'; import 'package:hive_flutter/hive_flutter.dart';
import 'package:hydrated_bloc/hydrated_bloc.dart'; import 'package:hydrated_bloc/hydrated_bloc.dart';
import 'package:introduction_screen/introduction_screen.dart'; import 'package:introduction_screen/introduction_screen.dart';
...@@ -44,6 +43,7 @@ import 'shared_prefs.dart'; ...@@ -44,6 +43,7 @@ import 'shared_prefs.dart';
import 'ui/contacts_cache.dart'; import 'ui/contacts_cache.dart';
import 'ui/logger.dart'; import 'ui/logger.dart';
import 'ui/notification_controller.dart'; import 'ui/notification_controller.dart';
import 'ui/pay_helper.dart';
import 'ui/screens/skeleton_screen.dart'; import 'ui/screens/skeleton_screen.dart';
import 'ui/ui_helpers.dart'; import 'ui/ui_helpers.dart';
import 'ui/widgets/connectivity_widget_wrapper_wrapper.dart'; import 'ui/widgets/connectivity_widget_wrapper_wrapper.dart';
......
...@@ -547,3 +547,5 @@ bool isDark(BuildContext context) => ...@@ -547,3 +547,5 @@ bool isDark(BuildContext context) =>
bool get isIOS => !kIsWeb && Platform.isIOS; bool get isIOS => !kIsWeb && Platform.isIOS;
const String userNameSuffix = ' ❥'; const String userNameSuffix = ' ❥';
const double cardAspectRatio = 1.58;
...@@ -28,7 +28,7 @@ class CreditCard extends StatelessWidget { ...@@ -28,7 +28,7 @@ class CreditCard extends StatelessWidget {
borderRadius: BorderRadius.circular(cardRadius), borderRadius: BorderRadius.circular(cardRadius),
), ),
child: AspectRatio( child: AspectRatio(
aspectRatio: 1.58, // Credit cart aspect ratio aspectRatio: cardAspectRatio, // Credit cart aspect ratio
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(cardRadius), borderRadius: BorderRadius.circular(cardRadius),
......
import 'dart:math';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../data/models/cesium_card.dart'; import '../../../data/models/cesium_card.dart';
import '../../../data/models/credit_card_theme_selector.dart';
import '../../../data/models/credit_card_themes.dart'; import '../../../data/models/credit_card_themes.dart';
import '../../ui_helpers.dart'; import '../../ui_helpers.dart';
import 'card_name_editable.dart'; import 'card_name_editable.dart';
import 'card_text_style.dart'; import 'card_text_style.dart';
class CreditCardMini extends StatelessWidget { class CreditCardMini extends StatefulWidget {
const CreditCardMini({super.key, required this.card}); const CreditCardMini({super.key, required this.card});
final CesiumCard card; final CesiumCard card;
@override
State<CreditCardMini> createState() => _CreditCardMiniState();
}
class _CreditCardMiniState extends State<CreditCardMini> {
bool _showSettingsIcon = false;
void _showThemeSelector(BuildContext context) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: Text(tr('card_theme_select')),
content: SizedBox(
width: double.maxFinite,
child: CardThemeSelector(card: widget.card)),
);
},
);
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
const double cardRadius = 10.0; const double cardRadius = 10.0;
final bool bigDevice = bigScreen(context); final bool bigDevice = bigScreen(context);
final double cardInternalElPadding = bigDevice ? 5 : 6.0; final double cardInternalElPadding = bigDevice ? 5 : 6.0;
final int themeIndex = Random().nextInt(10);
return Padding( return Padding(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
child: Card( child: Card(
...@@ -24,7 +50,7 @@ class CreditCardMini extends StatelessWidget { ...@@ -24,7 +50,7 @@ class CreditCardMini extends StatelessWidget {
borderRadius: BorderRadius.circular(cardRadius), borderRadius: BorderRadius.circular(cardRadius),
), ),
child: AspectRatio( child: AspectRatio(
aspectRatio: 1.58, // Credit cart aspect ratio aspectRatio: cardAspectRatio, // Credit cart aspect ratio
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
borderRadius: BorderRadius.circular(cardRadius), borderRadius: BorderRadius.circular(cardRadius),
...@@ -39,8 +65,8 @@ class CreditCardMini extends StatelessWidget { ...@@ -39,8 +65,8 @@ class CreditCardMini extends StatelessWidget {
begin: Alignment.bottomLeft, begin: Alignment.bottomLeft,
end: Alignment.topRight, end: Alignment.topRight,
colors: <Color>[ colors: <Color>[
CreditCardThemes.theme3.primaryColor, CreditCardThemes.themes[themeIndex].primaryColor,
CreditCardThemes.theme3.secondaryColor, CreditCardThemes.themes[themeIndex].secondaryColor,
// card.theme.primaryColor, // card.theme.primaryColor,
// card.theme.secondaryColor, // card.theme.secondaryColor,
], ],
...@@ -49,10 +75,24 @@ class CreditCardMini extends StatelessWidget { ...@@ -49,10 +75,24 @@ class CreditCardMini extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
child: Stack(children: <Widget>[ child: Stack(children: <Widget>[
Positioned(
top: -10,
right: -10,
child: Visibility(
visible: true,
child: FloatingActionButton(
backgroundColor: Colors.transparent,
elevation: 0,
onPressed: () => _showThemeSelector(context),
child: const Icon(Icons.settings,
color: Colors.white),
),
),
),
Padding( Padding(
padding: const EdgeInsets.fromLTRB(120, 10, 0, 0), padding: const EdgeInsets.fromLTRB(120, 10, 0, 0),
child: Opacity( child: Opacity(
opacity: 0.1, opacity: 0.2,
child: Image.asset('assets/img/gbrevedot_alt.png', child: Image.asset('assets/img/gbrevedot_alt.png',
width: 100, height: 100), width: 100, height: 100),
)), )),
...@@ -60,7 +100,7 @@ class CreditCardMini extends StatelessWidget { ...@@ -60,7 +100,7 @@ class CreditCardMini extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
// mainAxisAlignment: MainAxisAlignment.start, // mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[ children: <Widget>[
if (card.name.isNotEmpty) if (widget.card.name.isNotEmpty)
Padding( Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
horizontal: cardInternalElPadding, horizontal: cardInternalElPadding,
...@@ -68,9 +108,8 @@ class CreditCardMini extends StatelessWidget { ...@@ -68,9 +108,8 @@ class CreditCardMini extends StatelessWidget {
child: Row(children: <Widget>[ child: Row(children: <Widget>[
Expanded( Expanded(
child: CardNameText( child: CardNameText(
currentText: card.name, currentText: widget.card.name,
onTap: () {}, onTap: () {})),
)),
])), ])),
Padding( Padding(
padding: EdgeInsets.symmetric( padding: EdgeInsets.symmetric(
...@@ -80,11 +119,11 @@ class CreditCardMini extends StatelessWidget { ...@@ -80,11 +119,11 @@ class CreditCardMini extends StatelessWidget {
GestureDetector( GestureDetector(
onTap: () => showQrDialog( onTap: () => showQrDialog(
context: context, context: context,
publicKey: card.pubKey), publicKey: widget.card.pubKey),
child: FittedBox( child: FittedBox(
fit: BoxFit.scaleDown, fit: BoxFit.scaleDown,
child: Text( child: Text(
'${card.pubKey.substring(0, 4)} ${card.pubKey.substring(4, 8)}', '$themeIndex ${widget.card.pubKey.substring(0, 4)} ${widget.card.pubKey.substring(4, 8)}',
style: cardTextStyle(context, style: cardTextStyle(context,
fontSize: 16), fontSize: 16),
))), ))),
......
import 'package:flutter/material.dart';
import '../../../data/models/credit_card_themes.dart';
import '../../ui_helpers.dart';
import 'card_text_style.dart';
class CreditCardThemeItem extends StatelessWidget {
const CreditCardThemeItem({super.key, required this.themeIndex});
final int themeIndex;
@override
Widget build(BuildContext context) {
const double cardRadius = 10.0;
return Padding(
padding: const EdgeInsets.all(1),
child: Card(
elevation: 4.0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(cardRadius),
),
child: AspectRatio(
aspectRatio: cardAspectRatio, // Credit cart aspect ratio
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(cardRadius),
boxShadow: <BoxShadow>[
BoxShadow(
color: Colors.grey[400]!,
blurRadius: 3.0,
spreadRadius: 1.0,
)
],
gradient: LinearGradient(
begin: Alignment.bottomLeft,
end: Alignment.topRight,
colors: <Color>[
CreditCardThemes.themes[themeIndex].primaryColor,
CreditCardThemes.themes[themeIndex].secondaryColor,
// card.theme.primaryColor,
// card.theme.secondaryColor,
],
),
),
child: Padding(
padding: const EdgeInsets.all(10),
child: Stack(children: <Widget>[
if (inDevelopment)
Text('${themeIndex + 1}',
style: cardTextStyle(context, fontSize: 14)),
Padding(
padding: const EdgeInsets.fromLTRB(40, 0, 0, 0),
child: Opacity(
opacity: 0.2,
child: Image.asset('assets/img/gbrevedot_alt.png',
width: 100, height: 100),
)),
]),
)))));
}
}
...@@ -113,7 +113,7 @@ class _G1PayAmountFieldState extends State<G1PayAmountField> { ...@@ -113,7 +113,7 @@ class _G1PayAmountFieldState extends State<G1PayAmountField> {
child: ToggleSwitch( child: ToggleSwitch(
minWidth: 40.0, minWidth: 40.0,
radiusStyle: true, radiusStyle: true,
initialLabelIndex: 0, // initialLabelIndex: 0,
cornerRadius: 20.0, cornerRadius: 20.0,
activeFgColor: Colors.black, activeFgColor: Colors.black,
inactiveBgColor: Colors.grey[400], inactiveBgColor: Colors.grey[400],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment