Skip to content

Commit 92f30e2

Browse files
matrix fixes
1 parent 10a735c commit 92f30e2

5 files changed

Lines changed: 113 additions & 44 deletions

File tree

school_data_hub_flutter/lib/features/matrix/domain/matrix_policy_manager.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,6 @@ class MatrixPolicyManager {
153153
applyPolicyChanges,
154154
);
155155

156-
// Register MatrixUserManager in DI container for direct access
157-
di.registerSingleton<MatrixUserManager>(_userManager);
158-
159156
await fetchMatrixPolicy();
160157
// Initialize the sub-managers with callback functions instead of direct ValueNotifier access
161158

school_data_hub_flutter/lib/features/matrix/services/matrix_credentials_pdf_generator.dart

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,17 +24,13 @@ class MatrixCredentialsPrinter {
2424

2525
final pdf = pw.Document();
2626

27-
final String matrixId = matrixUser.id!
28-
.replaceAll("@", "")
29-
.replaceAll(":hermannschule.de", "");
27+
final String matrixId = matrixUser.id!.replaceAll("@", "").split(":").first;
3028

3129
String qrPassword = password.substring(0, password.length - 4);
3230

3331
String pin = password.substring(password.length - 4);
3432

35-
final String domain = matrixDomain
36-
.replaceAll("https://", "")
37-
.replaceAll("/", "");
33+
final String domain = matrixDomain.replaceAll("https://", "");
3834
final String qrCodeData = "$matrixId:$domain*$qrPassword";
3935

4036
_log.info('QR Code Data: $qrCodeData');

school_data_hub_flutter/lib/features/matrix/users/domain/matrix_user_manager.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,12 @@ class MatrixUserManager {
101101
required List<String> roomIds,
102102
}) async {
103103
//- TODO URGENT: this is a hack for our school, add validation for the domain part
104-
String matrixId =
105-
'@$generatedMatrixId:${di<MatrixPolicyManager>().matrixUrl.split('://post.').last}';
104+
105+
final String domainPart = di<MatrixPolicyManager>().matrixUrl
106+
.replaceAll('https://', '')
107+
.split('post.')
108+
.last;
109+
String matrixId = '@$generatedMatrixId:$domainPart';
106110

107111
List<String> roomIdsList = roomIds.toList();
108112
final isStaff = !matrixId.contains('_');

school_data_hub_flutter/lib/features/matrix/users/presentation/matrix_users_list_page/widgets/matrix_user_list_card.dart

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,11 @@ class _MatrixUsersListCardState extends State<MatrixUsersListCard> {
103103
),
104104
);
105105
},
106-
child: AvatarWithBadges(pupil: linkedPupil, size: 70),
106+
child: AvatarWithBadges(
107+
pupil: linkedPupil,
108+
size: 70,
109+
heroTag: '${linkedPupil.avatar?.documentId}_matrix_${matrixUser.id}',
110+
),
107111
);
108112
}
109113

