Refactor Riverpod log and hashtag service to not require a global container handle

Tags still need it until Client is elevated
This commit is contained in:
Hank Grabowski 2024-09-04 15:01:40 -04:00
parent 4cb45cd894
commit a1cb3d2d37
6 changed files with 23 additions and 26 deletions

View file

@ -15,7 +15,6 @@ import 'friendica_client/friendica_client.dart';
import 'globals.dart';
import 'models/auth/profile.dart';
import 'models/instance_info.dart';
import 'riverpod_controllers/hashtag_service.dart';
import 'services/auth_service.dart';
import 'services/blocks_manager.dart';
import 'services/connections_manager.dart';
@ -195,10 +194,6 @@ void clearCaches() {
_logger.severe('Error clearing GalleryService Repo: $error'),
);
rootRiverpodProviderContainer
?.read(hashtagServiceProvider().notifier)
.clear();
getIt<ActiveProfileSelector<NotificationsManager>>().activeEntry.match(
onSuccess: (manager) => manager.clear(),
onError: (error) =>

View file

@ -10,7 +10,6 @@ import 'package:provider/provider.dart';
import 'app_theme.dart';
import 'di_initialization.dart';
import 'globals.dart';
import 'riverpod_controllers/log_service.dart';
import 'routes.dart';
import 'services/auth_service.dart';
import 'services/blocks_manager.dart';
@ -37,21 +36,6 @@ void main() async {
// await dotenv.load(fileName: '.env');
Logger.root.level = Level.OFF;
Logger.root.onRecord.listen((event) {
if (rootRiverpodProviderContainer == null) {
preInitializationLogEventQueue.add(event);
return;
}
final logService =
rootRiverpodProviderContainer!.read(logServiceProvider.notifier);
if (preInitializationLogEventQueue.isNotEmpty) {
preInitializationLogEventQueue.forEach(logService.add);
preInitializationLogEventQueue.clear();
}
logService.add(event);
});
await fixLetsEncryptCertOnOldAndroid();
await dependencyInjectionInitialization();
await setupPackageInfoAndUserAgent();

View file

@ -0,0 +1,11 @@
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'hashtag_service.dart';
part 'cache_clear_service.g.dart';
@riverpod
bool cacheClearService(CacheClearServiceRef ref) {
ref.read(hashtagServiceProvider().notifier).clear();
return true;
}

View file

@ -15,6 +15,9 @@ class LogService extends _$LogService {
@override
UnmodifiableListView<LogRecord> build() {
Logger.root.onRecord.listen((event) {
add(event);
});
return UnmodifiableListView(_events);
}
@ -27,6 +30,7 @@ class LogService extends _$LogService {
if (_events.length > _maxItems) {
_events.removeFirst();
}
ref.invalidateSelf();
}
}

View file

@ -6,7 +6,7 @@ part of 'log_service.dart';
// RiverpodGenerator
// **************************************************************************
String _$logServiceHash() => r'923de9aab8ec9d053ba8b3b88345e2d1b842b8cb';
String _$logServiceHash() => r'5bbf2513784053f797ba73b282d52d9c6e465782';
/// See also [LogService].
@ProviderFor(LogService)

View file

@ -1,6 +1,7 @@
import 'package:color_blindness/color_blindness.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
@ -10,16 +11,17 @@ import '../controls/responsive_max_width.dart';
import '../controls/standard_appbar.dart';
import '../di_initialization.dart';
import '../globals.dart';
import '../riverpod_controllers/cache_clear_service.dart';
import '../routes.dart';
import '../services/setting_service.dart';
import '../utils/known_network_extensions.dart';
import '../utils/theme_mode_extensions.dart';
class SettingsScreen extends StatelessWidget {
class SettingsScreen extends ConsumerWidget {
const SettingsScreen({super.key});
@override
Widget build(BuildContext context) {
Widget build(BuildContext context, WidgetRef ref) {
final settings = context.watch<SettingsService>();
return Scaffold(
appBar: StandardAppBar.build(context, 'Settings'),
@ -35,7 +37,7 @@ class SettingsScreen extends StatelessWidget {
buildSpoilerHidingEnabledWidget(settings),
buildThemeWidget(settings),
if (!kReleaseMode) buildColorBlindnessTestSettings(settings),
buildClearCaches(context),
buildClearCaches(context, ref),
buildLogPanel(context, settings),
const NetworkCapabilitiesWidget(),
],
@ -124,7 +126,7 @@ class SettingsScreen extends StatelessWidget {
);
}
Widget buildClearCaches(BuildContext context) {
Widget buildClearCaches(BuildContext context, WidgetRef ref) {
return ListTile(
title: const Text('Clear local caches'),
subtitle: const Text('This does not affect server side data at all.'),
@ -136,6 +138,7 @@ class SettingsScreen extends StatelessWidget {
return;
}
ref.read(cacheClearServiceProvider);
clearCaches();
},
child: const Text('Clear'),