forked from firka/student-legacy
almost finished send message ui and functionality
This commit is contained in:
parent
a175a9ea1c
commit
939e33feeb
@ -163,6 +163,8 @@ Future loginAPI({
|
|||||||
Provider.of<ExamProvider>(context, listen: false).fetch(),
|
Provider.of<ExamProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
|
Provider.of<HomeworkProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
Provider.of<MessageProvider>(context, listen: false).fetchAll(),
|
||||||
|
Provider.of<MessageProvider>(context, listen: false)
|
||||||
|
.fetchAllRecipients(),
|
||||||
Provider.of<NoteProvider>(context, listen: false).fetch(),
|
Provider.of<NoteProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<EventProvider>(context, listen: false).fetch(),
|
Provider.of<EventProvider>(context, listen: false).fetch(),
|
||||||
Provider.of<AbsenceProvider>(context, listen: false).fetch(),
|
Provider.of<AbsenceProvider>(context, listen: false).fetch(),
|
||||||
|
@ -55,7 +55,7 @@ Future<void> syncAll(BuildContext context) {
|
|||||||
.fetch(from: DateTime.now().subtract(const Duration(days: 30)))),
|
.fetch(from: DateTime.now().subtract(const Duration(days: 30)))),
|
||||||
syncStatus(Provider.of<MessageProvider>(context, listen: false).fetchAll()),
|
syncStatus(Provider.of<MessageProvider>(context, listen: false).fetchAll()),
|
||||||
syncStatus(
|
syncStatus(
|
||||||
Provider.of<MessageProvider>(context, listen: false).fetchRecipients()),
|
Provider.of<MessageProvider>(context, listen: false).fetchAllRecipients()),
|
||||||
syncStatus(Provider.of<NoteProvider>(context, listen: false).fetch()),
|
syncStatus(Provider.of<NoteProvider>(context, listen: false).fetch()),
|
||||||
syncStatus(Provider.of<EventProvider>(context, listen: false).fetch()),
|
syncStatus(Provider.of<EventProvider>(context, listen: false).fetch()),
|
||||||
syncStatus(Provider.of<AbsenceProvider>(context, listen: false).fetch()),
|
syncStatus(Provider.of<AbsenceProvider>(context, listen: false).fetch()),
|
||||||
|
@ -62,6 +62,8 @@ class _SidebarState extends State<Sidebar> {
|
|||||||
Provider.of<ExamProvider>(context, listen: false).restore(),
|
Provider.of<ExamProvider>(context, listen: false).restore(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).restore(),
|
Provider.of<MessageProvider>(context, listen: false).restore(),
|
||||||
|
Provider.of<MessageProvider>(context, listen: false)
|
||||||
|
.restoreRecipients(),
|
||||||
Provider.of<NoteProvider>(context, listen: false).restore(),
|
Provider.of<NoteProvider>(context, listen: false).restore(),
|
||||||
Provider.of<EventProvider>(context, listen: false).restore(),
|
Provider.of<EventProvider>(context, listen: false).restore(),
|
||||||
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
||||||
|
@ -67,6 +67,8 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
Provider.of<ExamProvider>(context, listen: false).restore(),
|
Provider.of<ExamProvider>(context, listen: false).restore(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).restore(),
|
Provider.of<MessageProvider>(context, listen: false).restore(),
|
||||||
|
Provider.of<MessageProvider>(context, listen: false)
|
||||||
|
.restoreRecipients(),
|
||||||
Provider.of<NoteProvider>(context, listen: false).restore(),
|
Provider.of<NoteProvider>(context, listen: false).restore(),
|
||||||
Provider.of<EventProvider>(context, listen: false).restore(),
|
Provider.of<EventProvider>(context, listen: false).restore(),
|
||||||
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
||||||
|
@ -157,18 +157,18 @@ class SendRecipient {
|
|||||||
|
|
||||||
factory SendRecipient.fromJson(Map json, SendRecipientType type) {
|
factory SendRecipient.fromJson(Map json, SendRecipientType type) {
|
||||||
return SendRecipient(
|
return SendRecipient(
|
||||||
id: json['azonosito'],
|
id: int.parse(json['oktatasiAzonosito'] ?? '0'),
|
||||||
kretaId: json['kretaAzonosito'],
|
kretaId: json['kretaAzonosito'],
|
||||||
name: json['name'],
|
name: json['nev'],
|
||||||
type: type,
|
type: type,
|
||||||
json: json,
|
json: json,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Object get kretaJson => {
|
Object get kretaJson => {
|
||||||
'azonosito': id,
|
'azonosito': id ?? 0,
|
||||||
'kretaAzonosito': kretaId,
|
'kretaAzonosito': kretaId ?? 0,
|
||||||
'nev': name,
|
'nev': name ?? 'Teszt Lajos',
|
||||||
'tipus': {
|
'tipus': {
|
||||||
'azonosito': type.id,
|
'azonosito': type.id,
|
||||||
'kod': type.code,
|
'kod': type.code,
|
||||||
|
@ -21,11 +21,10 @@ class MessageProvider with ChangeNotifier {
|
|||||||
|
|
||||||
MessageProvider({
|
MessageProvider({
|
||||||
List<Message> initialMessages = const [],
|
List<Message> initialMessages = const [],
|
||||||
List<SendRecipient> initialRecipients = const [],
|
|
||||||
required BuildContext context,
|
required BuildContext context,
|
||||||
}) {
|
}) {
|
||||||
_messages = List.castFrom(initialMessages);
|
_messages = List.castFrom(initialMessages);
|
||||||
_recipients = List.castFrom(initialRecipients);
|
_recipients = [];
|
||||||
_context = context;
|
_context = context;
|
||||||
|
|
||||||
if (_messages.isEmpty) restore();
|
if (_messages.isEmpty) restore();
|
||||||
@ -115,8 +114,13 @@ class MessageProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fetch all recipients
|
||||||
|
Future<void> fetchAllRecipients() => Future.forEach(
|
||||||
|
AddresseeType.values, (AddresseeType v) => fetchRecipients(type: v));
|
||||||
|
|
||||||
// fetch recipients
|
// fetch recipients
|
||||||
Future<void> fetchRecipients() async {
|
Future<void> fetchRecipients(
|
||||||
|
{AddresseeType type = AddresseeType.teachers}) async {
|
||||||
Map<AddresseeType, SendRecipientType> addressable = {};
|
Map<AddresseeType, SendRecipientType> addressable = {};
|
||||||
|
|
||||||
// check user
|
// check user
|
||||||
@ -163,11 +167,13 @@ class MessageProvider with ChangeNotifier {
|
|||||||
// parse recipients
|
// parse recipients
|
||||||
List<SendRecipient> recipients = [];
|
List<SendRecipient> recipients = [];
|
||||||
|
|
||||||
if (addressable.containsKey(AddresseeType.teachers)) {
|
if (addressable.containsKey(AddresseeType.teachers) &&
|
||||||
|
type == AddresseeType.teachers) {
|
||||||
recipients.addAll(recipientTeachersJson.map((e) =>
|
recipients.addAll(recipientTeachersJson.map((e) =>
|
||||||
SendRecipient.fromJson(e, addressable[AddresseeType.teachers]!)));
|
SendRecipient.fromJson(e, addressable[AddresseeType.teachers]!)));
|
||||||
}
|
}
|
||||||
if (addressable.containsKey(AddresseeType.directorate)) {
|
if (addressable.containsKey(AddresseeType.directorate) &&
|
||||||
|
type == AddresseeType.directorate) {
|
||||||
recipients.addAll(recipientDirectorateJson.map((e) =>
|
recipients.addAll(recipientDirectorateJson.map((e) =>
|
||||||
SendRecipient.fromJson(e, addressable[AddresseeType.directorate]!)));
|
SendRecipient.fromJson(e, addressable[AddresseeType.directorate]!)));
|
||||||
}
|
}
|
||||||
@ -178,11 +184,17 @@ class MessageProvider with ChangeNotifier {
|
|||||||
// print(recipients.first.json);
|
// print(recipients.first.json);
|
||||||
// }
|
// }
|
||||||
|
|
||||||
storeRecipients(recipients);
|
await storeRecipients(recipients, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
// store recipients
|
// store recipients
|
||||||
Future<void> storeRecipients(List<SendRecipient> recipients) async {
|
Future<void> storeRecipients(
|
||||||
|
List<SendRecipient> recipients, AddresseeType type) async {
|
||||||
|
_recipients.removeWhere((r) => (type == AddresseeType.teachers
|
||||||
|
? (r.type.code == 'TANAR')
|
||||||
|
: (type == AddresseeType.directorate
|
||||||
|
? (r.type.code == 'IGAZGATOSAG')
|
||||||
|
: r.type.code != '')));
|
||||||
_recipients.addAll(recipients);
|
_recipients.addAll(recipients);
|
||||||
|
|
||||||
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
||||||
@ -207,20 +219,21 @@ class MessageProvider with ChangeNotifier {
|
|||||||
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
User? user = Provider.of<UserProvider>(_context, listen: false).user;
|
||||||
if (user == null) throw "Cannot send Message as User null";
|
if (user == null) throw "Cannot send Message as User null";
|
||||||
|
|
||||||
for (var r in recipients) {
|
// for (var r in recipients) {
|
||||||
recipientList.add({
|
// recipientList.add({
|
||||||
"azonosito": r.id ?? "",
|
// "azonosito": r.id ?? "",
|
||||||
"kretaAzonosito": r.kretaId ?? "",
|
// "kretaAzonosito": r.kretaId ?? "",
|
||||||
"nev": r.name ?? "Teszt Lajos",
|
// "nev": r.name ?? "Teszt Lajos",
|
||||||
"tipus": {
|
// "tipus": {
|
||||||
"kod": r.type.code,
|
// "kod": r.type.code,
|
||||||
"leiras": r.type.description,
|
// "leiras": r.type.description,
|
||||||
"azonosito": r.type.id,
|
// "azonosito": r.type.id,
|
||||||
"nev": r.type.name,
|
// "nev": r.type.name,
|
||||||
"rovidNev": r.type.shortName,
|
// "rovidNev": r.type.shortName,
|
||||||
}
|
// }
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
recipientList.addAll(recipients.map((e) => e.kretaJson));
|
||||||
|
|
||||||
Object body = {
|
Object body = {
|
||||||
"cimzettLista": recipientList,
|
"cimzettLista": recipientList,
|
||||||
|
@ -35,6 +35,8 @@ class ProfileButton extends StatelessWidget {
|
|||||||
Provider.of<ExamProvider>(context, listen: false).restore(),
|
Provider.of<ExamProvider>(context, listen: false).restore(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).restore(),
|
Provider.of<MessageProvider>(context, listen: false).restore(),
|
||||||
|
Provider.of<MessageProvider>(context, listen: false)
|
||||||
|
.restoreRecipients(),
|
||||||
Provider.of<NoteProvider>(context, listen: false).restore(),
|
Provider.of<NoteProvider>(context, listen: false).restore(),
|
||||||
Provider.of<EventProvider>(context, listen: false).restore(),
|
Provider.of<EventProvider>(context, listen: false).restore(),
|
||||||
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
||||||
|
@ -73,7 +73,7 @@ class MessagesPageState extends State<MessagesPage>
|
|||||||
horizontal: 8.0, vertical: 5.0),
|
horizontal: 8.0, vertical: 5.0),
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
splashRadius: 24.0,
|
splashRadius: 24.0,
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
// Navigator.of(context, rootNavigator: true)
|
// Navigator.of(context, rootNavigator: true)
|
||||||
// .push(PageRouteBuilder(
|
// .push(PageRouteBuilder(
|
||||||
// pageBuilder: (context, animation, secondaryAnimation) =>
|
// pageBuilder: (context, animation, secondaryAnimation) =>
|
||||||
@ -87,7 +87,7 @@ class MessagesPageState extends State<MessagesPage>
|
|||||||
// setSystemChrome(context);
|
// setSystemChrome(context);
|
||||||
// });
|
// });
|
||||||
// SoonAlert.show(context: context);
|
// SoonAlert.show(context: context);
|
||||||
showSendMessageSheet(context);
|
await showSendMessageSheet(context);
|
||||||
},
|
},
|
||||||
icon: Icon(
|
icon: Icon(
|
||||||
FeatherIcons.send,
|
FeatherIcons.send,
|
||||||
@ -226,8 +226,8 @@ class MessagesPageState extends State<MessagesPage>
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void showSendMessageSheet(BuildContext context) {
|
Future<void> showSendMessageSheet(BuildContext context) async {
|
||||||
messageProvider.fetchRecipients();
|
await messageProvider.fetchAllRecipients();
|
||||||
|
|
||||||
_scaffoldKey.currentState?.showBottomSheet(
|
_scaffoldKey.currentState?.showBottomSheet(
|
||||||
(context) => RoundedBottomSheet(
|
(context) => RoundedBottomSheet(
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import 'package:dropdown_button2/dropdown_button2.dart';
|
||||||
|
import 'package:filcnaplo/theme/colors/colors.dart';
|
||||||
import 'package:filcnaplo_kreta_api/models/message.dart';
|
import 'package:filcnaplo_kreta_api/models/message.dart';
|
||||||
import 'package:filcnaplo_kreta_api/providers/message_provider.dart';
|
import 'package:filcnaplo_kreta_api/providers/message_provider.dart';
|
||||||
// import 'package:filcnaplo_mobile_ui/common/custom_snack_bar.dart';
|
// import 'package:filcnaplo_mobile_ui/common/custom_snack_bar.dart';
|
||||||
@ -25,9 +27,7 @@ class SendMessageSheetState extends State<SendMessageSheet> {
|
|||||||
double newValue = 5.0;
|
double newValue = 5.0;
|
||||||
double newWeight = 100.0;
|
double newWeight = 100.0;
|
||||||
|
|
||||||
List<Widget> buildRecipientTiles() {
|
List<SendRecipient> selectedRecipients = [];
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -48,7 +48,81 @@ class SendMessageSheetState extends State<SendMessageSheet> {
|
|||||||
),
|
),
|
||||||
|
|
||||||
// message recipients
|
// message recipients
|
||||||
Row(children: buildRecipientTiles()),
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(left: 8.0, right: 8.0),
|
||||||
|
child: DropdownButton2(
|
||||||
|
items: widget.availableRecipients
|
||||||
|
.map((item) => DropdownMenuItem<String>(
|
||||||
|
value: item.kretaId.toString(),
|
||||||
|
child: Text(
|
||||||
|
item.name ?? (item.id ?? 'Nincs név').toString(),
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: AppColors.of(context).text,
|
||||||
|
),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
.toList(),
|
||||||
|
onChanged: (String? v) async {
|
||||||
|
int kretaId = int.parse(v ?? '0');
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
selectedRecipients.add(widget.availableRecipients
|
||||||
|
.firstWhere((e) => e.kretaId == kretaId));
|
||||||
|
|
||||||
|
widget.availableRecipients
|
||||||
|
.removeWhere((e) => e.kretaId == kretaId);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
iconSize: 14,
|
||||||
|
iconEnabledColor: AppColors.of(context).text,
|
||||||
|
iconDisabledColor: AppColors.of(context).text,
|
||||||
|
underline: const SizedBox(),
|
||||||
|
itemHeight: 40,
|
||||||
|
itemPadding: const EdgeInsets.only(left: 14, right: 14),
|
||||||
|
buttonWidth: 50,
|
||||||
|
dropdownWidth: 300,
|
||||||
|
dropdownPadding: null,
|
||||||
|
buttonDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
dropdownDecoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(14),
|
||||||
|
),
|
||||||
|
dropdownElevation: 8,
|
||||||
|
scrollbarRadius: const Radius.circular(40),
|
||||||
|
scrollbarThickness: 6,
|
||||||
|
scrollbarAlwaysShow: true,
|
||||||
|
offset: const Offset(-10, -10),
|
||||||
|
buttonSplashColor: Colors.transparent,
|
||||||
|
customButton: Container(
|
||||||
|
width: double.infinity,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: Colors.grey, width: 2),
|
||||||
|
borderRadius: BorderRadius.circular(12.0),
|
||||||
|
),
|
||||||
|
padding:
|
||||||
|
const EdgeInsets.symmetric(vertical: 12.0, horizontal: 8.0),
|
||||||
|
child: Text(
|
||||||
|
selectedRecipients.isEmpty
|
||||||
|
? "select_recipient".i18n
|
||||||
|
: selectedRecipients
|
||||||
|
.map((e) =>
|
||||||
|
'${e.name ?? (e.id ?? 'Nincs név').toString()}, ')
|
||||||
|
.join(),
|
||||||
|
style: Theme.of(context).textTheme.titleSmall!.copyWith(
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
color: AppColors.of(context).text.withOpacity(0.75)),
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
maxLines: 2,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Row(children: buildRecipientTiles()),
|
||||||
|
|
||||||
// message content
|
// message content
|
||||||
Column(children: [
|
Column(children: [
|
||||||
|
@ -10,6 +10,7 @@ extension Localization on String {
|
|||||||
"sent": "Message sent successfully.",
|
"sent": "Message sent successfully.",
|
||||||
"message_subject": "Tárgy...",
|
"message_subject": "Tárgy...",
|
||||||
"message_text": "Üzenet szövege...",
|
"message_text": "Üzenet szövege...",
|
||||||
|
"select_recipient": "Add Recipient",
|
||||||
},
|
},
|
||||||
"hu_hu": {
|
"hu_hu": {
|
||||||
"recipients": "Recipients",
|
"recipients": "Recipients",
|
||||||
@ -18,6 +19,7 @@ extension Localization on String {
|
|||||||
"sent": "Message sent successfully.",
|
"sent": "Message sent successfully.",
|
||||||
"message_subject": "Tárgy...",
|
"message_subject": "Tárgy...",
|
||||||
"message_text": "Üzenet szövege...",
|
"message_text": "Üzenet szövege...",
|
||||||
|
"select_recipient": "Címzett hozzáadása",
|
||||||
},
|
},
|
||||||
"de_de": {
|
"de_de": {
|
||||||
"recipients": "Recipients",
|
"recipients": "Recipients",
|
||||||
@ -26,6 +28,7 @@ extension Localization on String {
|
|||||||
"sent": "Message sent successfully.",
|
"sent": "Message sent successfully.",
|
||||||
"message_subject": "Tárgy...",
|
"message_subject": "Tárgy...",
|
||||||
"message_text": "Üzenet szövege...",
|
"message_text": "Üzenet szövege...",
|
||||||
|
"select_recipient": "Select Recipient",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -74,6 +74,8 @@ class _SettingsScreenState extends State<SettingsScreen>
|
|||||||
Provider.of<ExamProvider>(context, listen: false).restore(),
|
Provider.of<ExamProvider>(context, listen: false).restore(),
|
||||||
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
Provider.of<HomeworkProvider>(context, listen: false).restore(),
|
||||||
Provider.of<MessageProvider>(context, listen: false).restore(),
|
Provider.of<MessageProvider>(context, listen: false).restore(),
|
||||||
|
Provider.of<MessageProvider>(context, listen: false)
|
||||||
|
.restoreRecipients(),
|
||||||
Provider.of<NoteProvider>(context, listen: false).restore(),
|
Provider.of<NoteProvider>(context, listen: false).restore(),
|
||||||
Provider.of<EventProvider>(context, listen: false).restore(),
|
Provider.of<EventProvider>(context, listen: false).restore(),
|
||||||
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
Provider.of<AbsenceProvider>(context, listen: false).restore(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user