@@ -336,24 +340,29 @@ class _MatrixUsersListCardState extends State<MatrixUsersListCard> {
336340

337341
@override
338342
Widget build(BuildContext context) {
339-
final _tileController = createOnce(() => CustomExpansionTileController());
343+
final tileController = createOnce(() => CustomExpansionTileController());
340344
final matrixUser = watch<MatrixUser>(widget.matrixUser);
341-
// TODO: implement this
345+
342346
final MatrixUserRelationship? userRelationship =
343347
MatrixUserHelper.getUserRelationship(matrixUser);
344348

349+
final borderColor =
350+
!MatrixUserHelper.isLinkedToPupil(matrixUser) &&
351+
matrixUser.id!.contains('_')
352+
? const Color.fromARGB(255, 255, 179, 64)
353+
: userRelationship != null && userRelationship.isParent
354+
? Colors.grey
355+
: !matrixUser.id!.contains('_')
356+
? const Color.fromARGB(255, 62, 37, 186)
357+
: Colors.white;
358+
345359
return Card(
346-
color:
347-
!MatrixUserHelper.isLinkedToPupil(matrixUser) &&
348-
matrixUser.id!.contains('_')
349-
? const Color.fromARGB(255, 248, 179, 76)
350-
: userRelationship != null && userRelationship.isParent
351-
? const Color.fromARGB(255, 202, 252, 187)
352-
: !matrixUser.id!.contains('_')
353-
? const Color.fromARGB(255, 219, 170, 211)
354-
: Colors.white,
360+
color: Colors.white,
355361
surfaceTintColor: Colors.white,
356-
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
362+
shape: RoundedRectangleBorder(
363+
borderRadius: BorderRadius.circular(8),
364+
side: BorderSide(color: borderColor, width: 2),
365+
),
357366
elevation: 1.0,
358367
margin: const EdgeInsets.only(
359368
left: 4.0,
@@ -608,7 +617,7 @@ class _MatrixUsersListCardState extends State<MatrixUsersListCard> {
608617
),
609618
const Gap(10),
610619
InkWell(
611-
onTap: () => _tileController.toggle(),
620+
onTap: () => tileController.toggle(),
612621
child: Column(
613622
children: [
614623
const Gap(20),
@@ -631,7 +640,7 @@ class _MatrixUsersListCardState extends State<MatrixUsersListCard> {
631640
),
632641
CustomExpansionTileContent(
633642
title: null,
634-
tileController: _tileController,
643+
tileController: tileController,
635644
widgetList: [
636645
if (widget.appUser != null) ...[
637646
_AppUserInfoSection(appUser: widget.appUser!),

school_data_hub_flutter/lib/features/matrix/users/presentation/new_matrix_user_page/new_matrix_user_page.dart

Lines changed: 81 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:flutter_it/flutter_it.dart';
23
import 'package:gap/gap.dart';
34
import 'package:school_data_hub_flutter/app_utils/pdf_viewer_page.dart';
45
import 'package:school_data_hub_flutter/common/theme/app_colors.dart';
@@ -7,9 +8,7 @@ import 'package:school_data_hub_flutter/features/matrix/domain/matrix_policy_man
78
import 'package:school_data_hub_flutter/features/matrix/domain/models/matrix_room.dart';
89
import 'package:school_data_hub_flutter/features/matrix/rooms/domain/matrix_room_helper.dart';
910
import 'package:school_data_hub_flutter/features/matrix/rooms/presentation/select_matrix_rooms_list_page/controller/select_matrix_rooms_list_controller.dart';
10-
import 'package:school_data_hub_flutter/features/matrix/users/domain/matrix_user_manager.dart';
1111
import 'package:school_data_hub_flutter/features/pupil/domain/models/pupil_proxy.dart';
12-
import 'package:flutter_it/flutter_it.dart';
1312

1413
class NewMatrixUserPage extends StatefulWidget {
1514
final String? matrixId;
@@ -29,16 +28,83 @@ class NewMatrixUserPage extends StatefulWidget {
2928
}
3029

3130
class NewMatrixUserPageState extends State<NewMatrixUserPage> {
32-
final _matrixUserManager = di<MatrixUserManager>();
33-
final TextEditingController matrixIdController = TextEditingController();
31+
@override
32+
Widget build(BuildContext context) {
33+
return FutureBuilder(
34+
future: di.getAsync<MatrixPolicyManager>(),
35+
builder: (context, snapshot) {
36+
if (!snapshot.hasData) {
37+
return Scaffold(
38+
backgroundColor: AppColors.canvasColor,
39+
appBar: AppBar(
40+
automaticallyImplyLeading: false,
41+
centerTitle: true,
42+
backgroundColor: AppColors.backgroundColor,
43+
title: const Row(
44+
mainAxisAlignment: MainAxisAlignment.center,
45+
children: [
46+
Icon(Icons.chat_rounded, size: 25, color: Colors.white),
47+
Gap(10),
48+
Text('Neues Matrix-Konto', style: AppStyles.appBarTextStyle),
49+
],
50+
),
51+
),
52+
body: const Center(
53+
child: Column(
54+
mainAxisAlignment: MainAxisAlignment.center,
55+
children: [
56+
Text(
57+
'Bitte warten',
58+
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
59+
),
60+
Gap(20),
61+
CircularProgressIndicator(),
62+
],
63+
),
64+
),
65+
);
66+
}
67+
68+
return _NewMatrixUserPageContent(
69+
matrixPolicyManager: snapshot.data!,
70+
matrixId: widget.matrixId,
71+
displayName: widget.displayName,
72+
pupil: widget.pupil,
73+
isParent: widget.isParent,
74+
);
75+
},
76+
);
77+
}
78+
}
79+
80+
class _NewMatrixUserPageContent extends StatefulWidget {
81+
final MatrixPolicyManager matrixPolicyManager;
82+
final String? matrixId;
83+
final String? displayName;
84+
final PupilProxy? pupil;
85+
final bool? isParent;
86+
87+
const _NewMatrixUserPageContent({
88+
required this.matrixPolicyManager,
89+
this.matrixId,
90+
this.displayName,
91+
this.pupil,
92+
this.isParent,
93+
});
3494

95+
@override
96+
_NewMatrixUserPageContentState createState() =>
97+
_NewMatrixUserPageContentState();
98+
}
99+
100+
class _NewMatrixUserPageContentState extends State<_NewMatrixUserPageContent> {
101+
final TextEditingController matrixIdController = TextEditingController();
35102
final TextEditingController displayNameController = TextEditingController();
36-
final allRooms = di<MatrixPolicyManager>().matrixRooms.value;
103+
Set<String> roomIds = {};
37104

38105
@override
39106
void initState() {
40107
super.initState();
41-
setState(() {});
42108
if (widget.matrixId != null) {
43109
matrixIdController.text = widget.matrixId!;
44110
}
@@ -53,13 +119,9 @@ class NewMatrixUserPageState extends State<NewMatrixUserPage> {
53119
);
54120
}
55121

56-
setState(() {
57-
roomIds = rooms;
58-
});
122+
roomIds = rooms;
59123
}
60124

61-
Set<String> roomIds = {};
62-
63125
@override
64126
Widget build(BuildContext context) {
65127
List<MatrixRoom> roomsFromIds = MatrixRoomHelper.roomsFromRoomIds(
@@ -129,7 +191,7 @@ class NewMatrixUserPageState extends State<NewMatrixUserPage> {
129191
),
130192
const Gap(5),
131193
Text(
132-
':${di<MatrixPolicyManager>().matrixUrl.split('://').last}',
194+
':${widget.matrixPolicyManager.matrixUrl.split('://').last}',
133195
style: const TextStyle(
134196
fontSize: 16,
135197
fontWeight: FontWeight.bold,
@@ -280,12 +342,13 @@ class NewMatrixUserPageState extends State<NewMatrixUserPage> {
280342
ElevatedButton(
281343
style: AppStyles.successButtonStyle,
282344
onPressed: () async {
283-
final file = await _matrixUserManager.postNewMatrixUser(
284-
pupil: widget.pupil,
285-
generatedMatrixId: matrixIdController.text,
286-
displayName: displayNameController.text,
287-
roomIds: roomIds.toList(),
288-
);
345+
final file = await widget.matrixPolicyManager.users
346+
.postNewMatrixUser(
347+
pupil: widget.pupil,
348+
generatedMatrixId: matrixIdController.text,
349+
displayName: displayNameController.text,
350+
roomIds: roomIds.toList(),
351+
);
289352

290353
if (file != null && context.mounted) {
291354
Navigator.of(context).push(

0 commit comments

Comments
 (0)