Add logged-in profile aware image control wrapping CachedNetworkImage

codemagic-setup
Hank Grabowski 2023-03-20 10:06:44 -04:00
rodzic 2d752bb0d9
commit a7f3bb26ad
14 zmienionych plików z 81 dodań i 23 usunięć

Wyświetl plik

@ -1,4 +1,3 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import '../../globals.dart';
@ -6,6 +5,7 @@ import '../../models/image_entry.dart';
import '../../screens/existing_image_selector_screen.dart';
import '../../screens/image_viewer_screen.dart';
import '../../serializers/friendica/image_entry_friendica_extensions.dart';
import '../login_aware_cached_network_image.dart';
import '../padding.dart';
class GallerySelectorControl extends StatefulWidget {
@ -76,7 +76,7 @@ class _GallerySelectorControlState extends State<GallerySelectorControl> {
});
}
},
child: CachedNetworkImage(
child: LoginAwareCachedNetworkImage(
width: thumbnailSize,
height: thumbnailSize,
imageUrl: item.thumbnailUrl,

Wyświetl plik

@ -1,8 +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';
import 'login_aware_cached_network_image.dart';
final _shownImageUrls = <String>{};
@ -43,7 +43,7 @@ class _ImageControlState extends State<ImageControl> {
late final Widget image;
if (shown) {
_shownImageUrls.add(widget.imageUrl);
image = CachedNetworkImage(
image = LoginAwareCachedNetworkImage(
imageUrl: widget.imageUrl,
width: widget.width,
height: widget.height,

Wyświetl plik

@ -0,0 +1,43 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
import '../services/auth_service.dart';
class LoginAwareCachedNetworkImage extends StatelessWidget {
static final _logger = Logger('$LoginAwareCachedNetworkImage');
final String imageUrl;
final double? width;
final double? height;
const LoginAwareCachedNetworkImage({
super.key,
required this.imageUrl,
this.width,
this.height,
});
@override
Widget build(BuildContext context) {
final profile = context.watch<AccountsService>().currentProfile;
Map<String, String>? headers;
try {
final imageServer = Uri.parse(imageUrl).host;
if (imageServer == profile.serverName) {
headers = {'Authorization': profile.credentials.authHeaderValue};
}
} catch (e) {
_logger.severe('Error Parsing ImageURL: $e');
}
return CachedNetworkImage(
httpHeaders: headers,
imageUrl: imageUrl,
width: width,
height: height,
);
}
}

Wyświetl plik

@ -1,10 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import '../globals.dart';
import '../routes.dart';
import '../services/auth_service.dart';
import 'login_aware_cached_network_image.dart';
class StandardAppDrawer extends StatelessWidget {
@override
@ -23,7 +23,8 @@ class StandardAppDrawer extends StatelessWidget {
}
},
leading: CircleAvatar(
child: CachedNetworkImage(imageUrl: p.avatar)),
child:
LoginAwareCachedNetworkImage(imageUrl: p.avatar)),
title: Text(
p.username,
style: p == getIt<AccountsService>().currentProfile

Wyświetl plik

@ -1,8 +1,9 @@
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import '../../controls/login_aware_cached_network_image.dart';
class MediaUploadAttachment {
final String localFilePath;
@ -37,7 +38,7 @@ class MediaUploadAttachment {
Widget getPreviewImage() {
if (isExistingServerItem) {
return CachedNetworkImage(imageUrl: remoteUrl);
return LoginAwareCachedNetworkImage(imageUrl: remoteUrl);
}
return Image.file(File(localFilePath));

Wyświetl plik

@ -1,4 +1,3 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:go_router/go_router.dart';
@ -11,6 +10,7 @@ import '../controls/autocomplete/hashtag_autocomplete_options.dart';
import '../controls/autocomplete/mention_autocomplete_options.dart';
import '../controls/entry_media_attachments/gallery_selector_control.dart';
import '../controls/entry_media_attachments/media_uploads_control.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../controls/padding.dart';
import '../controls/standard_appbar.dart';
import '../controls/timeline/status_header_control.dart';
@ -504,7 +504,8 @@ class _EditorScreenState extends State<EditorScreen> {
final currentImage = Container(
width: width,
height: height,
child: CachedNetworkImage(imageUrl: preview.selectedImageUrl));
child:
LoginAwareCachedNetworkImage(imageUrl: preview.selectedImageUrl));
if (preview.availableImageUrls.length < 2) {
return currentImage;

Wyświetl plik

@ -1,7 +1,7 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../models/gallery_data.dart';
import '../models/image_entry.dart';
import '../serializers/friendica/image_entry_friendica_extensions.dart';
@ -118,7 +118,7 @@ class _ExistingImageSelectorScreenState
nextPageOnly: true,
);
}
final imageWidget = CachedNetworkImage(
final imageWidget = LoginAwareCachedNetworkImage(
imageUrl: image.thumbnailUrl,
);
final selected = selectedImages.contains(image);

Wyświetl plik

@ -1,9 +1,9 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:relatica/utils/active_profile_selector.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../controls/padding.dart';
import '../models/connection.dart';
import '../services/connections_manager.dart';
@ -74,7 +74,7 @@ class _FollowRequestAdjudicationScreenState
return Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
CachedNetworkImage(imageUrl: contact.avatarUrl.toString()),
LoginAwareCachedNetworkImage(imageUrl: contact.avatarUrl.toString()),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,

Wyświetl plik

@ -1,8 +1,8 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:provider/provider.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../controls/standard_appbar.dart';
import '../controls/status_and_refresh_button.dart';
import '../globals.dart';
@ -122,7 +122,7 @@ class GalleryScreen extends StatelessWidget {
);
}));
},
child: CachedNetworkImage(
child: LoginAwareCachedNetworkImage(
width: thumbnailDimension,
height: thumbnailDimension,
imageUrl: image.thumbnailUrl,

Wyświetl plik

@ -1,4 +1,3 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';
@ -6,6 +5,7 @@ import 'package:provider/provider.dart';
import '../controls/app_bottom_nav_bar.dart';
import '../controls/linear_status_indicator.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../controls/padding.dart';
import '../controls/standard_app_drawer.dart';
import '../controls/timeline/timeline_panel.dart';
@ -86,7 +86,7 @@ class _HomeScreenState extends State<HomeScreen> {
onPressed: () {
Scaffold.of(context).openDrawer();
},
icon: CachedNetworkImage(
icon: LoginAwareCachedNetworkImage(
imageUrl: accountService.currentProfile.avatar));
})
: null,

Wyświetl plik

@ -1,6 +1,5 @@
import 'dart:io';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
@ -8,6 +7,7 @@ import 'package:flutter_file_dialog/flutter_file_dialog.dart';
import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../friendica_client/friendica_client.dart';
import '../globals.dart';
import '../models/media_attachment.dart';
@ -101,7 +101,7 @@ class _ImageViewerScreenState extends State<ImageViewerScreen> {
child: InteractiveViewer(
maxScale: 10.0,
scaleFactor: 400,
child: CachedNetworkImage(
child: LoginAwareCachedNetworkImage(
imageUrl: widget.attachments[index].uri.toString()),
),
);

Wyświetl plik

@ -1,10 +1,10 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_widget_from_html_core/flutter_widget_from_html_core.dart';
import 'package:go_router/go_router.dart';
import 'package:provider/provider.dart';
import 'package:relatica/utils/active_profile_selector.dart';
import '../controls/login_aware_cached_network_image.dart';
import '../controls/padding.dart';
import '../globals.dart';
import '../models/connection.dart';
@ -59,7 +59,8 @@ class _UserProfileScreenState extends State<UserProfileScreen> {
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
CachedNetworkImage(imageUrl: profile.avatarUrl.toString()),
LoginAwareCachedNetworkImage(
imageUrl: profile.avatarUrl.toString()),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,

Wyświetl plik

@ -1,3 +1,6 @@
import 'package:relatica/utils/html_to_edit_text_helper.dart';
import 'package:relatica/utils/string_utils.dart';
import '../../models/link_preview_data.dart';
extension LinkPreviewExtension on LinkPreviewData {
@ -6,6 +9,9 @@ extension LinkPreviewExtension on LinkPreviewData {
return "[attachment type='link' url='$link' title='$title']$description[/attachment]";
}
return "[attachment type='link' url='$link' title='$title' image='$selectedImageUrl']$description[/attachment]";
final sanitizedTitle = toEditTextField(title).stripHyperlinks();
final sanitizedDescription = toEditTextField(description).stripHyperlinks();
return "[attachment type='link' url='$link' title='$sanitizedTitle' image='$selectedImageUrl']$sanitizedDescription[/attachment]";
}
}

Wyświetl plik

@ -6,4 +6,9 @@ extension StringUtils on String {
return '${substring(0, length)}...';
}
String stripHyperlinks() =>
replaceAll(RegExp(
r"(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?"),
"");
}