mirror of
https://github.com/gabehf/Fladder.git
synced 2026-03-07 21:48:14 -08:00
fix: Bunc of uncaught exceptions
This commit is contained in:
parent
9c964e7b41
commit
9f6aa1e489
6 changed files with 34 additions and 23 deletions
|
|
@ -88,10 +88,12 @@ class _PhotoViewerScreenState extends ConsumerState<PhotoViewerScreen> with Widg
|
||||||
|
|
||||||
final newItems = await Future.value(widget.loadingItems);
|
final newItems = await Future.value(widget.loadingItems);
|
||||||
|
|
||||||
setState(() {
|
if (context.mounted) {
|
||||||
photos = {...photos, ...newItems}.toList();
|
setState(() {
|
||||||
loadingItems = false;
|
photos = {...photos, ...newItems}.toList();
|
||||||
});
|
loadingItems = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,11 @@ import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:fladder/util/adaptive_layout/adaptive_layout.dart';
|
import 'package:fladder/util/adaptive_layout/adaptive_layout.dart';
|
||||||
|
|
||||||
Future<void> showDialogAdaptive(
|
Future<void> showDialogAdaptive({
|
||||||
{required BuildContext context, required Widget Function(BuildContext context) builder}) {
|
required BuildContext context,
|
||||||
if (AdaptiveLayout.of(context).inputDevice == InputDevice.pointer) {
|
required Widget Function(BuildContext context) builder,
|
||||||
|
}) {
|
||||||
|
if (AdaptiveLayout.viewSizeOf(context) >= ViewSize.tablet) {
|
||||||
return showDialog(
|
return showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
useSafeArea: false,
|
useSafeArea: false,
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ class _PosterImageState extends ConsumerState<PosterImage> {
|
||||||
late String currentTag = widget.heroTag == true ? widget.poster.id : UniqueKey().toString();
|
late String currentTag = widget.heroTag == true ? widget.poster.id : UniqueKey().toString();
|
||||||
bool hover = false;
|
bool hover = false;
|
||||||
|
|
||||||
void pressedWidget() async {
|
void pressedWidget(BuildContext context) async {
|
||||||
if (widget.heroTag == false) {
|
if (widget.heroTag == false) {
|
||||||
setState(() {
|
setState(() {
|
||||||
currentTag = widget.poster.id;
|
currentTag = widget.poster.id;
|
||||||
|
|
@ -67,15 +67,12 @@ class _PosterImageState extends ConsumerState<PosterImage> {
|
||||||
if (widget.onPressed != null) {
|
if (widget.onPressed != null) {
|
||||||
widget.onPressed?.call(() async {
|
widget.onPressed?.call(() async {
|
||||||
await navigateToDetails();
|
await navigateToDetails();
|
||||||
if (context.mounted) {
|
context.refreshData();
|
||||||
context.refreshData();
|
|
||||||
}
|
|
||||||
}, widget.poster);
|
}, widget.poster);
|
||||||
} else {
|
} else {
|
||||||
await navigateToDetails();
|
await navigateToDetails();
|
||||||
if (context.mounted) {
|
if (!context.mounted) return;
|
||||||
context.refreshData();
|
context.refreshData();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -319,7 +316,7 @@ class _PosterImageState extends ConsumerState<PosterImage> {
|
||||||
Focus(
|
Focus(
|
||||||
onFocusChange: (value) => setState(() => hover = value),
|
onFocusChange: (value) => setState(() => hover = value),
|
||||||
child: FlatButton(
|
child: FlatButton(
|
||||||
onTap: pressedWidget,
|
onTap: () => pressedWidget(context),
|
||||||
onSecondaryTapDown: (details) async {
|
onSecondaryTapDown: (details) async {
|
||||||
Offset localPosition = details.globalPosition;
|
Offset localPosition = details.globalPosition;
|
||||||
RelativeRect position = RelativeRect.fromLTRB(
|
RelativeRect position = RelativeRect.fromLTRB(
|
||||||
|
|
@ -391,7 +388,7 @@ class _PosterImageState extends ConsumerState<PosterImage> {
|
||||||
Material(
|
Material(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: pressedWidget,
|
onTap: () => pressedWidget(context),
|
||||||
onLongPress: () {
|
onLongPress: () {
|
||||||
showBottomSheetPill(
|
showBottomSheetPill(
|
||||||
context: context,
|
context: context,
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class FladderImage extends ConsumerWidget {
|
||||||
),
|
),
|
||||||
if (!blurOnly)
|
if (!blurOnly)
|
||||||
FadeInImage(
|
FadeInImage(
|
||||||
placeholder: Image.memory(kTransparentImage).image,
|
placeholder: MemoryImage(kTransparentImage),
|
||||||
fit: fit,
|
fit: fit,
|
||||||
placeholderFit: fit,
|
placeholderFit: fit,
|
||||||
excludeFromSemantics: true,
|
excludeFromSemantics: true,
|
||||||
|
|
|
||||||
|
|
@ -27,12 +27,21 @@ class _TrickPlayImageState extends ConsumerState<TrickPlayImage> {
|
||||||
late Offset currentOffset = const Offset(0, 0);
|
late Offset currentOffset = const Offset(0, 0);
|
||||||
String? currentUrl;
|
String? currentUrl;
|
||||||
|
|
||||||
|
bool _isMounted = true;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
loadImage();
|
loadImage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
image?.dispose();
|
||||||
|
_isMounted = false;
|
||||||
|
super.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void didUpdateWidget(covariant TrickPlayImage oldWidget) {
|
void didUpdateWidget(covariant TrickPlayImage oldWidget) {
|
||||||
super.didUpdateWidget(oldWidget);
|
super.didUpdateWidget(oldWidget);
|
||||||
|
|
@ -55,6 +64,7 @@ class _TrickPlayImageState extends ConsumerState<TrickPlayImage> {
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> loadImage() async {
|
Future<void> loadImage() async {
|
||||||
|
if (!_isMounted) return;
|
||||||
if (model.images.isEmpty) return;
|
if (model.images.isEmpty) return;
|
||||||
final newUrl = model.getTile(time);
|
final newUrl = model.getTile(time);
|
||||||
currentOffset = model.offset(time);
|
currentOffset = model.offset(time);
|
||||||
|
|
@ -76,11 +86,10 @@ class _TrickPlayImageState extends ConsumerState<TrickPlayImage> {
|
||||||
final Uint8List bytes = response.bodyBytes;
|
final Uint8List bytes = response.bodyBytes;
|
||||||
final ui.Codec codec = await ui.instantiateImageCodec(bytes);
|
final ui.Codec codec = await ui.instantiateImageCodec(bytes);
|
||||||
final ui.FrameInfo frameInfo = await codec.getNextFrame();
|
final ui.FrameInfo frameInfo = await codec.getNextFrame();
|
||||||
if (context.mounted) {
|
if (!_isMounted) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
image = frameInfo.image;
|
image = frameInfo.image;
|
||||||
});
|
});
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
throw Exception('Failed to load network image');
|
throw Exception('Failed to load network image');
|
||||||
}
|
}
|
||||||
|
|
@ -90,6 +99,7 @@ class _TrickPlayImageState extends ConsumerState<TrickPlayImage> {
|
||||||
final Uint8List bytes = await File(path).readAsBytes();
|
final Uint8List bytes = await File(path).readAsBytes();
|
||||||
final ui.Codec codec = await ui.instantiateImageCodec(bytes);
|
final ui.Codec codec = await ui.instantiateImageCodec(bytes);
|
||||||
final ui.FrameInfo frameInfo = await codec.getNextFrame();
|
final ui.FrameInfo frameInfo = await codec.getNextFrame();
|
||||||
|
if (!_isMounted) return;
|
||||||
setState(() {
|
setState(() {
|
||||||
image = frameInfo.image;
|
image = frameInfo.image;
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ class MediaControlsWrapper extends BaseAudioHandler {
|
||||||
|
|
||||||
Future<void> init() async {
|
Future<void> init() async {
|
||||||
if (!initMediaControls) {
|
if (!initMediaControls) {
|
||||||
|
initMediaControls = true;
|
||||||
await AudioService.init(
|
await AudioService.init(
|
||||||
builder: () => this,
|
builder: () => this,
|
||||||
config: const AudioServiceConfig(
|
config: const AudioServiceConfig(
|
||||||
|
|
@ -66,7 +67,6 @@ class MediaControlsWrapper extends BaseAudioHandler {
|
||||||
androidShowNotificationBadge: true,
|
androidShowNotificationBadge: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
initMediaControls = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final player = switch (ref.read(videoPlayerSettingsProvider.select((value) => value.wantedPlayer))) {
|
final player = switch (ref.read(videoPlayerSettingsProvider.select((value) => value.wantedPlayer))) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue