Add setting for low bandwidth mode and use in ImageControl (no persistence yet though)

This commit is contained in:
Hank Grabowski 2022-12-30 11:07:56 -05:00
parent 53e548336f
commit 39ef265bac
4 changed files with 65 additions and 25 deletions

View file

@ -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,

View file

@ -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,

View file

@ -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(),

View 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();
}
}