diff --git a/src/utils/uploadFiles.js b/src/utils/uploadFiles.js index 70a5f45..feb7b8e 100644 --- a/src/utils/uploadFiles.js +++ b/src/utils/uploadFiles.js @@ -20,11 +20,101 @@ export function uploadImgFile(renderFun) { if (window.FlutterPageControl) { console.log('使用window.FlutterPageControl.postMessage(`uploadImgFile`)') // 直接使用Flutter通道 - const result = window.FlutterPageControl.postMessage(`uploadImgFile`) - console.log('result:', result) - // renderFun('') + window.FlutterPageControl.postMessage(`uploadImgFile`) + + try { + if (android()) { + console.debug('Flutter Android WebView 检测') + console.debug('window.app 对象:', window.app) + + // 检查Flutter注入的接口 + if (window.app) { + console.debug('window.app 的所有方法:') + console.debug(Object.keys(window.app)) + + // 检查具体的方法 + console.debug('getAccessOrigin 方法存在?', typeof window.app.getAccessOrigin) + console.debug( + 'getAccessOrigin 是函数?', + typeof window.app.getAccessOrigin === 'function' + ) + } + + // 等待Flutter注入完成 + const waitForFlutterInterface = () => { + let attempts = 0 + const maxAttempts = 100 // 最多等待5秒 + + const checkInterface = () => { + attempts++ + console.debug(`尝试第 ${attempts} 次检查Flutter接口...`) + + if ( + window.app && + window.app.getAccessOrigin && + typeof window.app.getAccessOrigin === 'function' + ) { + console.debug('Flutter接口检测成功,调用 getAccessOrigin') + try { + const result = window.app.getAccessOrigin() + console.debug('getAccessOrigin 返回结果:', result) + renderFun(result) + } catch (error) { + console.error('调用 getAccessOrigin 出错:', error) + } + } else if (attempts < maxAttempts) { + // 继续等待 + setTimeout(checkInterface, 100) + } else { + console.error('Flutter接口注入超时,使用默认数据') + // 使用默认的开发数据 + const mockAccess = JSON.stringify({}) + renderFun(mockAccess) + } + } + + checkInterface() + } + + // 如果window.app已存在,直接检查,否则等待 + if (window.app) { + waitForFlutterInterface() + } else { + console.debug('等待Flutter注入window.app...') + // 监听window.app的创建 + let checkCount = 0 + const checkApp = () => { + checkCount++ + if (window.app) { + console.debug('检测到window.app,开始连接') + waitForFlutterInterface() + } else if (checkCount < 50) { + setTimeout(checkApp, 100) + } else { + console.error('等待window.app超时') + // 手动通知Flutter注入接口 + if (window.FlutterApp && window.FlutterApp.postMessage) { + window.FlutterApp.postMessage('requestAccessOrigin') + } + } + } + checkApp() + } + } else { + console.debug('非移动设备环境') + // 非APP环境,可能是浏览器调试 + console.warn('Not in APP environment, using mock data for development') + // 开发环境可以提供模拟数据 + if (process.env.NODE_ENV === 'development') { + const mockAccess = JSON.stringify({}) + setTimeout(() => renderFun(mockAccess), 100) + } + } + } catch (error) { + console.error('Failed to connect to APP:', error) + } } else { - console.log('window.app.uploadImgFile和window.FlutterPageControl都不存在,使用降级处理') + console.log('window.FlutterPageControl不存在') // 降级处理 const mockAccess = JSON.stringify('') renderFun(mockAccess)