Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .fvm/fvm_config.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
{
"flutterSdkVersion": "3.16.9",
"flavors": {}
"flutterSdkVersion": "3.16.9"
}
25 changes: 25 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "miro",
"request": "launch",
"type": "dart"
},
{
"name": "miro (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "miro (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
}
]
}
6 changes: 1 addition & 5 deletions assets/network_list_config.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,7 @@
"network_list": [
{
"name": "Public Node 1",
"address": "http://148.251.69.56:11000"
},
{
"name": "Public Node 2",
"address": "http://128.140.42.2:11000"
"address": "http://3.123.154.245:11000"
}
]
}
10 changes: 10 additions & 0 deletions lib/blocs/pages/blocks/blocks_page/blocks_page_cubit.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

part 'blocks_page_state.dart';

class BlocksPageCubit extends Cubit<BlocksPageState> {
BlocksPageCubit() : super(const BlocksPageState(isAgeFormatBool: true));

void switchDateFormat() => emit(BlocksPageState(isAgeFormatBool: !state.isAgeFormatBool));
}
10 changes: 10 additions & 0 deletions lib/blocs/pages/blocks/blocks_page/blocks_page_state.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
part of 'blocks_page_cubit.dart';

class BlocksPageState extends Equatable {
final bool isAgeFormatBool;

const BlocksPageState({required this.isAgeFormatBool});

@override
List<Object?> get props => <Object?>[isAgeFormatBool];
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:equatable/equatable.dart';
import 'package:flutter_bloc/flutter_bloc.dart';

part 'transactions_page_state.dart';

class TransactionsPageCubit extends Cubit<TransactionsPageState> {
TransactionsPageCubit() : super(const TransactionsPageState(isAgeFormatBool: true));

void switchDateFormat() => emit(TransactionsPageState(isAgeFormatBool: !state.isAgeFormatBool));
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
part of 'transactions_page_cubit.dart';

class TransactionsPageState extends Equatable {
final bool isAgeFormatBool;

const TransactionsPageState({required this.isAgeFormatBool});

@override
List<Object?> get props => <Object?>[isAgeFormatBool];
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import 'package:miro/blocs/pages/transactions/tx_broadcast/a_tx_broadcast_state.dart';
import 'package:miro/shared/models/transactions/broadcast_resp_model.dart';
import 'package:miro/infra/dto/api_kira/broadcast/response/broadcast_resp.dart';

class TxBroadcastCompletedState extends ATxBroadcastState {
final BroadcastRespModel broadcastRespModel;
final BroadcastResp broadcastResp;

const TxBroadcastCompletedState({
required this.broadcastRespModel,
required this.broadcastResp,
});

@override
List<Object?> get props => <Object>[broadcastRespModel];
List<Object?> get props => <Object>[broadcastResp];
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ import 'package:miro/blocs/pages/transactions/tx_broadcast/states/tx_broadcast_c
import 'package:miro/blocs/pages/transactions/tx_broadcast/states/tx_broadcast_error_state.dart';
import 'package:miro/blocs/pages/transactions/tx_broadcast/states/tx_broadcast_loading_state.dart';
import 'package:miro/config/locator.dart';
import 'package:miro/infra/dto/api_kira/broadcast/response/broadcast_resp.dart';
import 'package:miro/infra/exceptions/dio_connect_exception.dart';
import 'package:miro/infra/exceptions/dio_parse_exception.dart';
import 'package:miro/infra/exceptions/tx_broadcast_exception.dart';
import 'package:miro/infra/services/api_kira/broadcast_service.dart';
import 'package:miro/shared/models/network/error_explorer_model.dart';
import 'package:miro/shared/models/transactions/broadcast_resp_model.dart';
import 'package:miro/shared/models/transactions/signed_transaction_model.dart';

class TxBroadcastCubit extends Cubit<ATxBroadcastState> {
Expand All @@ -21,8 +21,8 @@ class TxBroadcastCubit extends Cubit<ATxBroadcastState> {
Future<void> broadcast(SignedTxModel signedTxModel) async {
emit(TxBroadcastLoadingState());
try {
BroadcastRespModel broadcastRespModel = await broadcastService.broadcastTx(signedTxModel);
emit(TxBroadcastCompletedState(broadcastRespModel: broadcastRespModel));
BroadcastResp broadcastRespModel = await broadcastService.broadcastTx(signedTxModel);
emit(TxBroadcastCompletedState(broadcastResp: broadcastRespModel));
} on DioConnectException catch (dioConnectException) {
ErrorExplorerModel errorExplorerModel = ErrorExplorerModel.fromDioConnectException(dioConnectException);
emit(TxBroadcastErrorState(errorExplorerModel: errorExplorerModel));
Expand All @@ -33,8 +33,8 @@ class TxBroadcastCubit extends Cubit<ATxBroadcastState> {
RequestOptions requestOptions = txBroadcastException.response.requestOptions;

ErrorExplorerModel errorExplorerModel = ErrorExplorerModel(
code: txBroadcastException.broadcastErrorLogModel.code,
message: txBroadcastException.broadcastErrorLogModel.message,
code: txBroadcastException.broadcastResp?.code.toString() ?? 'Unknown',
message: txBroadcastException.broadcastResp?.log ?? 'Transaction broadcast failed',
uri: requestOptions.uri,
method: requestOptions.method,
request: requestOptions.data,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ class TxFormBuilderCubit extends Cubit<ATxFormBuilderState> {
Future<TxRemoteInfoModel> _downloadTxRemoteInfo() async {
assert(_authCubit.isSignedIn, 'Wallet public address must be provided to use this method');
try {
TxRemoteInfoModel txRemoteInfoModel = await _queryAccountService.getTxRemoteInfo(_authCubit.state!.address.bech32Address);
TxRemoteInfoModel txRemoteInfoModel =
await _queryAccountService.getTxRemoteInfo(_authCubit.state!.address.bech32Address);
return txRemoteInfoModel;
} on DioException catch (e) {
throw Exception('Cannot download TxRemoteInfoModel: ${e.message}');
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ class TxProcessCubit<T extends AMsgFormModel> extends Cubit<ATxProcessState> {
String msgTypeName = InterxMsgTypes.getName(txMsgType);

try {
bool txRemoteInfoAvailableBool = await _queryAccountService.isAccountRegistered(authCubit.state!.address.bech32Address);
bool txRemoteInfoAvailableBool =
await _queryAccountService.isAccountRegistered(authCubit.state!.address.bech32Address);
if (txRemoteInfoAvailableBool == false) {
emit(const TxProcessErrorState(accountErrorBool: true));
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@ class ListLoadedState<T> extends AListState {
final DateTime blockDateTime;
final DateTime cacheExpirationDateTime;

const ListLoadedState({
ListLoadedState({
required this.listItems,
required this.lastPage,
required this.blockDateTime,
required this.cacheExpirationDateTime,
});
DateTime? cacheExpirationDateTime,
}) : // TODO: #29
cacheExpirationDateTime = cacheExpirationDateTime ?? DateTime.now().add(const Duration(seconds: 30));

@override
List<Object?> get props => <Object?>[listItems, lastPage, blockDateTime, cacheExpirationDateTime];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ class InfinityListBloc<T extends AListItem> extends AListBloc<T> {
listItems: visibleListItems,
lastPage: currentPageData.lastPageBool,
blockDateTime: currentPageData.blockDateTime!,
cacheExpirationDateTime: currentPageData.cacheExpirationDateTime!,
cacheExpirationDateTime: currentPageData.cacheExpirationDateTime,
));
showLoadingOverlay.value = false;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ class PaginatedListBloc<T extends AListItem> extends AListBloc<T> {
add(const ListNextPageEvent());
}

void _mapPreviousPageEventToState(PaginatedListPreviousPageEvent paginatedListPreviousPageEvent, Emitter<AListState> emit) {
void _mapPreviousPageEventToState(
PaginatedListPreviousPageEvent paginatedListPreviousPageEvent, Emitter<AListState> emit) {
if (showLoadingOverlay.value) {
return;
}
Expand All @@ -66,7 +67,6 @@ class PaginatedListBloc<T extends AListItem> extends AListBloc<T> {
listItems: currentPageData.listItems,
lastPageBool: currentPageData.lastPageBool,
blockDateTime: currentPageData.blockDateTime!,
cacheExpirationDateTime: currentPageData.cacheExpirationDateTime!,
));

showLoadingOverlay.value = false;
Expand All @@ -91,7 +91,7 @@ class PaginatedListBloc<T extends AListItem> extends AListBloc<T> {
listItems: currentPageItems,
lastPageBool: currentPageItems.length < singlePageSize,
blockDateTime: downloadedPagesCache.values.first.blockDateTime,
cacheExpirationDateTime: downloadedPagesCache.values.first.cacheExpirationDateTime,
cacheExpirationDateTime: downloadedPagesCache.values.first.cacheExpirationDateTime,
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import 'package:miro/blocs/widgets/kira/kira_list/abstract_list/states/list_load
class PaginatedListLoadedState<T> extends ListLoadedState<T> {
final int pageIndex;

const PaginatedListLoadedState({
PaginatedListLoadedState({
required this.pageIndex,
required bool lastPageBool,
required List<T> listItems,
required DateTime blockDateTime,
required DateTime cacheExpirationDateTime,
DateTime? cacheExpirationDateTime,
}) : super(
lastPage: lastPageBool,
listItems: listItems,
Expand Down
21 changes: 13 additions & 8 deletions lib/config/app_config.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:miro/config/version.dart';
import 'package:miro/shared/controllers/browser/rpc_browser_url_controller.dart';
import 'package:miro/shared/models/network/data/connection_status_type.dart';
import 'package:miro/shared/models/network/status/network_unknown_model.dart';
Expand All @@ -10,7 +11,7 @@ class AppConfig {
final Duration defaultApiCacheMaxAge;
final Duration outdatedBlockDuration;
final Duration loadingPageTimerDuration;
final List<String> supportedInterxVersions;
final List<Version> supportedInterxVersions;
final RpcBrowserUrlController rpcBrowserUrlController;

final int _defaultRefreshIntervalSeconds;
Expand All @@ -35,7 +36,7 @@ class AppConfig {
defaultApiCacheMaxAge: const Duration(seconds: 60),
outdatedBlockDuration: const Duration(minutes: 5),
loadingPageTimerDuration: const Duration(seconds: 4),
supportedInterxVersions: <String>['v0.4.46', 'v0.4.48'],
supportedInterxVersions: const <Version>[Version(major: 0, minor: 23)],
rpcBrowserUrlController: RpcBrowserUrlController(),
defaultRefreshIntervalSeconds: 60,
);
Expand All @@ -54,8 +55,9 @@ class AppConfig {
}

NetworkUnknownModel findNetworkModelInConfig(NetworkUnknownModel networkUnknownModel) {
List<NetworkUnknownModel> matchingNetworkUnknownModels =
networkList.where((NetworkUnknownModel e) => NetworkUtils.compareUrisByUrn(e.uri, networkUnknownModel.uri)).toList();
List<NetworkUnknownModel> matchingNetworkUnknownModels = networkList
.where((NetworkUnknownModel e) => NetworkUtils.compareUrisByUrn(e.uri, networkUnknownModel.uri))
.toList();

if (matchingNetworkUnknownModels.isEmpty) {
return networkUnknownModel;
Expand All @@ -72,7 +74,9 @@ class AppConfig {
}

bool isInterxVersionOutdated(String version) {
bool isVersionSupported = supportedInterxVersions.contains(version);
bool isVersionSupported = supportedInterxVersions.any(
(Version e) => e.compareByMinor(Version.parse(version)) == 0,
);
if (isVersionSupported) {
return false;
} else {
Expand Down Expand Up @@ -105,7 +109,8 @@ class AppConfig {
try {
_networkList.add(NetworkUnknownModel.fromJson(networkListItem as Map<String, dynamic>));
} catch (_) {
AppLogger().log(message: 'CONFIG: Cannot parse network list item from network_list_config.json: $networkListItem');
AppLogger()
.log(message: 'CONFIG: Cannot parse network list item from network_list_config.json: $networkListItem');
}
}
}
Expand All @@ -127,8 +132,8 @@ class AppConfig {
return null;
}
Uri uri = NetworkUtils.parseUrlToInterxUri(networkAddress);
NetworkUnknownModel urlNetworkUnknownModel =
NetworkUnknownModel(uri: uri, connectionStatusType: ConnectionStatusType.disconnected, lastRefreshDateTime: DateTime.now());
NetworkUnknownModel urlNetworkUnknownModel = NetworkUnknownModel(
uri: uri, connectionStatusType: ConnectionStatusType.disconnected, lastRefreshDateTime: DateTime.now());
urlNetworkUnknownModel = findNetworkModelInConfig(urlNetworkUnknownModel);
return urlNetworkUnknownModel;
}
Expand Down
2 changes: 2 additions & 0 deletions lib/config/theme/design_colors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ class DesignColors {

static const Color avatar = Color(0xFF303430);

static const Color hyperlink = Color(0xFF4264F2);

static const Gradient primaryButtonGradient = LinearGradient(
begin: Alignment.topRight,
end: Alignment.bottomLeft,
Expand Down
6 changes: 6 additions & 0 deletions lib/config/theme/theme_config.dart
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,18 @@ class ThemeConfig {
fontSize: 22,
letterSpacing: 0.5,
),
titleLarge: textTheme.titleLarge!.copyWith(
fontWeight: FontWeight.w500,
fontSize: 18,
letterSpacing: 0.5,
),
titleMedium: textTheme.titleMedium!.copyWith(
fontWeight: FontWeight.w500,
fontSize: 16,
letterSpacing: 0.5,
),
titleSmall: textTheme.titleSmall!.copyWith(
// TODO(Mykyta): w500 ??
fontWeight: FontWeight.w600,
fontSize: 14,
letterSpacing: 0.5,
Expand Down
Loading
Loading