事件监听
深色模式
以Vue+Vuetify为例
import { useTheme } from 'vuetify';
const theme = useTheme()
onMounted(async ()=>{
const appWindow = getCurrentWindow()
const systemTheme = await appWindow.theme();
theme.change(systemTheme || 'light')
await appWindow.listen('tauri://theme-changed', (event) => {
theme.change(event.payload as string)
})
})文件拖拽
import { path } from '@tauri-apps/api';
import { onBeforeUnmount, onMounted } from 'vue';
import { listen, UnlistenFn } from '@tauri-apps/api/event';
let unlisten: UnlistenFn;
async function dropHandler(targets: string[]) {
const firstPath=targets[0] as string;
// 处理拖拽的文件/目录的路径,比如
let extension;
try {
extension=(await path.extname(firstPath)).toLowerCase();
} catch (_) {
await message('不支持的文件', { title: '无法处理', kind: 'error' });
return;
}
if(extension==='jpeg'||extension==='png'||extension==='jpg'){
files.value = [firstPath];
}else{
await message('不支持的文件', { title: '无法处理', kind: 'error' });
}
}
onMounted(async ()=>{
unlisten = await listen('tauri://drag-drop', async (event: any) => {
const payload = event?.payload;
if (
payload &&
typeof payload === 'object' &&
Array.isArray(payload.paths) &&
typeof payload.paths[0] === 'string'
) {
const targets = payload.paths;
dropHandler(targets);
}
});
})
onBeforeUnmount(() => {
if (unlisten) unlisten();
});