mirror of
https://gitlab.com/mysocialportal/relatica
synced 2024-10-18 13:33:32 +00:00
Add setting for low bandwidth mode and use in ImageControl (no persistence yet though)
This commit is contained in:
parent
53e548336f
commit
39ef265bac
4 changed files with 65 additions and 25 deletions
|
@ -1,5 +1,8 @@
|
|||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
import '../services/setting_service.dart';
|
||||
|
||||
final _shownImageUrls = <String>{};
|
||||
|
||||
|
@ -26,36 +29,37 @@ class ImageControl extends StatefulWidget {
|
|||
}
|
||||
|
||||
class _ImageControlState extends State<ImageControl> {
|
||||
var shown = false;
|
||||
|
||||
void showImage() {
|
||||
_shownImageUrls.add(widget.imageUrl);
|
||||
setState(() {
|
||||
shown = true;
|
||||
});
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
shown = _shownImageUrls.contains(widget.imageUrl);
|
||||
final image = shown
|
||||
? CachedNetworkImage(
|
||||
imageUrl: widget.imageUrl,
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
)
|
||||
: SizedBox(
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
child: Card(
|
||||
color: Colors.black12,
|
||||
shape: const RoundedRectangleBorder(),
|
||||
child: widget.iconOverride ??
|
||||
const Icon(
|
||||
Icons.image,
|
||||
),
|
||||
),
|
||||
);
|
||||
final shown = !context.watch<SettingsService>().lowBandwidthMode ||
|
||||
_shownImageUrls.contains(widget.imageUrl);
|
||||
late final Widget image;
|
||||
if (shown) {
|
||||
_shownImageUrls.add(widget.imageUrl);
|
||||
image = CachedNetworkImage(
|
||||
imageUrl: widget.imageUrl,
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
);
|
||||
} else {
|
||||
image = SizedBox(
|
||||
width: widget.width,
|
||||
height: widget.height,
|
||||
child: Card(
|
||||
color: Colors.black12,
|
||||
shape: const RoundedRectangleBorder(),
|
||||
child: widget.iconOverride ??
|
||||
const Icon(
|
||||
Icons.image,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
return GestureDetector(
|
||||
onTap: shown ? widget.onTap : showImage,
|
||||
child: image,
|
||||
|
|
|
@ -16,6 +16,7 @@ import 'services/hashtag_service.dart';
|
|||
import 'services/media_upload_attachment_helper.dart';
|
||||
import 'services/notifications_manager.dart';
|
||||
import 'services/secrets_service.dart';
|
||||
import 'services/setting_service.dart';
|
||||
import 'services/timeline_manager.dart';
|
||||
import 'utils/app_scrolling_behavior.dart';
|
||||
|
||||
|
@ -38,6 +39,7 @@ void main() async {
|
|||
final entryManagerService = EntryManagerService();
|
||||
final timelineManager = TimelineManager();
|
||||
final galleryService = GalleryService();
|
||||
getIt.registerLazySingleton(() => SettingsService());
|
||||
getIt.registerLazySingleton<ConnectionsManager>(() => ConnectionsManager());
|
||||
getIt.registerLazySingleton<HashtagService>(() => HashtagService());
|
||||
getIt.registerSingleton(galleryService);
|
||||
|
@ -80,6 +82,10 @@ class App extends StatelessWidget {
|
|||
return Portal(
|
||||
child: MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider<SettingsService>(
|
||||
create: (_) => getIt<SettingsService>(),
|
||||
lazy: true,
|
||||
),
|
||||
ChangeNotifierProvider<AuthService>(
|
||||
create: (_) => getIt<AuthService>(),
|
||||
lazy: true,
|
||||
|
|
|
@ -4,12 +4,19 @@ import 'package:provider/provider.dart';
|
|||
import '../controls/app_bottom_nav_bar.dart';
|
||||
import '../controls/padding.dart';
|
||||
import '../services/auth_service.dart';
|
||||
import '../services/setting_service.dart';
|
||||
|
||||
class ProfileScreen extends StatelessWidget {
|
||||
class ProfileScreen extends StatefulWidget {
|
||||
const ProfileScreen({super.key});
|
||||
|
||||
@override
|
||||
State<ProfileScreen> createState() => _ProfileScreenState();
|
||||
}
|
||||
|
||||
class _ProfileScreenState extends State<ProfileScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final settings = context.watch<SettingsService>();
|
||||
final authService = context.watch<AuthService>();
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
|
@ -19,6 +26,17 @@ class ProfileScreen extends StatelessWidget {
|
|||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Checkbox(
|
||||
value: settings.lowBandwidthMode,
|
||||
onChanged: (value) =>
|
||||
settings.lowBandwidthMode = value ?? false,
|
||||
),
|
||||
Text('Low Bandwidth Mode'),
|
||||
],
|
||||
),
|
||||
Text(
|
||||
'Profile: ${authService.currentClient.fold(onSuccess: (client) => client.credentials.handle, onError: (error) => 'Error Getting Profile')}'),
|
||||
VerticalPadding(),
|
||||
|
|
12
lib/services/setting_service.dart
Normal file
12
lib/services/setting_service.dart
Normal file
|
@ -0,0 +1,12 @@
|
|||
import 'package:flutter/foundation.dart';
|
||||
|
||||
class SettingsService extends ChangeNotifier {
|
||||
var _lowBandwidthMode = true;
|
||||
|
||||
bool get lowBandwidthMode => _lowBandwidthMode;
|
||||
|
||||
set lowBandwidthMode(bool value) {
|
||||
_lowBandwidthMode = value;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue