Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .fvmrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
"flutter": "3.32.0"
"flutter": "stable"
}
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
- name: 🐦 Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.32.0
flutter-version: 3.35.3
channel: stable
cache: true

Expand Down
2 changes: 1 addition & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"drift"
],
"dart.lineLength": 100,
"dart.flutterSdkPath": ".fvm/versions/3.32.0",
"dart.flutterSdkPath": ".fvm/versions/stable",
"cmake.ignoreCMakeListsMissing": true,
"makefile.configureOnOpen": false
}
4 changes: 2 additions & 2 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ formatter:
trailing_commas: preserve

analyzer:
exclude:
exclude:
- "lib/src/core/localization/generated/**"
- "**/*.*.dart"
- "**/generated/**"

dart_code_metrics:
extends:
- package:sizzle_lints/dcm.yaml
- package:sizzle_lints/dcm.yaml
33 changes: 15 additions & 18 deletions app/lib/src/bloc/app_bloc_observer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,38 +12,35 @@ class AppBlocObserver extends BlocObserver {

@override
void onTransition(Bloc<Object?, Object?> bloc, Transition<Object?, Object?> transition) {
final logMessage =
StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln('Event: ${transition.event.runtimeType}')
..writeln(
'Transition: ${transition.currentState.runtimeType} => '
'${transition.nextState.runtimeType}',
)
..write('New State: ${transition.nextState?.toString().limit(100)}');
final logMessage = StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln('Event: ${transition.event.runtimeType}')
..writeln(
'Transition: ${transition.currentState.runtimeType} => '
'${transition.nextState.runtimeType}',
)
..write('New State: ${transition.nextState?.toString().limit(100)}');

logger.info(logMessage.toString());
super.onTransition(bloc, transition);
}

@override
void onEvent(Bloc<Object?, Object?> bloc, Object? event) {
final logMessage =
StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln('Event: ${event.runtimeType}')
..write('Details: ${event?.toString().limit(200)}');
final logMessage = StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln('Event: ${event.runtimeType}')
..write('Details: ${event?.toString().limit(200)}');

logger.info(logMessage.toString());
super.onEvent(bloc, event);
}

@override
void onError(BlocBase<Object?> bloc, Object error, StackTrace stackTrace) {
final logMessage =
StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln(error.toString());
final logMessage = StringBuffer()
..writeln('Bloc: ${bloc.runtimeType}')
..writeln(error.toString());

logger.error(logMessage.toString(), error: error, stackTrace: stackTrace);
super.onError(bloc, error, stackTrace);
Expand Down
45 changes: 24 additions & 21 deletions app/lib/src/widget/material_context.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,29 +13,32 @@ class MaterialContext extends StatelessWidget {

@override
Widget build(BuildContext context) {
final settings = SettingsScope.settingsOf(context);
final themeMode = settings.themeConfiguration?.themeMode ?? ThemeModeVO.system;
final seedColor = settings.themeConfiguration?.seedColor ?? Colors.blue;
return SettingsBuilder(
builder: (context, settings) {
final themeMode = settings.theme.themeMode;
final seedColor = settings.theme.seedColor;
final locale = settings.general.locale;

final materialThemeMode = switch (themeMode) {
ThemeModeVO.system => ThemeMode.system,
ThemeModeVO.light => ThemeMode.light,
ThemeModeVO.dark => ThemeMode.dark,
};
final materialThemeMode = switch (themeMode) {
ThemeModeVO.system => ThemeMode.system,
ThemeModeVO.light => ThemeMode.light,
ThemeModeVO.dark => ThemeMode.dark,
};

final darkTheme = ThemeData(colorSchemeSeed: seedColor, brightness: Brightness.dark);
final lightTheme = ThemeData(colorSchemeSeed: seedColor, brightness: Brightness.light);

return MaterialApp(
theme: lightTheme,
darkTheme: darkTheme,
themeMode: materialThemeMode,
locale: settings.locale,
home: const HomeScreen(),
builder: (context, child) {
return KeyedSubtree(
key: _globalKey,
child: MediaQueryRootOverride(child: child!),
final darkTheme = ThemeData(colorSchemeSeed: seedColor, brightness: Brightness.dark);
final lightTheme = ThemeData(colorSchemeSeed: seedColor, brightness: Brightness.light);
return MaterialApp(
theme: lightTheme,
darkTheme: darkTheme,
themeMode: materialThemeMode,
locale: locale,
home: const HomeScreen(),
builder: (context, child) {
return KeyedSubtree(
key: _globalKey,
child: MediaQueryRootOverride(child: child!),
);
},
);
},
);
Expand Down
6 changes: 3 additions & 3 deletions app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ version: 0.0.1+1
resolution: workspace

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

dependencies:
# Flutter SDK
Expand All @@ -23,7 +23,7 @@ dependencies:

# Utils
clock: 1.1.2
package_info_plus: 8.3.0
package_info_plus: ^9.0.0

# Core
rest_client:
Expand Down
7 changes: 3 additions & 4 deletions core/analytics/lib/src/firebase_analytics_reporter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@ final class FirebaseAnalyticsReporter implements AnalyticsReporter {

await analytics.logEvent(
name: event.name,
parameters:
event.parameters.isEmpty
? null
: {for (final parameter in event.parameters) parameter.name: parameter.value},
parameters: event.parameters.isEmpty
? null
: {for (final parameter in event.parameters) parameter.name: parameter.value},
);
}
}
8 changes: 4 additions & 4 deletions core/analytics/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ version: 1.0.0
publish_to: none

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

resolution: workspace

Expand All @@ -16,7 +16,7 @@ dependencies:
collection: 1.19.1

# Firebase
firebase_analytics: ^11.5.0
firebase_analytics: ^12.0.2

# Local Packages
logger:
Expand All @@ -26,7 +26,7 @@ dev_dependencies:
# Testing
flutter_test:
sdk: flutter
mockito: 5.4.6
mockito: ^5.5.1
build_runner: ^2.5.3

flutter:
Expand Down
1 change: 1 addition & 0 deletions core/common/lib/common.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export 'src/extensions/inherited_extension.dart';
export 'src/extensions/string_extension.dart';
export 'src/mutex/mutext.dart';
export 'src/persisted_column/persisted_column.dart';
export 'src/persisted_column/shared_preferences_column.dart';
49 changes: 49 additions & 0 deletions core/common/lib/src/mutex/mutext.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import 'dart:async';
import 'dart:collection';

/// A simple mutex implementation using a queue of completers.
/// This allows for synchronizing access to a critical section of code,
/// ensuring that only one task can execute the critical section at a time.
class Mutext {
Mutext();

final _queue = DoubleLinkedQueue<Completer<void>>();

/// Locks the mutex and returns
/// a future that completes when the lock is acquired.
Future<void> lock() {
final previous = _queue.lastOrNull?.future ?? Future<void>.value();
_queue.add(Completer<void>.sync());

return previous;
}

/// Unlocks the mutex, allowing the next waiting task to proceed.
void unlock() {
if (_queue.isEmpty) {
assert(false, 'Mutex unlock called when no tasks are waiting.');
return;
}

final completer = _queue.removeFirst();

if (completer.isCompleted) {
assert(false, 'Mutex unlock called when the completer is already completed.');
return;
}

completer.complete();
}

/// Synchronizes the execution of a function, ensuring that only one
/// task can execute the function at a time.
Future<T> runLocked<T>(FutureOr<T> Function() fn) async {
await lock();

try {
return await fn();
} finally {
unlock();
}
}
}
4 changes: 2 additions & 2 deletions core/common/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ publish_to: none
resolution: workspace

environment:
sdk: ^3.8.0
flutter: ">=3.32.0 <4.0.0"
sdk: ^3.9.2
flutter: ">=3.35.3 <4.0.0"

dependencies:
flutter:
Expand Down
6 changes: 3 additions & 3 deletions core/database/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ version: 1.0.0
publish_to: none

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

resolution: workspace

dependencies:
flutter:
sdk: flutter
drift: ^2.27.0
drift_flutter: 0.2.4
drift_flutter: ^0.2.7

dev_dependencies:
flutter_test:
Expand Down
6 changes: 3 additions & 3 deletions core/error_reporter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ publish_to: none
resolution: workspace

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

dependencies:
flutter:
sdk: flutter
logger:
path: ../logger
sentry_flutter: 8.14.2
sentry_flutter: ^9.6.0

dev_dependencies:
flutter_test:
Expand Down
9 changes: 4 additions & 5 deletions core/logger/lib/src/printing_log_observer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ final class PrintingLogObserver with LogObserver {
stack = Trace.from(stackTrace).terse;
}

final builder =
StringBuffer()
..write(DateFormat('MM-dd HH:mm:ss').format(logMessage.timestamp))
..write(' [${logMessage.level.toShortName()}]')
..write(' ${logMessage.message}');
final builder = StringBuffer()
..write(DateFormat('MM-dd HH:mm:ss').format(logMessage.timestamp))
..write(' [${logMessage.level.toShortName()}]')
..write(' ${logMessage.message}');

if (logMessage.error case final error?) {
builder.write('\n$error');
Expand Down
4 changes: 2 additions & 2 deletions core/logger/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ version: 1.0.0
publish_to: none

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

resolution: workspace

Expand Down
6 changes: 3 additions & 3 deletions core/rest_client/lib/src/rest_client_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,9 @@ abstract base class RestClientBase implements RestClient {

try {
final decodedBody = switch (body) {
MapResponseBody(:final Map<String, Object?> data) => data,
StringResponseBody(:final String data) => await _decodeString(data),
BytesResponseBody(:final List<int> data) => await _decodeBytes(data),
MapResponseBody(:final data) => data,
StringResponseBody(:final data) => await _decodeString(data),
BytesResponseBody(:final data) => await _decodeBytes(data),
};

if (decodedBody case {'error': final Map<String, Object?> error}) {
Expand Down
12 changes: 6 additions & 6 deletions core/rest_client/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,26 @@ version: 1.0.0
publish_to: none

environment:
sdk: ">=3.8.0 <4.0.0"
flutter: ">=3.32.0 <4.0.0"
sdk: ">=3.9.2 <4.0.0"
flutter: ">=3.35.3 <4.0.0"

resolution: workspace

# Add regular dependencies here.
dependencies:
flutter:
sdk: flutter
cronet_http: 1.3.4
cupertino_http: 2.2.0
http: 1.4.0
cronet_http: ^1.5.0
cupertino_http: ^2.3.0
http: ^1.5.0
intercepted_client: 0.0.1
path: 1.9.1
meta: 1.16.0

dev_dependencies:
flutter_test:
sdk: flutter
mockito: 5.4.6
mockito: ^5.5.1
build_runner: ^2.5.3

flutter:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:ui_library/src/widget/popup/low_level/composited_transform_popup_target.dart';
import 'package:ui_library/src/widget/popup/low_level/popup_layer_link.dart';
import 'package:ui_library/src/widget/popup/composited_transform_popup_target.dart';
import 'package:ui_library/src/widget/popup/popup_layer_link.dart';

/// A widget that follows a [CompositedTransformPopupTarget].
///
Expand Down
Loading
Loading