Skip to content

Commit

Permalink
Improve design a bit
Browse files Browse the repository at this point in the history
  • Loading branch information
SleepySquash committed Jun 21, 2024
1 parent 6da3384 commit 6e07769
Show file tree
Hide file tree
Showing 14 changed files with 783 additions and 202 deletions.
3 changes: 3 additions & 0 deletions assets/l10n/en-US.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -1265,3 +1265,6 @@ label_order_payment = Order payment
label_order_payment_desc =
Order
payment
btn_regulations = Regulations
btn_transactions = Transactions
label_confirmation = Confirmation
3 changes: 3 additions & 0 deletions assets/l10n/ru-RU.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -1313,3 +1313,6 @@ label_order_payment = Заказать выплату
label_order_payment_desc =
Заказать
выплату
btn_regulations = Регламент
btn_transactions = Транзакции
label_confirmation = Подтверждение
79 changes: 71 additions & 8 deletions lib/domain/service/balance.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,71 @@ import '/domain/model/user.dart';

class BalanceService extends DisposableInterface {
final RxDouble balance = RxDouble(0);
final RxDouble hold = RxDouble(0);

final RxList<Transaction> transactions = RxList(
[
Transaction(amount: 1424, status: TransactionStatus.hold),
Transaction(
amount: -100,
status: TransactionStatus.canceled,
// reason: 'Suspicious activity',
description: 'Withdraw to: PayPal\n'
'Cancel reason: suspicious activity',
at: DateTime.now()
.subtract(const Duration(hours: 1))
.copyWith(minute: 01),
),
Transaction(
amount: 1424,
status: TransactionStatus.hold,
by: UserNum('1234123412341234').toString(),
description: 'Донат 4214',
at: DateTime.now()
.subtract(const Duration(hours: 2))
.copyWith(minute: 48),
),
Transaction(
amount: 100,
description: UserNum('1234123412341234').toString(),
by: UserNum('1234123412341234').toString(),
description: 'Платное сообщение 555',
at: DateTime.now()
.subtract(const Duration(hours: 5))
.copyWith(minute: 14),
),
Transaction(
amount: -97,
description: 'PayPal',
at: DateTime.now()
.subtract(const Duration(hours: 5))
.copyWith(hour: 12, minute: 48),
),
Transaction(
amount: 2,
by: 'Друг 15',
at: DateTime.now()
.subtract(const Duration(days: 1))
.copyWith(hour: 23, minute: 26),
),
Transaction(
amount: -5,
by: 'Вася Пупкин',
at: DateTime.now()
.subtract(const Duration(days: 7))
.copyWith(hour: 3, minute: 9),
),
Transaction(
amount: -5,
description: 'Withdraw to: PayPal',
at: DateTime.now()
.subtract(const Duration(days: 7))
.copyWith(hour: 3, minute: 9),
),
Transaction(
amount: 100,
by: UserNum('1234 1234 1234 1234').toString(),
description: 'Трансляция 12341234',
at: DateTime(2023),
),
Transaction(amount: -97, description: 'PayPal'),
Transaction(amount: 2, by: 'Друг 15'),
Transaction(amount: -5, by: 'Вася Пупкин'),
Transaction(amount: 100, description: 'Initial'),
],
);

Expand Down Expand Up @@ -140,7 +193,15 @@ class BalanceService extends DisposableInterface {

void _recalculate() {
balance.value = transactions.fold(0, (a, b) {
if (b.status == TransactionStatus.hold) {
if (b.status != TransactionStatus.done) {
return a;
}

return a + b.amount;
});

hold.value = transactions.fold(0, (a, b) {
if (b.status != TransactionStatus.hold) {
return a;
}

Expand All @@ -154,6 +215,7 @@ class Transaction {
String? id,
this.description,
this.by,
this.reason,
this.amount = 0,
DateTime? at,
this.status = TransactionStatus.done,
Expand All @@ -163,14 +225,15 @@ class Transaction {
final String id;
final String? description;
final String? by;
final String? reason;
final double amount;
final DateTime at;
final TransactionStatus status;
}

enum TransactionStatus {
hold,
failed,
canceled,
done,
}

Expand Down
21 changes: 21 additions & 0 deletions lib/l10n/l10n.dart
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ extension L10nDateExtension on DateTime {
/// Returns this [DateTime] formatted in `Hm` format.
String get hm => DateFormat.Hm().format(this);

/// Returns this [DateTime] formatted in `Hms` format.
String get hms => DateFormat.Hms().format(this);

/// Returns this [DateTime] formatted in `yMd` format.
String get yMd => DateFormat.yMd().format(this);

Expand Down Expand Up @@ -285,3 +288,21 @@ extension L10nDurationExtension on Duration {
return result;
}
}

extension SpacesNumExtension on num {
String get withSpaces {
String value = toString();

int len = value.length;
int dlen = 3;

while (len > dlen) {
value =
'${value.substring(0, len - dlen)} ${value.substring(len - dlen, value.length)}';
dlen += 4;
len += 1;
}

return value;
}
}
9 changes: 8 additions & 1 deletion lib/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class Routes {
static const nowhere = '/nowhere';
static const withdraw = '/withdraw';
static const erase = '/erase';
static const transactions = '/transactions';

// E2E tests related page, should not be used in non-test environment.
static const restart = '/restart';
Expand Down Expand Up @@ -391,6 +392,7 @@ class RouterState extends ChangeNotifier {
routes.last == Routes.transaction ||
routes.last == Routes.faq ||
routes.last == Routes.terms ||
routes.last == Routes.transactions ||
routes.last == '/dev' ||
routes.last == Routes.vacancy) {
routes.last = Routes.home;
Expand Down Expand Up @@ -482,7 +484,8 @@ class AppRouteInformationParser

if (route.startsWith(Routes.work) ||
route == Routes.faq ||
route == Routes.withdraw) {
route == Routes.withdraw ||
route.startsWith(Routes.transactions)) {
tab = HomeTab.work;
} else if (route.startsWith(Routes.balance)) {
tab = HomeTab.balance;
Expand Down Expand Up @@ -994,6 +997,7 @@ class AppRouterDelegate extends RouterDelegate<RouteConfiguration>
_state.route.startsWith(Routes.transaction) ||
_state.route.startsWith(Routes.style) ||
_state.route.startsWith(Routes.vacancy) ||
_state.route.startsWith(Routes.transactions) ||
_state.route == Routes.me ||
_state.route == Routes.home) {
_updateTabTitle();
Expand Down Expand Up @@ -1177,6 +1181,9 @@ extension RouteLinks on RouterState {
void faq({bool push = false}) => (push ? this.push : go)(Routes.faq);

void terms() => go(Routes.terms);

void transactions({bool push = false}) =>
(push ? this.push : go)(Routes.transactions);
}

/// Extension adding helper methods to an [AppLifecycleState].
Expand Down
18 changes: 2 additions & 16 deletions lib/ui/page/home/page/balance/view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,15 @@ import 'dart:math';
import 'package:collection/collection.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:messenger/l10n/l10n.dart';
import 'package:messenger/routes.dart';
import 'package:messenger/themes.dart';
import 'package:messenger/ui/page/home/page/chat/widget/back_button.dart';
import 'package:messenger/ui/page/home/page/chat/widget/donate.dart';
import 'package:messenger/ui/page/home/page/user/widget/money_field.dart';
import 'package:messenger/ui/page/home/widget/app_bar.dart';
import 'package:messenger/ui/page/home/widget/avatar.dart';
import 'package:messenger/ui/page/home/widget/block.dart';
import 'package:messenger/ui/page/login/widget/primary_button.dart';
import 'package:messenger/ui/widget/animated_button.dart';
import 'package:messenger/ui/widget/selected_dot.dart';
import 'package:messenger/ui/widget/svg/svg.dart';
import 'package:messenger/ui/widget/text_field.dart';
import 'package:messenger/ui/widget/widget_button.dart';
Expand Down Expand Up @@ -154,7 +150,7 @@ class BalanceProviderView extends StatelessWidget {
const EdgeInsets.symmetric(vertical: 1.5),
child: PickVariantButton(
amount: n,
price: '\$${(n / 100).round().withSpaces()}',
price: '\$${(n / 100).round().withSpaces}',
bonus: 0,
onPressed: () => c.nominal[e]!.value = i,
selected: selected,
Expand Down Expand Up @@ -222,7 +218,7 @@ class BalanceProviderView extends StatelessWidget {
const EdgeInsets.symmetric(vertical: 1.5),
child: PickVariantButton(
amount: n,
price: '\$${(n / 100).round().withSpaces()}',
price: '\$${(n / 100).round().withSpaces}',
bonus: 0,
onPressed: () => c.nominal[e]!.value = i,
selected: selected,
Expand Down Expand Up @@ -788,13 +784,3 @@ class BalanceProviderView extends StatelessWidget {
);
}
}

extension on num {
String withSpaces([bool zeros = false]) {
if (!zeros) {
return NumberFormat('#,##0').format(this);
}

return NumberFormat('#,##0.00').format(this);
}
}
32 changes: 32 additions & 0 deletions lib/ui/page/home/page/transactions/controller.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';

import '/domain/model/my_user.dart';
import '/domain/service/balance.dart';
import '/domain/service/my_user.dart';
import '/ui/widget/text_field.dart';

class TransactionsController extends GetxController {
TransactionsController(this._balanceService, this._myUserService);

final RxBool expanded = RxBool(false);

final RxBool includeHold = RxBool(true);
final RxBool includeCompleted = RxBool(true);

final GlobalKey filterKey = GlobalKey();

final TextFieldState search = TextFieldState();

final RxnString query = RxnString();

final RxSet<String> ids = RxSet();

final BalanceService _balanceService;
final MyUserService _myUserService;

RxList<Transaction> get transactions => _balanceService.transactions;
Rx<MyUser?> get myUser => _myUserService.myUser;

RxDouble get hold => _balanceService.hold;
}
Loading

0 comments on commit 6e07769

Please sign in to comment.