maotoumao/MusicFree · warning
toast.rememberToSave
Error message
toast.rememberToSave
What it means
This is not a thrown exception but a localized warning toast: "Remember to save~" (zh: 请记得保存). The Bottom bar of the music list editor shows it after the user taps the button that removes all checked items from the draft playlist, warning them the removal only lives in the editor state and is not persisted until they explicitly save.
Source
Thrown at src/pages/musicListEditor/components/bottom.tsx:94
resetSelectedIndices();
}
}}
/>
<BottomIcon
icon="trash-outline"
title={t("common.delete")}
color={
selectedItems.length && musicSheet?.id
? "text"
: "textSecondary"
}
onPress={() => {
if (selectedItems.length && musicSheet?.id) {
setEditingMusicList(
produce(prev => prev.filter(_ => !_.checked)),
);
setMusicListChanged(true);
Toast.warn(t("toast.rememberToSave"));
}
}}
/>
</View>
);
}
interface IBottomIconProps {
icon: IIconName;
title: string;
color?: "text" | "textSecondary";
onPress: () => void;
}
function BottomIcon(props: IBottomIconProps) {
const { icon, title, onPress, color = "text" } = props;
const colors = useColors();
return (
<Pressable
View on GitHub (pinned to d118b18b3d)
Solutions
- After removing checked items, explicitly press the save button in the editor to persist the filtered playlist to the music sheet.
- Check musicListChanged before leaving the editor and save or discard to avoid losing the removal.
- If the toast is confusing UX, make the save flow automatic or navigate the user to save after batch removal.
- If the toast text is wrong or untranslated, verify the "toast.rememberToSave" key exists in all files under src/core/i18n/languages/.
Example fix
// before
Toast.warn(t("toast.rememberToSave"));
// after
// keep the warning, then persist immediately if desired
Toast.warn(t("toast.rememberToSave"));
await saveMusicList(musicSheet.id, nextList); // explicit persistence Defensive patterns
Strategy: validation
Validate before calling
if (selectedItems.length && musicSheet?.id) {
setEditingMusicList(produce(prev => prev.filter(_ => !_.checked)));
setMusicListChanged(true);
Toast.warn(t("toast.rememberToSave"));
} Type guard
const canRemove =
Array.isArray(selectedItems) && selectedItems.length > 0 &&
typeof musicSheet?.id === "string" && musicSheet.id.length > 0; Prevention
- Treat the draft editor state as unsaved: always check musicListChanged before leaving the screen and prompt to save.
- Persist the playlist immediately after batch operations if losing changes is unacceptable.
- Ensure every locale file defines "toast.rememberToSave" so the toast never renders the raw key.
When it happens
Trigger: User presses the removal button in the music list editor Bottom bar while selectedItems.length > 0 and musicSheet?.id is set; the checked rows are filtered out of the draft via produce() and musicListChanged is set true, then this warning toast fires.
Common situations: Bulk-removing songs from a playlist then closing the editor without saving and losing changes; users unfamiliar with the explicit save step expect the removal to persist immediately.
Related errors
- toast.backupFail
- toast.resumePreCheckFailed
- panel.imageViewer.saveImageFail
- toast.resumeFail
- dialog.markdownDialog.openExternalLink
AI-assisted analysis of maotoumao/MusicFree@d118b18b3d (2026-08-30).
Data as JSON: /api/errors/0280127c6365fab6.
Report an issue: GitHub.