Refactors

This commit is contained in:
Henry Hiles 2025-11-28 18:24:27 -05:00
commit 5dc8fe14bd
No known key found for this signature in database
18 changed files with 126 additions and 95 deletions

View file

@ -0,0 +1,17 @@
import "package:flutter/widgets.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:nexus/widgets/error_dialog.dart";
import "package:nexus/widgets/loading.dart";
extension BetterWhen<T> on AsyncValue<T> {
Widget betterWhen({
required Widget Function(T value) data,
Widget Function() loading = Loading.new,
bool skipLoadingOnRefresh = false,
}) => when(
data: data,
error: (error, stackTrace) => ErrorDialog(error, stackTrace),
loading: loading,
skipLoadingOnRefresh: skipLoadingOnRefresh,
);
}

View file

@ -0,0 +1,13 @@
import "package:matrix/matrix.dart";
import "package:nexus/models/full_room.dart";
extension GetFullRoom on Room {
Future<FullRoom> get fullRoom async {
await loadHeroUsers();
return FullRoom(
roomData: this,
title: getLocalizedDisplayname(),
avatar: await avatar?.getThumbnailUri(client, width: 24, height: 24),
);
}
}

View file

@ -0,0 +1,5 @@
import "package:matrix/matrix.dart";
extension GetHeaders on Client {
Map<String, String> get headers => {"authorization": "Bearer $accessToken"};
}

View file

@ -1,38 +1,5 @@
import "package:flutter/material.dart";
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:flutter_riverpod/flutter_riverpod.dart";
import "package:matrix/matrix.dart";
import "package:nexus/models/full_room.dart";
import "package:nexus/widgets/error_dialog.dart";
import "package:nexus/widgets/loading.dart";
extension BetterWhen<T> on AsyncValue<T> {
Widget betterWhen({
required Widget Function(T value) data,
Widget Function() loading = Loading.new,
bool skipLoadingOnRefresh = false,
}) => when(
data: data,
error: (error, stackTrace) => ErrorDialog(error, stackTrace),
loading: loading,
skipLoadingOnRefresh: skipLoadingOnRefresh,
);
}
extension GetFullRoom on Room {
Future<FullRoom> get fullRoom async {
await loadHeroUsers();
return FullRoom(
roomData: this,
title: getLocalizedDisplayname(),
avatar: await avatar?.getThumbnailUri(client, width: 24, height: 24),
);
}
}
extension GetHeaders on Client {
Map<String, String> get headers => {"authorization": "Bearer $accessToken"};
}
extension ToMessage on Event {
Future<Message?> toMessage({bool mustBeText = false}) async {
@ -129,28 +96,3 @@ extension ToMessage on Event {
};
}
}
extension ToTheme on ColorScheme {
ThemeData get theme => ThemeData.from(colorScheme: this).copyWith(
cardTheme: CardThemeData(color: primaryContainer),
appBarTheme: AppBarTheme(
titleSpacing: 0,
backgroundColor: surfaceContainerLow,
),
inputDecorationTheme: const InputDecorationTheme(
border: OutlineInputBorder(),
),
);
}
extension ToMessages on List<MatrixEvent> {
Future<List<Message>> toMessages(Room room) async {
final messages = await Future.wait(
map((event) => Event.fromMatrixEvent(event, room).toMessage()),
);
return {
for (var msg in messages.nonNulls.toList().reversed.toList()) msg.id: msg,
}.values.toList();
}
}

View file

@ -0,0 +1,15 @@
import "package:flutter_chat_core/flutter_chat_core.dart";
import "package:matrix/matrix.dart";
import "package:nexus/helpers/extensions/to_message.dart";
extension ToMessages on List<MatrixEvent> {
Future<List<Message>> toMessages(Room room) async {
final messages = await Future.wait(
map((event) => Event.fromMatrixEvent(event, room).toMessage()),
);
return {
for (var msg in messages.nonNulls.toList().reversed.toList()) msg.id: msg,
}.values.toList();
}
}

View file

@ -0,0 +1,14 @@
import "package:flutter/material.dart";
extension ToTheme on ColorScheme {
ThemeData get theme => ThemeData.from(colorScheme: this).copyWith(
cardTheme: CardThemeData(color: primaryContainer),
appBarTheme: AppBarTheme(
titleSpacing: 0,
backgroundColor: surfaceContainerLow,
),
inputDecorationTheme: const InputDecorationTheme(
border: OutlineInputBorder(),
),
);
}