Erweiterungen
This commit is contained in:
1 parent
fcda77177a
commit
00d320ec8f
4 files changed
+93
-29
No files matched your search
@@ -22,13 +22,13 @@ import '../tools/util.dart';
|
||||
|
||||
class MainPage extends ContentViewWidget {
|
||||
final ValueNotifier<String> _zipValueNotifier = ValueNotifier("----");
|
||||
final ValueNotifier<String> _sidValueNotifier = ValueNotifier("----");
|
||||
final ValueNotifier<String> sidValueNotifier = ValueNotifier("----");
|
||||
|
||||
MainPage({super.key}) {
|
||||
Status? status = MyApp.isarInstance.status.where().findFirstSync();
|
||||
if (status != null) {
|
||||
_zipValueNotifier.value = status.locZip;
|
||||
_sidValueNotifier.value = status.sid;
|
||||
sidValueNotifier.value = status.sid;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,7 +56,7 @@ class MainPage extends ContentViewWidget {
|
||||
),
|
||||
const SizedBox(height: 5),
|
||||
ValueListenableBuilder<String>(
|
||||
valueListenable: _sidValueNotifier,
|
||||
valueListenable: sidValueNotifier,
|
||||
builder: (context, value, child) {
|
||||
return Text(
|
||||
value,
|
||||
@@ -244,7 +244,7 @@ class _MainPageState extends State<MainPage> {
|
||||
|
||||
_initMessages() {
|
||||
BroadcastReceiver().subscribe<StatusInfoUpdate>(Constants.messageTopicStatusInfoUpdate, (statusInfoUpdateMessage) {
|
||||
widget._sidValueNotifier.value = statusInfoUpdateMessage.status.sid;
|
||||
widget.sidValueNotifier.value = statusInfoUpdateMessage.status.sid;
|
||||
});
|
||||
|
||||
BroadcastReceiver().subscribe<JobReceivedMessage>(Constants.messageTopicJobReceived, (JobReceivedMessage jobReceivedMessage) {
|
||||
|
||||
@@ -1,10 +1,15 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_chat_ui/flutter_chat_ui.dart';
|
||||
import 'package:flutter_chat_types/flutter_chat_types.dart' as types;
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:stadtbote/content_views/utils/content_view_widget.dart';
|
||||
import 'package:stadtbote/content_views/utils/header_info.dart';
|
||||
import 'package:stadtbote/main.dart';
|
||||
import 'package:stadtbote/model/message.dart' as sbmessage;
|
||||
import 'package:stadtbote/model/status.dart';
|
||||
import 'package:stadtbote/popups/infos_popup.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
|
||||
import '../tools/util.dart';
|
||||
|
||||
@@ -17,25 +22,12 @@ class MessagesPage extends ContentViewWidget {
|
||||
@override
|
||||
Future<HeaderInfo> getHeaderInfo(BuildContext context) async {
|
||||
return HeaderInfo(
|
||||
titleWidget: Container(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 3),
|
||||
child: const Column(children: [
|
||||
Text(
|
||||
'Zeile 1',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 18.0,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 5),
|
||||
Text(
|
||||
'Zeile 2',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 18.0,
|
||||
),
|
||||
),
|
||||
]),
|
||||
titleWidget: const Text(
|
||||
'Nachrichten',
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 24.0,
|
||||
),
|
||||
),
|
||||
rightButtonEnabled: true,
|
||||
rightButtonVisible: true,
|
||||
@@ -47,27 +39,97 @@ class MessagesPage extends ContentViewWidget {
|
||||
}
|
||||
|
||||
class _MessagesPageState extends State<MessagesPage> {
|
||||
bool _initCompleted = false;
|
||||
|
||||
late String _sid;
|
||||
|
||||
late final List<types.Message> _messages = [];
|
||||
|
||||
final _user = const types.User(
|
||||
id: '82091008-a484-4a89-ae75-a22bf8d6f3ac',
|
||||
);
|
||||
|
||||
final _central = const types.User(
|
||||
id: '82091008-a484-4a89-ae75-a22bf8d6f3ad',
|
||||
);
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
Future.delayed(const Duration(seconds: 0), () async {
|
||||
var status = await MyApp.isarInstance.status.where().findFirst();
|
||||
_sid = status != null ? status.sid : 'Unbekannt';
|
||||
|
||||
await _fetchMessages();
|
||||
|
||||
_initCompleted = true;
|
||||
|
||||
setState(() {});
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (!_initCompleted) {
|
||||
return Util.getWaitWidget(context);
|
||||
}
|
||||
|
||||
return Stack(
|
||||
children: [
|
||||
Chat(
|
||||
messages: _messages,
|
||||
onSendPressed: _handleSendPressed,
|
||||
showUserAvatars: true,
|
||||
showUserNames: true,
|
||||
showUserAvatars: false,
|
||||
showUserNames: false,
|
||||
user: _user,
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
void _handleSendPressed(types.PartialText p1) {
|
||||
void _handleSendPressed(types.PartialText text) async {
|
||||
var message = sbmessage.Message();
|
||||
message.text = [text.text];
|
||||
message.from = _sid;
|
||||
message.subj = '';
|
||||
message.time = DateFormat("yyyy.mm.dd HH:mm").format(DateTime.now());
|
||||
message.id = 0;
|
||||
|
||||
await MyApp.isarInstance.writeTxn(() async {
|
||||
await MyApp.isarInstance.messages.put(message);
|
||||
});
|
||||
|
||||
_messages.insert(0, types.TextMessage(
|
||||
author: _user,
|
||||
createdAt: DateTime.now().millisecondsSinceEpoch,
|
||||
id: const Uuid().v4().toString(),
|
||||
text: text.text,
|
||||
));
|
||||
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
Future<void> _fetchMessages() async {
|
||||
_messages.clear();
|
||||
|
||||
var messages = await MyApp.isarInstance.messages.where().findAll();
|
||||
for (var message in messages) {
|
||||
var text = '';
|
||||
for (var textLine in message.text) {
|
||||
text += '$textLine\n';
|
||||
}
|
||||
|
||||
_messages.add(types.TextMessage(
|
||||
author: message.from == _sid ? _user : _central,
|
||||
createdAt: DateTime.now().millisecondsSinceEpoch,
|
||||
id: Uuid().v4().toString(),
|
||||
text: text,
|
||||
));
|
||||
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
Util.logInfo('');
|
||||
}
|
||||
}
|
||||
+3
-1
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_broadcast_receiver/flutter_broadcast_receiver.dart';
|
||||
import 'package:isar/isar.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:stadtbote/model/message.dart';
|
||||
import 'package:stadtbote/model/task_info.dart';
|
||||
import 'package:stadtbote/tools/colored_safe_area.dart';
|
||||
import 'package:stadtbote/model/status.dart';
|
||||
@@ -24,7 +25,8 @@ Future<void> main() async {
|
||||
MyApp.isarInstance = await Isar.open([
|
||||
StatusSchema,
|
||||
JobSchema,
|
||||
TaskInfoSchema
|
||||
TaskInfoSchema,
|
||||
MessageSchema,
|
||||
], directory: dir.path);
|
||||
|
||||
runZonedGuarded(() {
|
||||
|
||||
@@ -184,7 +184,7 @@ class MqttCore {
|
||||
await MyApp.isarInstance.messages.put(newMessage);
|
||||
});
|
||||
|
||||
BroadcastReceiver().publish<MessageReceivedMessage>(Constants.messageTopicJobReceived, arguments: MessageReceivedMessage(message: newMessage));
|
||||
BroadcastReceiver().publish<MessageReceivedMessage>(Constants.messageTopicMessageReceived, arguments: MessageReceivedMessage(message: newMessage));
|
||||
}
|
||||
|
||||
void _startReconnectTimer() {
|
||||
|
||||
Reference in new issue
Block a user