refactor: Use dart blurhash
This commit is contained in:
parent
1271441eb0
commit
25ec229ace
5 changed files with 67 additions and 22 deletions
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:flutter_blurhash/flutter_blurhash.dart';
|
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/config/app_config.dart';
|
import 'package:fluffychat/config/app_config.dart';
|
||||||
import 'package:fluffychat/pages/image_viewer/image_viewer.dart';
|
import 'package:fluffychat/pages/image_viewer/image_viewer.dart';
|
||||||
import 'package:fluffychat/widgets/mxc_image.dart';
|
import 'package:fluffychat/widgets/mxc_image.dart';
|
||||||
|
import '../../../widgets/blur_hash.dart';
|
||||||
|
|
||||||
class ImageBubble extends StatelessWidget {
|
class ImageBubble extends StatelessWidget {
|
||||||
final Event event;
|
final Event event;
|
||||||
|
|
@ -40,15 +40,11 @@ class ImageBubble extends StatelessWidget {
|
||||||
event.infoMap['xyz.amorgan.blurhash'] is String
|
event.infoMap['xyz.amorgan.blurhash'] is String
|
||||||
? event.infoMap['xyz.amorgan.blurhash']
|
? event.infoMap['xyz.amorgan.blurhash']
|
||||||
: 'LEHV6nWB2yk8pyo0adR*.7kCMdnj';
|
: 'LEHV6nWB2yk8pyo0adR*.7kCMdnj';
|
||||||
return SizedBox(
|
return BlurHash(
|
||||||
|
blurhash: blurHashString,
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
child: BlurHash(
|
fit: fit,
|
||||||
hash: blurHashString,
|
|
||||||
decodingWidth: width.round(),
|
|
||||||
decodingHeight: height.round(),
|
|
||||||
imageFit: fit,
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@ import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:chewie/chewie.dart';
|
import 'package:chewie/chewie.dart';
|
||||||
import 'package:flutter_blurhash/flutter_blurhash.dart';
|
|
||||||
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
import 'package:flutter_gen/gen_l10n/l10n.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
import 'package:path_provider/path_provider.dart';
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
@ -14,6 +13,7 @@ import 'package:video_player/video_player.dart';
|
||||||
import 'package:fluffychat/pages/chat/events/image_bubble.dart';
|
import 'package:fluffychat/pages/chat/events/image_bubble.dart';
|
||||||
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
import 'package:fluffychat/utils/localized_exception_extension.dart';
|
||||||
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
|
import 'package:fluffychat/utils/matrix_sdk_extensions/event_extension.dart';
|
||||||
|
import 'package:fluffychat/widgets/blur_hash.dart';
|
||||||
import '../../../utils/error_reporter.dart';
|
import '../../../utils/error_reporter.dart';
|
||||||
|
|
||||||
class EventVideoPlayer extends StatefulWidget {
|
class EventVideoPlayer extends StatefulWidget {
|
||||||
|
|
@ -112,7 +112,7 @@ class EventVideoPlayerState extends State<EventVideoPlayer> {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
BlurHash(hash: blurHash),
|
BlurHash(blurhash: blurHash, width: 300, height: 300),
|
||||||
Center(
|
Center(
|
||||||
child: OutlinedButton.icon(
|
child: OutlinedButton.icon(
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
|
|
|
||||||
57
lib/widgets/blur_hash.dart
Normal file
57
lib/widgets/blur_hash.dart
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
import 'dart:typed_data';
|
||||||
|
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'package:blurhash_dart/blurhash_dart.dart' as b;
|
||||||
|
import 'package:image/image.dart' as image;
|
||||||
|
|
||||||
|
class BlurHash extends StatefulWidget {
|
||||||
|
final double width;
|
||||||
|
final double height;
|
||||||
|
final String blurhash;
|
||||||
|
final BoxFit fit;
|
||||||
|
|
||||||
|
const BlurHash({
|
||||||
|
super.key,
|
||||||
|
String? blurhash,
|
||||||
|
required this.width,
|
||||||
|
required this.height,
|
||||||
|
this.fit = BoxFit.cover,
|
||||||
|
}) : blurhash = blurhash ?? 'LEHV6nWB2yk8pyo0adR*.7kCMdnj';
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<BlurHash> createState() => _BlurHashState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _BlurHashState extends State<BlurHash> {
|
||||||
|
Uint8List? _data;
|
||||||
|
|
||||||
|
Future<Uint8List> getBlurhashData() async {
|
||||||
|
final blurhash = b.BlurHash.decode(widget.blurhash);
|
||||||
|
final img = blurhash.toImage(widget.width.round(), widget.height.round());
|
||||||
|
return _data ??= Uint8List.fromList(image.encodePng(img));
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return FutureBuilder<Uint8List>(
|
||||||
|
future: getBlurhashData(),
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
final data = snapshot.data;
|
||||||
|
if (data == null) {
|
||||||
|
return Container(
|
||||||
|
width: widget.width,
|
||||||
|
height: widget.height,
|
||||||
|
color: Theme.of(context).colorScheme.surface,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return Image.memory(
|
||||||
|
data,
|
||||||
|
fit: widget.fit,
|
||||||
|
width: widget.width,
|
||||||
|
height: widget.height,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
14
pubspec.lock
14
pubspec.lock
|
|
@ -438,14 +438,6 @@ packages:
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.0"
|
version: "1.5.0"
|
||||||
flutter_blurhash:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: flutter_blurhash
|
|
||||||
sha256: "5e67678e479ac639069d7af1e133f4a4702311491188ff3e0227486430db0c06"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "0.8.2"
|
|
||||||
flutter_cache_manager:
|
flutter_cache_manager:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
@ -905,13 +897,13 @@ packages:
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.2"
|
version: "4.0.2"
|
||||||
image:
|
image:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: image
|
name: image
|
||||||
sha256: "028f61960d56f26414eb616b48b04eb37d700cbe477b7fb09bf1d7ce57fd9271"
|
sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.1.3"
|
version: "4.1.7"
|
||||||
image_picker:
|
image_picker:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,6 @@ dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
flutter_app_badger: ^1.5.0
|
flutter_app_badger: ^1.5.0
|
||||||
flutter_blurhash: ^0.8.2
|
|
||||||
flutter_cache_manager: ^3.3.0
|
flutter_cache_manager: ^3.3.0
|
||||||
flutter_file_dialog: ^3.0.2
|
flutter_file_dialog: ^3.0.2
|
||||||
flutter_foreground_task: ^6.0.0+1
|
flutter_foreground_task: ^6.0.0+1
|
||||||
|
|
@ -59,6 +58,7 @@ dependencies:
|
||||||
hive_flutter: ^1.1.0
|
hive_flutter: ^1.1.0
|
||||||
html: ^0.15.4
|
html: ^0.15.4
|
||||||
http: ^0.13.6
|
http: ^0.13.6
|
||||||
|
image: ^4.1.7
|
||||||
image_picker: ^1.0.0
|
image_picker: ^1.0.0
|
||||||
intl: any
|
intl: any
|
||||||
just_audio: ^0.9.30
|
just_audio: ^0.9.30
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue