Fix additional lifecycle bugs: countdown timer leak, PreviewScreen unmount state updates, CameraView ready loops
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.3 MiB |
@@ -72,6 +72,14 @@ export default function PreviewScreen({
|
|||||||
|
|
||||||
// Sticker state
|
// Sticker state
|
||||||
const [stickers, setStickers] = useState<StickerData[]>([]);
|
const [stickers, setStickers] = useState<StickerData[]>([]);
|
||||||
|
const [selectedImageIndex, setSelectedImageIndex] = useState<number | null>(null);
|
||||||
|
|
||||||
|
const mountedRef = useRef(true);
|
||||||
|
useEffect(() => {
|
||||||
|
return () => {
|
||||||
|
mountedRef.current = false;
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
const [selectedStickerId, setSelectedStickerId] = useState<string | null>(null);
|
const [selectedStickerId, setSelectedStickerId] = useState<string | null>(null);
|
||||||
const [showStickerTray, setShowStickerTray] = useState<boolean>(false);
|
const [showStickerTray, setShowStickerTray] = useState<boolean>(false);
|
||||||
|
|
||||||
@@ -214,6 +222,7 @@ export default function PreviewScreen({
|
|||||||
try {
|
try {
|
||||||
setStatusMessage('Bild wird generiert...');
|
setStatusMessage('Bild wird generiert...');
|
||||||
const printUri = await captureComposite(currentPhoto);
|
const printUri = await captureComposite(currentPhoto);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
|
|
||||||
setStatusMessage('Druckauftrag wird an Drucker gesendet...');
|
setStatusMessage('Druckauftrag wird an Drucker gesendet...');
|
||||||
await printImageLocal(printUri, {
|
await printImageLocal(printUri, {
|
||||||
@@ -223,13 +232,16 @@ export default function PreviewScreen({
|
|||||||
|
|
||||||
setStatusMessage('Wird in Galerie gespeichert...');
|
setStatusMessage('Wird in Galerie gespeichert...');
|
||||||
await saveToGallery(printUri);
|
await saveToGallery(printUri);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
|
|
||||||
setStatusMessage('Druck erfolgreich! Viel Spaß! 🎉');
|
setStatusMessage('Druck erfolgreich! Viel Spaß! 🎉');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
onReset();
|
onReset();
|
||||||
}, 2000);
|
}, 2000);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
console.error('Printing failed:', error);
|
console.error('Printing failed:', error);
|
||||||
alert('Fehler: ' + error.message);
|
alert('Fehler: ' + error.message);
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
@@ -243,16 +255,20 @@ export default function PreviewScreen({
|
|||||||
setStatusMessage('Bild wird generiert...');
|
setStatusMessage('Bild wird generiert...');
|
||||||
try {
|
try {
|
||||||
const saveUri = await captureComposite(currentPhoto);
|
const saveUri = await captureComposite(currentPhoto);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
|
|
||||||
setStatusMessage('Wird in Galerie gespeichert...');
|
setStatusMessage('Wird in Galerie gespeichert...');
|
||||||
await saveToGallery(saveUri);
|
await saveToGallery(saveUri);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
|
|
||||||
setStatusMessage('Erfolgreich gespeichert!');
|
setStatusMessage('Erfolgreich gespeichert!');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
onReset();
|
onReset();
|
||||||
}, 1500);
|
}, 1500);
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
console.error('Saving failed:', error);
|
console.error('Saving failed:', error);
|
||||||
alert('Fehler: ' + error.message);
|
alert('Fehler: ' + error.message);
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
@@ -272,13 +288,17 @@ export default function PreviewScreen({
|
|||||||
setStatusMessage('Wird gespeichert...');
|
setStatusMessage('Wird gespeichert...');
|
||||||
try {
|
try {
|
||||||
const capturedUri = await captureComposite(state.currentPhoto);
|
const capturedUri = await captureComposite(state.currentPhoto);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
await saveToGallery(capturedUri);
|
await saveToGallery(capturedUri);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
setStatusMessage('Erfolgreich gespeichert!');
|
setStatusMessage('Erfolgreich gespeichert!');
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
state.onReset();
|
state.onReset();
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
console.error('Auto-saving on exit failed:', error);
|
console.error('Auto-saving on exit failed:', error);
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
state.onReset();
|
state.onReset();
|
||||||
@@ -307,9 +327,12 @@ export default function PreviewScreen({
|
|||||||
setStatusMessage('Wird vor dem Wiederholen gespeichert...');
|
setStatusMessage('Wird vor dem Wiederholen gespeichert...');
|
||||||
try {
|
try {
|
||||||
const capturedUri = await captureComposite(currentPhoto);
|
const capturedUri = await captureComposite(currentPhoto);
|
||||||
|
if (!mountedRef.current) return;
|
||||||
await saveToGallery(capturedUri);
|
await saveToGallery(capturedUri);
|
||||||
} catch (error) {
|
if (!mountedRef.current) return;
|
||||||
console.error('Auto-saving before retake failed:', error);
|
} catch (e) {
|
||||||
|
if (!mountedRef.current) return;
|
||||||
|
console.error('Failed to auto-save before retake:', e);
|
||||||
}
|
}
|
||||||
setIsProcessing(false);
|
setIsProcessing(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user