From 81e799c514e7a2c2faa259a3c7080ecae7f70568 Mon Sep 17 00:00:00 2001 From: OmarHatem28 Date: Tue, 5 Jul 2022 17:34:16 +0200 Subject: [PATCH] Add Active Services page UI Add Phone service entity --- .../phone_number_service.dart | 23 ++++ .../service_plan.dart | 0 lib/router.dart | 12 ++ lib/routes.dart | 1 + .../cake_phone/active_services_page.dart | 127 ++++++++++++++++++ .../cake_phone/cake_phone_auth_page.dart | 2 +- .../phone_number_product_page.dart | 73 ++++++---- .../cake_phone/cake_phone_products_page.dart | 2 +- .../cake_phone_verification_page.dart | 8 +- .../cake_phone/cake_phone_welcome_page.dart | 2 +- .../cake_phone/widgets/add_options_tile.dart | 43 ++++++ .../cake_phone/widgets/info_text_column.dart | 47 +++++++ .../widgets/subscribed_phone_numbers.dart | 105 +++++++++++++++ lib/src/screens/dashboard/wallet_menu.dart | 2 +- .../cake_phone/phone_plan_view_model.dart | 2 +- res/values/strings_en.arb | 9 +- 16 files changed, 422 insertions(+), 36 deletions(-) create mode 100644 lib/entities/cake_phone_entities/phone_number_service.dart rename lib/entities/{ => cake_phone_entities}/service_plan.dart (100%) create mode 100644 lib/src/screens/cake_phone/active_services_page.dart create mode 100644 lib/src/screens/cake_phone/widgets/add_options_tile.dart create mode 100644 lib/src/screens/cake_phone/widgets/info_text_column.dart create mode 100644 lib/src/screens/cake_phone/widgets/subscribed_phone_numbers.dart diff --git a/lib/entities/cake_phone_entities/phone_number_service.dart b/lib/entities/cake_phone_entities/phone_number_service.dart new file mode 100644 index 000000000..ba1cfa13a --- /dev/null +++ b/lib/entities/cake_phone_entities/phone_number_service.dart @@ -0,0 +1,23 @@ +class PhoneNumberService { + const PhoneNumberService({ + this.id, + this.phoneNumber, + this.planId, + this.usedUntil, + this.messageReceiveEnabled, + this.autoRenew, + }); + + final String id; + final String phoneNumber; + final String planId; + final DateTime usedUntil; + final bool messageReceiveEnabled; + final bool autoRenew; + + @override + bool operator ==(Object other) => other is PhoneNumberService && other.id == id; + + @override + int get hashCode => id.hashCode; +} diff --git a/lib/entities/service_plan.dart b/lib/entities/cake_phone_entities/service_plan.dart similarity index 100% rename from lib/entities/service_plan.dart rename to lib/entities/cake_phone_entities/service_plan.dart diff --git a/lib/router.dart b/lib/router.dart index 7d3b95eeb..51b56e545 100644 --- a/lib/router.dart +++ b/lib/router.dart @@ -69,6 +69,7 @@ import 'package:cake_wallet/src/screens/cake_phone/cake_phone_welcome_page.dart' import 'package:cake_wallet/src/screens/cake_phone/cake_phone_verification_page.dart'; import 'package:cake_wallet/src/screens/cake_phone/cake_phone_products_page.dart'; import 'package:cake_wallet/src/screens/cake_phone/cake_phone_products/phone_number_product_page.dart'; +import 'package:cake_wallet/src/screens/cake_phone/active_services_page.dart'; RouteSettings currentRouteSettings; @@ -409,6 +410,7 @@ Route createRoute(RouteSettings settings) { case Routes.cakePhoneWelcome: return MaterialPageRoute( + settings: RouteSettings(name: Routes.cakePhoneWelcome), builder: (_) => CakePhoneWelcomePage(), ); @@ -416,24 +418,34 @@ Route createRoute(RouteSettings settings) { final isLogin = settings.arguments as bool ?? false; return MaterialPageRoute( + settings: RouteSettings(name: Routes.cakePhoneAuth), builder: (_) => CakePhoneAuthPage(isLogin: isLogin), ); case Routes.cakePhoneVerification: return MaterialPageRoute( + settings: RouteSettings(name: Routes.cakePhoneVerification), builder: (_) => CakePhoneVerificationPage(), ); case Routes.cakePhoneProducts: return MaterialPageRoute( + settings: RouteSettings(name: Routes.cakePhoneProducts), builder: (_) => CakePhoneProductsPage(), ); case Routes.phoneNumberProduct: return MaterialPageRoute( + settings: RouteSettings(name: Routes.phoneNumberProduct), builder: (_) => PhoneNumberProductPage(getIt.get()), ); + case Routes.cakePhoneActiveServices: + return MaterialPageRoute( + settings: RouteSettings(name: Routes.cakePhoneActiveServices), + builder: (_) => ActiveServicesPage(), + ); + default: return MaterialPageRoute( builder: (_) => Scaffold( diff --git a/lib/routes.dart b/lib/routes.dart index a0324080f..382820898 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -65,4 +65,5 @@ class Routes { static const cakePhoneVerification = '/cake_phone_verification'; static const cakePhoneProducts = '/cake_phone_products'; static const phoneNumberProduct = '/phone_number_product'; + static const cakePhoneActiveServices = '/cake_phone_active_services'; } \ No newline at end of file diff --git a/lib/src/screens/cake_phone/active_services_page.dart b/lib/src/screens/cake_phone/active_services_page.dart new file mode 100644 index 000000000..c6b258c85 --- /dev/null +++ b/lib/src/screens/cake_phone/active_services_page.dart @@ -0,0 +1,127 @@ +import 'package:cake_wallet/routes.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/src/screens/base_page.dart'; +import 'package:cake_wallet/src/screens/cake_phone/widgets/add_options_tile.dart'; +import 'package:cake_wallet/src/screens/cake_phone/widgets/info_text_column.dart'; +import 'package:cake_wallet/src/screens/cake_phone/widgets/subscribed_phone_numbers.dart'; + +class ActiveServicesPage extends BasePage { + ActiveServicesPage(); + + @override + Widget body(BuildContext context) => ActiveServicesBody(); + + @override + Widget middle(BuildContext context) { + return Text( + S.of(context).active_services, + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w700, + fontFamily: 'Lato', + color: titleColor ?? Theme.of(context).primaryTextTheme.title.color), + ); + } +} + +class ActiveServicesBody extends StatefulWidget { + ActiveServicesBody(); + + @override + ActiveServicesBodyState createState() => ActiveServicesBodyState(); +} + +class ActiveServicesBodyState extends State { + // TODO: remove const dummy variables + final int freeSMSCount = 50; + final int freeMBCount = 0; + final int serviceDaysLeft = 23; + final double accountBalance = 20.34; + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(horizontal: 24, vertical: 20), + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: double.infinity, + padding: EdgeInsets.symmetric(horizontal: 24, vertical: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(15)), + gradient: LinearGradient( + colors: [ + Theme.of(context).primaryTextTheme.subhead.color, + Theme.of(context).primaryTextTheme.subhead.decorationColor, + ], + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + ), + child: Text(S.of(context).new_phone_number, + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w700, + )), + ), + const SizedBox(height: 8), + freeBalanceInfoRow(), + const SizedBox(height: 24), + AddOptionsTile( + leading: InfoTextColumn( + title: S.of(context).account_balance, + subtitle: "\$${accountBalance.toStringAsFixed(2)}", + isReversed: true, + ), + ), + const SizedBox(height: 64), + SubscribedPhoneNumbers(), + ], + ), + ), + ); + } + + Widget freeBalanceInfoRow() { + return Row( + children: [ + Expanded( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(15)), + color: Theme.of(context).primaryTextTheme.display3.decorationColor, + ), + child: InfoTextColumn( + title: S.of(context).free_sms_balance, + subtitle: "${freeSMSCount} SMS", + padding: const EdgeInsets.only(top: 12, bottom: 4), + isReversed: true, + ), + ), + ), + const SizedBox(width: 9), + Expanded( + child: Container( + padding: EdgeInsets.symmetric(horizontal: 24, vertical: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(15)), + color: Theme.of(context).primaryTextTheme.display3.decorationColor, + ), + child: InfoTextColumn( + title: S.of(context).free_data_balance, + subtitle: "${freeMBCount} MB", + padding: const EdgeInsets.only(top: 12, bottom: 4), + isReversed: true, + ), + ), + ), + ], + ); + } +} diff --git a/lib/src/screens/cake_phone/cake_phone_auth_page.dart b/lib/src/screens/cake_phone/cake_phone_auth_page.dart index 099312679..3946bcf8d 100644 --- a/lib/src/screens/cake_phone/cake_phone_auth_page.dart +++ b/lib/src/screens/cake_phone/cake_phone_auth_page.dart @@ -21,7 +21,7 @@ class CakePhoneAuthPage extends BasePage { isLogin ? S.of(context).login : S.of(context).signup, style: TextStyle( fontSize: 22, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, fontFamily: 'Lato', color: Theme.of(context).primaryTextTheme.title.color), ); diff --git a/lib/src/screens/cake_phone/cake_phone_products/phone_number_product_page.dart b/lib/src/screens/cake_phone/cake_phone_products/phone_number_product_page.dart index a19571524..82a49e042 100644 --- a/lib/src/screens/cake_phone/cake_phone_products/phone_number_product_page.dart +++ b/lib/src/screens/cake_phone/cake_phone_products/phone_number_product_page.dart @@ -2,6 +2,7 @@ import 'package:cake_wallet/buy/buy_amount.dart'; import 'package:cake_wallet/buy/moonpay/moonpay_buy_provider.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/entities/fiat_currency.dart'; +import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/store/app_store.dart'; @@ -14,7 +15,7 @@ import 'package:flutter/cupertino.dart'; import 'package:country_pickers/country_pickers.dart'; import 'package:country_pickers/countries.dart'; import 'package:cake_wallet/generated/i18n.dart'; -import 'package:cake_wallet/entities/service_plan.dart'; +import 'package:cake_wallet/entities/cake_phone_entities/service_plan.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; @@ -34,7 +35,7 @@ class PhoneNumberProductPage extends BasePage { S.of(context).phone_number, style: TextStyle( fontSize: 22, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, fontFamily: 'Lato', color: Theme.of(context).primaryTextTheme.title.color), ); @@ -336,7 +337,7 @@ class PhoneNumberProductBodyState extends State { mainAxisSize: MainAxisSize.min, children: [ receiptRow(S.of(context).amount, amountText(phonePlanViewModel.totalPrice)), - receiptRow(S.of(context).cake_pay_balance, amountText(100)), + receiptRow("${S.of(context).cake_pay_balance}: ", amountText(100)), ], ), isDividerExists: true, @@ -344,6 +345,11 @@ class PhoneNumberProductBodyState extends State { leftButtonText: S.of(context).cancel, actionRightButton: () { Navigator.of(dialogContext).pop(); + Navigator.pushNamedAndRemoveUntil( + context, + Routes.cakePhoneActiveServices, + ModalRoute.withName(Routes.cakePhoneWelcome), + ); }, actionLeftButton: () => Navigator.of(dialogContext).pop()); }); @@ -452,7 +458,7 @@ class PhoneNumberProductBodyState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( - "$title:", + title, style: TextStyle( fontSize: 16, fontWeight: FontWeight.w500, @@ -478,31 +484,42 @@ class PhoneNumberProductBodyState extends State { Widget cryptoAmount(double totalPrice) { return FutureBuilder( - future: MoonPayBuyProvider(wallet: getIt.get().wallet) - .calculateAmount(totalPrice.toString(), FiatCurrency.usd.title), - builder: (context, AsyncSnapshot snapshot) { - double sourceAmount; - double destAmount; - double achAmount; - int minAmount; + future: MoonPayBuyProvider(wallet: getIt.get().wallet) + .calculateAmount(totalPrice.toString(), FiatCurrency.usd.title), + builder: (context, AsyncSnapshot snapshot) { + double sourceAmount; + double destAmount; - if (snapshot.hasData) { - sourceAmount = snapshot.data.sourceAmount; - destAmount = snapshot.data.destAmount; - minAmount = snapshot.data.minAmount; - achAmount = snapshot.data.achSourceAmount; - } else { - sourceAmount = 0.0; - destAmount = 0.0; - minAmount = 0; - } + if (snapshot.hasData) { + sourceAmount = snapshot.data.sourceAmount; + destAmount = snapshot.data.destAmount; + } else { + sourceAmount = 0.0; + destAmount = 0.0; + } - return Column( - children: [ - Text(sourceAmount.toString()), - Text(destAmount.toString()), - ], - ); - }); + return Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Text( + "${sourceAmount} ${getIt.get().wallet.currency.toString()}", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w700, + color: Theme.of(context).primaryTextTheme.title.color, + ), + ), + Text( + "${destAmount} ${FiatCurrency.usd.title}", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: Theme.of(context).accentTextTheme.subhead.color, + ), + ), + ], + ); + }, + ); } } diff --git a/lib/src/screens/cake_phone/cake_phone_products_page.dart b/lib/src/screens/cake_phone/cake_phone_products_page.dart index 8851ba640..3fc60e9ad 100644 --- a/lib/src/screens/cake_phone/cake_phone_products_page.dart +++ b/lib/src/screens/cake_phone/cake_phone_products_page.dart @@ -16,7 +16,7 @@ class CakePhoneProductsPage extends BasePage { S.of(context).get_phone_number, style: TextStyle( fontSize: 22, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, fontFamily: 'Lato', color: Theme.of(context).primaryTextTheme.title.color), ); diff --git a/lib/src/screens/cake_phone/cake_phone_verification_page.dart b/lib/src/screens/cake_phone/cake_phone_verification_page.dart index c20ee2589..c926145ff 100644 --- a/lib/src/screens/cake_phone/cake_phone_verification_page.dart +++ b/lib/src/screens/cake_phone/cake_phone_verification_page.dart @@ -21,7 +21,7 @@ class CakePhoneVerificationPage extends BasePage { S.of(context).email_verification, style: TextStyle( fontSize: 22, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, fontFamily: 'Lato', color: Theme.of(context).primaryTextTheme.title.color), ); @@ -123,7 +123,11 @@ class CakePhoneVerificationBodyState extends State { children: [ PrimaryButton( onPressed: () { - Navigator.pushNamed(context, Routes.cakePhoneProducts); + Navigator.pushNamedAndRemoveUntil( + context, + Routes.cakePhoneProducts, + ModalRoute.withName(Routes.cakePhoneWelcome), + ); }, text: S.of(context).continue_text, color: Theme.of(context).accentTextTheme.body2.color, diff --git a/lib/src/screens/cake_phone/cake_phone_welcome_page.dart b/lib/src/screens/cake_phone/cake_phone_welcome_page.dart index 0f32f15b6..8d22f974d 100644 --- a/lib/src/screens/cake_phone/cake_phone_welcome_page.dart +++ b/lib/src/screens/cake_phone/cake_phone_welcome_page.dart @@ -18,7 +18,7 @@ class CakePhoneWelcomePage extends BasePage { S.of(context).welcome_to_cake_phone, style: TextStyle( fontSize: 22, - fontWeight: FontWeight.w600, + fontWeight: FontWeight.w700, fontFamily: 'Lato', color: titleColor ?? Theme.of(context).primaryTextTheme.title.color), diff --git a/lib/src/screens/cake_phone/widgets/add_options_tile.dart b/lib/src/screens/cake_phone/widgets/add_options_tile.dart new file mode 100644 index 000000000..33924f87f --- /dev/null +++ b/lib/src/screens/cake_phone/widgets/add_options_tile.dart @@ -0,0 +1,43 @@ +import 'package:flutter/material.dart'; + +class AddOptionsTile extends StatelessWidget { + const AddOptionsTile({Key key, @required this.leading, this.onTap}) : super(key: key); + + final Widget leading; + final Function() onTap; + + @override + Widget build(BuildContext context) { + return GestureDetector( + onTap: onTap, + child: Container( + padding: const EdgeInsets.all(16), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(15)), + color: Theme.of(context).primaryTextTheme.display3.decorationColor, + ), + child: Row( + children: [ + Expanded( + child: leading, + ), + Container( + width: 2, + height: 48, + color: Theme.of(context).primaryTextTheme.title.color, + ), + const SizedBox(width: 16), + Container( + padding: const EdgeInsets.all(4), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Theme.of(context).primaryTextTheme.title.color, + ), + child: Icon(Icons.add, color: Colors.white, size: 15), + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/screens/cake_phone/widgets/info_text_column.dart b/lib/src/screens/cake_phone/widgets/info_text_column.dart new file mode 100644 index 000000000..a3f1662d2 --- /dev/null +++ b/lib/src/screens/cake_phone/widgets/info_text_column.dart @@ -0,0 +1,47 @@ +import 'package:flutter/material.dart'; + +class InfoTextColumn extends StatelessWidget { + const InfoTextColumn({ + Key key, + @required this.title, + @required this.subtitle, + this.isReversed = false, + this.padding, + }) : super(key: key); + + final String title; + final String subtitle; + final bool isReversed; + final EdgeInsets padding; + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + title, + style: isReversed ? subtitleTextStyle(context) : titleTextStyle(context), + ), + Padding( + padding: padding ?? const EdgeInsets.only(top: 4), + child: Text( + subtitle, + style: isReversed ? titleTextStyle(context) : subtitleTextStyle(context), + ), + ), + ], + ); + } + + TextStyle subtitleTextStyle(BuildContext context) => TextStyle( + fontSize: 12, + color: Theme.of(context).accentTextTheme.subhead.color, + ); + + TextStyle titleTextStyle(BuildContext context) => TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: Theme.of(context).primaryTextTheme.title.color, + ); +} diff --git a/lib/src/screens/cake_phone/widgets/subscribed_phone_numbers.dart b/lib/src/screens/cake_phone/widgets/subscribed_phone_numbers.dart new file mode 100644 index 000000000..b95f20536 --- /dev/null +++ b/lib/src/screens/cake_phone/widgets/subscribed_phone_numbers.dart @@ -0,0 +1,105 @@ +import 'package:flutter/material.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:cake_wallet/entities/cake_phone_entities/phone_number_service.dart'; +import 'package:cake_wallet/src/screens/cake_phone/widgets/add_options_tile.dart'; +import 'package:cake_wallet/src/screens/cake_phone/widgets/info_text_column.dart'; + +class SubscribedPhoneNumbers extends StatefulWidget { + const SubscribedPhoneNumbers({Key key}) : super(key: key); + + @override + _SubscribedPhoneNumbersState createState() => _SubscribedPhoneNumbersState(); +} + +class _SubscribedPhoneNumbersState extends State { + int selectedTab = 0; + final List subscribedPhoneNumbers = [ + PhoneNumberService(id: "1", phoneNumber: "+1 888-888-8888", usedUntil: DateTime.now().add(Duration(days: 24))), + PhoneNumberService(id: "2", phoneNumber: "+1 888-888-8888", usedUntil: DateTime.now().add(Duration(days: 26))), + PhoneNumberService(id: "3", phoneNumber: "+1 999-999-9999", usedUntil: DateTime.now().subtract(Duration(days: 24))), + PhoneNumberService(id: "4", phoneNumber: "+1 999-999-9999", usedUntil: DateTime.now().subtract(Duration(days: 26))), + ]; + + final List activePhoneNumbers = []; + final List expiredPhoneNumbers = []; + + @override + void initState() { + super.initState(); + + for (PhoneNumberService element in subscribedPhoneNumbers) { + if (element.usedUntil.isAfter(DateTime.now())) { + activePhoneNumbers.add(element); + } else { + expiredPhoneNumbers.add(element); + } + } + } + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(30)), + color: Theme.of(context).primaryTextTheme.display3.decorationColor, + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + tab(S.of(context).active, 0), + tab(S.of(context).expired, 1), + ], + ), + ), + const SizedBox(height: 16), + ...(selectedTab == 0 ? activePhoneNumbers : expiredPhoneNumbers).map( + (e) => Padding( + padding: const EdgeInsets.only(bottom: 8), + child: AddOptionsTile( + leading: InfoTextColumn( + title: e.phoneNumber, + subtitle: selectedTab == 0 + ? "${e.usedUntil.difference(DateTime.now()).inDays} ${S.of(context).days_of_service_remaining}" + : S.of(context).expired, + ), + ), + ), + ), + ], + ); + } + + Widget tab(String title, int tabIndex) { + final selected = selectedTab == tabIndex; + return GestureDetector( + onTap: () { + if (!selected) { + setState(() { + selectedTab = tabIndex; + }); + } + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 24, vertical: 8), + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(30)), + color: selected + ? Theme.of(context).accentTextTheme.body2.color + : Theme.of(context).primaryTextTheme.display3.decorationColor, + ), + child: Text( + title, + style: TextStyle( + fontSize: 16, + fontWeight: selected ? FontWeight.w700 : FontWeight.w500, + color: selected ? Colors.white : Theme.of(context).primaryTextTheme.title.color, + ), + ), + ), + ); + } +} diff --git a/lib/src/screens/dashboard/wallet_menu.dart b/lib/src/screens/dashboard/wallet_menu.dart index 556c87a6f..ca8d80b36 100644 --- a/lib/src/screens/dashboard/wallet_menu.dart +++ b/lib/src/screens/dashboard/wallet_menu.dart @@ -82,7 +82,7 @@ class WalletMenu { handler: () => Navigator.of(context).pushNamed(Routes.support)), // TODO: Move this to marketplace screen when ready WalletMenuItem( - title: S.current.settings_support, + title: "Temp Cake Phone", image: Image.asset('assets/images/question_mark.png', height: 16, width: 16, color: Palette.darkBlue), handler: () => Navigator.of(context).pushNamed(Routes.cakePhoneWelcome)), diff --git a/lib/view_model/cake_phone/phone_plan_view_model.dart b/lib/view_model/cake_phone/phone_plan_view_model.dart index f79f9203b..54161beae 100644 --- a/lib/view_model/cake_phone/phone_plan_view_model.dart +++ b/lib/view_model/cake_phone/phone_plan_view_model.dart @@ -1,4 +1,4 @@ -import 'package:cake_wallet/entities/service_plan.dart'; +import 'package:cake_wallet/entities/cake_phone_entities/service_plan.dart'; import 'package:country_pickers/countries.dart'; import 'package:country_pickers/country.dart'; import 'package:mobx/mobx.dart'; diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 57be3961a..2634c3c30 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -568,5 +568,12 @@ "phone_number_country": "Phone Number Country", "additional_sms_messages": "Additional SMS Messages", "confirm_payment": "Confirm payment", - "cake_pay_balance": "CakePay Balance" + "cake_pay_balance": "CakePay Balance", + "active_services": "Active Services", + "new_phone_number": "New Phone Number", + "free_sms_balance": "Free SMS Balance", + "free_data_balance": "Free Data Balance", + "account_balance": "Account Balance", + "days_of_service_remaining": "days of service remaining", + "active": "Active" }