🐛 Bug fixes and optimization
This commit is contained in:
parent
11c913af60
commit
43b7059957
@ -468,5 +468,8 @@
|
|||||||
"all": "All",
|
"all": "All",
|
||||||
"unablePreview": "Unable to preview",
|
"unablePreview": "Unable to preview",
|
||||||
"dashboardNav": "Dash",
|
"dashboardNav": "Dash",
|
||||||
"accountNav": "You"
|
"accountNav": "You",
|
||||||
|
"performance": "Performance",
|
||||||
|
"animatedMessageList": "Non-animated message list",
|
||||||
|
"animatedMessageListDesc": "Remove animation effects in message list, to reduce cause lag"
|
||||||
}
|
}
|
||||||
|
@ -266,7 +266,7 @@
|
|||||||
"channelMembersAddHint": "到 @channel",
|
"channelMembersAddHint": "到 @channel",
|
||||||
"channelType": "频道类型",
|
"channelType": "频道类型",
|
||||||
"channelTypeCommon": "普通频道",
|
"channelTypeCommon": "普通频道",
|
||||||
"channelTypeDirect": "私信聊天",
|
"channelTypeDirect": "私信",
|
||||||
"channelAdjust": "调整频道",
|
"channelAdjust": "调整频道",
|
||||||
"channelDetail": "频道详情",
|
"channelDetail": "频道详情",
|
||||||
"channelSettings": "频道设置",
|
"channelSettings": "频道设置",
|
||||||
@ -464,5 +464,8 @@
|
|||||||
"all": "全部",
|
"all": "全部",
|
||||||
"unablePreview": "无法预览",
|
"unablePreview": "无法预览",
|
||||||
"dashboardNav": "仪表盘",
|
"dashboardNav": "仪表盘",
|
||||||
"accountNav": "您"
|
"accountNav": "您",
|
||||||
|
"performance": "性能",
|
||||||
|
"animatedMessageList": "无动画消息列表",
|
||||||
|
"animatedMessageListDesc": "在消息列表中禁用动画效果"
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ import 'dart:ui';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:solian/controllers/chat_events_controller.dart';
|
import 'package:solian/controllers/chat_events_controller.dart';
|
||||||
import 'package:solian/exts.dart';
|
import 'package:solian/exts.dart';
|
||||||
import 'package:solian/models/call.dart';
|
import 'package:solian/models/call.dart';
|
||||||
@ -179,6 +180,8 @@ class _ChannelChatScreenState extends State<ChannelChatScreen>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
late SharedPreferences _prefs;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -189,10 +192,13 @@ class _ChannelChatScreenState extends State<ChannelChatScreen>
|
|||||||
_chatController = ChatEventController();
|
_chatController = ChatEventController();
|
||||||
_chatController.initialize();
|
_chatController.initialize();
|
||||||
|
|
||||||
_getOngoingCall();
|
SharedPreferences.getInstance().then((inst) {
|
||||||
_getChannel().then((_) {
|
_prefs = inst;
|
||||||
_chatController.getInitialEvents(_channel!, widget.realm);
|
_getOngoingCall();
|
||||||
_listenMessages();
|
_getChannel().then((_) {
|
||||||
|
_chatController.getInitialEvents(_channel!, widget.realm);
|
||||||
|
_listenMessages();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,6 +289,8 @@ class _ChannelChatScreenState extends State<ChannelChatScreen>
|
|||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
child: ChatEventList(
|
child: ChatEventList(
|
||||||
|
noAnimated:
|
||||||
|
_prefs.getBool('non_animated_message_list') ?? false,
|
||||||
scope: widget.realm,
|
scope: widget.realm,
|
||||||
channel: _channel!,
|
channel: _channel!,
|
||||||
chatController: _chatController,
|
chatController: _chatController,
|
||||||
|
@ -354,7 +354,7 @@ class _DashboardScreenState extends State<DashboardScreen> {
|
|||||||
IconButton(
|
IconButton(
|
||||||
icon: const Icon(Icons.arrow_forward),
|
icon: const Icon(Icons.arrow_forward),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
AppRouter.instance.goNamed('feed');
|
AppRouter.instance.goNamed('explore');
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
@ -181,6 +181,21 @@ class _SettingScreenState extends State<SettingScreen> {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}),
|
}),
|
||||||
|
_buildCaptionHeader('performance'.tr),
|
||||||
|
CheckboxListTile(
|
||||||
|
contentPadding: const EdgeInsets.symmetric(horizontal: 22),
|
||||||
|
secondary: const Icon(Icons.message),
|
||||||
|
title: Text('animatedMessageList'.tr),
|
||||||
|
subtitle: Text('animatedMessageListDesc'.tr),
|
||||||
|
value: _prefs?.getBool('non_animated_message_list') ?? false,
|
||||||
|
onChanged: (value) {
|
||||||
|
_prefs
|
||||||
|
?.setBool('non_animated_message_list', value ?? false)
|
||||||
|
.then((_) {
|
||||||
|
setState(() {});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
),
|
||||||
_buildCaptionHeader('more'.tr),
|
_buildCaptionHeader('more'.tr),
|
||||||
ListTile(
|
ListTile(
|
||||||
leading: const Icon(Icons.delete_sweep),
|
leading: const Icon(Icons.delete_sweep),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_animate/flutter_animate.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:solian/controllers/chat_events_controller.dart';
|
import 'package:solian/controllers/chat_events_controller.dart';
|
||||||
import 'package:solian/models/channel.dart';
|
import 'package:solian/models/channel.dart';
|
||||||
@ -9,6 +10,7 @@ import 'package:solian/widgets/chat/chat_event_action.dart';
|
|||||||
import 'package:very_good_infinite_list/very_good_infinite_list.dart';
|
import 'package:very_good_infinite_list/very_good_infinite_list.dart';
|
||||||
|
|
||||||
class ChatEventList extends StatelessWidget {
|
class ChatEventList extends StatelessWidget {
|
||||||
|
final bool noAnimated;
|
||||||
final String scope;
|
final String scope;
|
||||||
final Channel channel;
|
final Channel channel;
|
||||||
final ChatEventController chatController;
|
final ChatEventController chatController;
|
||||||
@ -23,6 +25,7 @@ class ChatEventList extends StatelessWidget {
|
|||||||
required this.chatController,
|
required this.chatController,
|
||||||
required this.onEdit,
|
required this.onEdit,
|
||||||
required this.onReply,
|
required this.onReply,
|
||||||
|
this.noAnimated = false,
|
||||||
});
|
});
|
||||||
|
|
||||||
bool _checkMessageMergeable(Event? a, Event? b) {
|
bool _checkMessageMergeable(Event? a, Event? b) {
|
||||||
@ -63,15 +66,32 @@ class ChatEventList extends StatelessWidget {
|
|||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
behavior: HitTestBehavior.opaque,
|
behavior: HitTestBehavior.opaque,
|
||||||
child: ChatEvent(
|
child: Builder(builder: (context) {
|
||||||
key: Key('m${item!.uuid}'),
|
final widget = ChatEvent(
|
||||||
item: item,
|
key: Key('m${item!.uuid}'),
|
||||||
isMerged: isMerged,
|
item: item,
|
||||||
chatController: chatController,
|
isMerged: isMerged,
|
||||||
).paddingOnly(
|
chatController: chatController,
|
||||||
top: !isMerged ? 8 : 0,
|
).paddingOnly(
|
||||||
bottom: !hasMerged ? 8 : 0,
|
top: !isMerged ? 8 : 0,
|
||||||
),
|
bottom: !hasMerged ? 8 : 0,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (noAnimated) {
|
||||||
|
return widget;
|
||||||
|
} else {
|
||||||
|
return widget
|
||||||
|
.animate(
|
||||||
|
key: Key('animated-m${item.uuid}'),
|
||||||
|
)
|
||||||
|
.slideY(
|
||||||
|
curve: Curves.fastLinearToSlowEaseIn,
|
||||||
|
duration: 250.ms,
|
||||||
|
begin: 0.5,
|
||||||
|
end: 0,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}),
|
||||||
onLongPress: () {
|
onLongPress: () {
|
||||||
showModalBottomSheet(
|
showModalBottomSheet(
|
||||||
useRootNavigator: true,
|
useRootNavigator: true,
|
||||||
@ -79,7 +99,7 @@ class ChatEventList extends StatelessWidget {
|
|||||||
builder: (context) => ChatEventAction(
|
builder: (context) => ChatEventAction(
|
||||||
channel: channel,
|
channel: channel,
|
||||||
realm: channel.realm,
|
realm: channel.realm,
|
||||||
item: item,
|
item: item!,
|
||||||
onEdit: () {
|
onEdit: () {
|
||||||
onEdit(item);
|
onEdit(item);
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user