webview_flutter解決無效的問題


最近在用flutter官方的webview,發現他對input這一系列都不支持,尤其是type='password'這塊,我在自己手機上調試時還會死機。

這里就暫時說一下type=file的情況。這個我之前解決的比較早,但是昨天逛flutter的issues的時候發現還是很多人沒有解決,遂將代碼上傳git。

更改后的git地址,如果覺得有用,歡迎star哦。https://github.com/libo1223/plugins/tree/master/packages/webview_flutter

由於當時寫代碼的時候時間久遠,有些地方可能記錯了,請不要介意。

這個思路很簡單,因為他這邊文件選擇的方法沒執行,自己重寫這個方法,打開一個新頁面去選擇文件,選擇完之后把選到的文件傳回去。

先找到圖下目錄中的FlutterWebview文件。

 

 

 大概在54行的位置(我這邊是54行),找到這句話

webView = new InputAwareWebView(context, containerView);

然后插入如下代碼

/**
     * start
     * input='file'
     * */
    context1 = context;
    webView.setWebChromeClient(new WebChromeClient(){
      @Override
      public boolean onShowFileChooser(
              WebView webView, ValueCallback<Uri[]> filePathCallback,
              FileChooserParams fileChooserParams) {

        //成功跳轉newActivity!!!很 nice
        //跳轉到newActivity去打開文件夾的操作
        Intent intent = new Intent(context1,newActivity.class);
        newActivity.getfilePathCallback(filePathCallback);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context1.startActivity(intent);
        return true;
      }

      public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
        callback.invoke(origin, true, false);
      }

    });


    /**
     * end
     * */

我這邊因為有特殊的需求,所以新開了一個activity去顯示是否打開相機還是打開本地目錄。這個activity是遮照在當前activity上的,背景透明。如果覺得沒必要,想要直接打開文件管理器的話,可以去看一下newactivity里的代碼,進行更改。

不過要提醒的一點是,就是返回數據怎么辦呢,建議自己寫一個onActivityResult方法,然后去MainActivity里添加,注意,是在使用這個插件的地方去添加方法去引導。對這塊感興趣,或者不清楚的可以私信我,QQ:980160988.

如果想要跟我一樣的效果,把我目錄下的newActivity文件拷過去就好了,文件名字可以改成自己喜歡的名字,然后不要忘了去AndroidManifest里去注冊這個activity。

然后我這邊還畫了頁面,把res文件下缺少的東西拷過去就好了。

newActivity里的內容很簡單,無非就是根據按鈕打開相應的東西(相機或者文件管理器)。

項目地址貼在最上面了,如果你覺得有用,希望能給我一個star哦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM