updated initPangeaControllers function, don't check mounted for functions that don't rely on context
This commit is contained in:
parent
6a7ad14d91
commit
a061535bbe
5 changed files with 44 additions and 34 deletions
|
|
@ -7,7 +7,6 @@ import 'package:fluffychat/config/themes.dart';
|
|||
import 'package:fluffychat/pages/chat/send_file_dialog.dart';
|
||||
import 'package:fluffychat/pages/chat_list/chat_list_view.dart';
|
||||
import 'package:fluffychat/pangea/constants/pangea_room_types.dart';
|
||||
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
|
||||
import 'package:fluffychat/pangea/extensions/client_extension/client_extension.dart';
|
||||
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
|
||||
import 'package:fluffychat/pangea/utils/chat_list_handle_space_tap.dart';
|
||||
|
|
@ -1016,7 +1015,7 @@ class ChatListController extends State<ChatList>
|
|||
}
|
||||
|
||||
// #Pangea
|
||||
await _initPangeaControllers(client);
|
||||
_initPangeaControllers(client);
|
||||
// Pangea#
|
||||
if (!mounted) return;
|
||||
setState(() {
|
||||
|
|
@ -1025,22 +1024,12 @@ class ChatListController extends State<ChatList>
|
|||
}
|
||||
|
||||
// #Pangea
|
||||
Future<void> _initPangeaControllers(Client client) async {
|
||||
MatrixState.pangeaController.putAnalytics.initialize();
|
||||
MatrixState.pangeaController.getAnalytics.initialize();
|
||||
void _initPangeaControllers(Client client) {
|
||||
GoogleAnalytics.analyticsUserUpdate(client.userID);
|
||||
client.migrateAnalyticsRooms();
|
||||
MatrixState.pangeaController.initControllers();
|
||||
if (mounted) {
|
||||
final PangeaController pangeaController = MatrixState.pangeaController;
|
||||
GoogleAnalytics.analyticsUserUpdate(client.userID);
|
||||
pangeaController.startChatWithBotIfNotPresent();
|
||||
await pangeaController.subscriptionController.initialize();
|
||||
pangeaController.afterSyncAndFirstLoginInitialization(context);
|
||||
await pangeaController.inviteBotToExistingSpaces();
|
||||
await pangeaController.setPangeaPushRules();
|
||||
client.migrateAnalyticsRooms();
|
||||
} else {
|
||||
ErrorHandler.logError(
|
||||
m: "didn't run afterSyncAndFirstLoginInitialization because not mounted",
|
||||
);
|
||||
MatrixState.pangeaController.classController.joinCachedSpaceCode(context);
|
||||
}
|
||||
}
|
||||
// Pangea#
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class ClassController extends BaseController {
|
|||
);
|
||||
}
|
||||
|
||||
Future<void> checkForClassCodeAndSubscription(BuildContext context) async {
|
||||
Future<void> joinCachedSpaceCode(BuildContext context) async {
|
||||
final String? classCode = _pangeaController.pStoreService.read(
|
||||
PLocalKey.cachedClassCodeToJoin,
|
||||
isAccountData: false,
|
||||
|
|
@ -53,6 +53,7 @@ class ClassController extends BaseController {
|
|||
context,
|
||||
classCode,
|
||||
);
|
||||
|
||||
await _pangeaController.pStoreService.delete(
|
||||
PLocalKey.cachedClassCodeToJoin,
|
||||
isAccountData: false,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ class GetAnalyticsController {
|
|||
StreamController.broadcast();
|
||||
|
||||
ConstructListModel constructListModel = ConstructListModel(uses: []);
|
||||
Completer<void>? initCompleter;
|
||||
|
||||
GetAnalyticsController(PangeaController pangeaController) {
|
||||
_pangeaController = pangeaController;
|
||||
|
|
@ -50,20 +51,23 @@ class GetAnalyticsController {
|
|||
return progress >= 0 ? progress : 0;
|
||||
}
|
||||
|
||||
void initialize() {
|
||||
Future<void> initialize() async {
|
||||
if (initCompleter != null) return;
|
||||
initCompleter = Completer<void>();
|
||||
|
||||
_analyticsUpdateSubscription ??= _pangeaController
|
||||
.putAnalytics.analyticsUpdateStream.stream
|
||||
.listen(_onAnalyticsUpdate);
|
||||
|
||||
_pangeaController.putAnalytics.lastUpdatedCompleter.future.then((_) {
|
||||
_getConstructs().then((_) {
|
||||
constructListModel.updateConstructs([
|
||||
...(_getConstructsLocal() ?? []),
|
||||
..._locallyCachedConstructs,
|
||||
]);
|
||||
_updateAnalyticsStream();
|
||||
});
|
||||
});
|
||||
await _pangeaController.putAnalytics.lastUpdatedCompleter.future;
|
||||
await _getConstructs();
|
||||
constructListModel.updateConstructs([
|
||||
...(_getConstructsLocal() ?? []),
|
||||
..._locallyCachedConstructs,
|
||||
]);
|
||||
_updateAnalyticsStream();
|
||||
|
||||
initCompleter!.complete();
|
||||
}
|
||||
|
||||
/// Clear all cached analytics data.
|
||||
|
|
@ -71,6 +75,8 @@ class GetAnalyticsController {
|
|||
constructListModel.dispose();
|
||||
_analyticsUpdateSubscription?.cancel();
|
||||
_analyticsUpdateSubscription = null;
|
||||
analyticsStream.close();
|
||||
initCompleter = null;
|
||||
_cache.clear();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,6 @@ import 'package:fluffychat/pangea/utils/bot_name.dart';
|
|||
import 'package:fluffychat/pangea/utils/error_handler.dart';
|
||||
import 'package:fluffychat/pangea/utils/instructions.dart';
|
||||
import 'package:fluffychat/widgets/matrix.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
|
|
@ -80,11 +79,19 @@ class PangeaController {
|
|||
_addRefInObjects();
|
||||
}
|
||||
|
||||
Future<void> afterSyncAndFirstLoginInitialization(
|
||||
BuildContext context,
|
||||
) async {
|
||||
await classController.checkForClassCodeAndSubscription(context);
|
||||
/// Initializes various controllers and settings.
|
||||
/// While many of these functions are asynchronous, they are not awaited here,
|
||||
/// because of order of execution does not matter,
|
||||
/// and running them at the same times speeds them up.
|
||||
void initControllers() {
|
||||
putAnalytics.initialize();
|
||||
getAnalytics.initialize();
|
||||
subscriptionController.initialize();
|
||||
classController.fixClassPowerLevels();
|
||||
|
||||
startChatWithBotIfNotPresent();
|
||||
inviteBotToExistingSpaces();
|
||||
setPangeaPushRules();
|
||||
}
|
||||
|
||||
/// Initialize controllers
|
||||
|
|
|
|||
|
|
@ -36,6 +36,13 @@ class LearningProgressIndicatorsState
|
|||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
|
||||
// if getAnalytics has already finished initializing,
|
||||
// the data is loaded and should be displayed.
|
||||
if (MatrixState.pangeaController.getAnalytics.initCompleter?.isCompleted ??
|
||||
false) {
|
||||
updateData(null);
|
||||
}
|
||||
_analyticsSubscription = MatrixState
|
||||
.pangeaController.getAnalytics.analyticsStream.stream
|
||||
.listen(updateData);
|
||||
|
|
@ -48,7 +55,7 @@ class LearningProgressIndicatorsState
|
|||
super.dispose();
|
||||
}
|
||||
|
||||
void updateData(AnalyticsStreamUpdate _) {
|
||||
void updateData(AnalyticsStreamUpdate? _) {
|
||||
if (_loading) _loading = false;
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue