事件监听

事件监听

深色模式

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();
});