Addresses an issue with plugin calls on Go (Desktop) (#241)

This commit is contained in:
Miguel Ruivo 2020-04-17 13:26:15 +01:00
parent e39aa10134
commit c13124f9bb
6 changed files with 64 additions and 45 deletions

View File

@ -1,10 +1,14 @@
## 1.6.2
## 1.6.3+1
Addresses an issue with plugin calls on Go (Desktop) - Linux & Windows
* Updates GO (Desktop) to support multiple extension filters.
## 1.6.3
Addresses an issue with plugin calls on Go (Desktop) - MacOS
## 1.6.2
Updates Go (Desktop) to support multiple extension filters.
## 1.6.1
* Addresses an issue that could result in permission handler resolving requests from other activities.
Addresses an issue that could result in permission handler resolving requests from other activities.
## 1.6.0
@ -18,12 +22,10 @@
* Adds check that ensures that you one uses `FileType.custom` when providing a custom file extension filter;
## 1.5.0+2
* Updates channel name on iOS.
Updates channel name on iOS.
## 1.5.0+1
* Adds temporary workaround for (#49365)(https://github.com/flutter/flutter/issues/49365) until 1.14.6 lands on stable channel.
Adds temporary workaround for (#49365)(https://github.com/flutter/flutter/issues/49365) until 1.14.6 lands on stable channel.
## 1.5.0
@ -31,11 +33,9 @@
* Added support for new [Android plugins APIs](https://flutter.dev/docs/development/packages-and-plugins/plugin-api-migration) (Android V2 embedding);
## 1.4.3+2
Updates dependencies.
## 1.4.3+1
Removes checked flutter_export_environment.sh from example app.
## 1.4.3
@ -44,7 +44,6 @@ Removes checked flutter_export_environment.sh from example app.
* Fixes an issue that could result in a crash when tapping multiple times in the same media file while picking, on some iOS devices (#171).
## 1.4.2+1
Updates go-flutter dependencies.
## 1.4.2

View File

@ -9,24 +9,36 @@ import (
"github.com/pkg/errors"
)
func fileFilter(method string, extensions []string, size int) (string, error) {
func fileFilter(method string, extensions []string, size int, multi bool) (string, error) {
switch method {
case "any":
case "ANY":
if multi {
return "*", nil
}
return `"public.item"`, nil
case "image":
case "IMAGE":
if multi {
return "jpg, jpeg, bmp, gif, png", nil
}
return `"public.image"`, nil
case "audio":
case "AUDIO":
if multi {
return "mp3, wav, midi, ogg, aac", nil
}
return `"public.audio"`, nil
case "video":
case "VIDEO":
if multi {
return "webm, mpeg, mkv, mp4, avi, mov, flv", nil
}
return `"public.movie"`, nil
case "custom":
case "CUSTOM":
var i int
var filters = ""
for i = 0 ; i<size ; i++ {
filters += `"` + extensions[i] + `"`
if i < size - 1 {
filters += `,`
}
for i = 0; i < size; i++ {
filters += extensions[i]
if i < size-1 {
filters += ", "
}
}
return filters, nil
default:

View File

@ -1,27 +1,25 @@
package file_picker
import (
"strings"
"github.com/gen2brain/dlgs"
"github.com/pkg/errors"
)
func fileFilter(method string, extensions []string, size int) (string, error) {
func fileFilter(method string, extensions []string, size int, isMulti bool) (string, error) {
switch method {
case "any":
case "ANY":
return `*.*`, nil
case "image":
case "IMAGE":
return `*.png *.jpg *.jpeg`, nil
case "audio":
return `*.mp3`, nil
case "video":
case "AUDIO":
return `*.mp3 *.wav *.midi *.ogg *.aac`, nil
case "VIDEO":
return `*.webm *.mpeg *.mkv *.mp4 *.avi *.mov *.flv`, nil
case "custom":
case "CUSTOM":
var i int
var filters = ""
for i = 0 ; i<size ; i++ {
filters += `*.` + extensions[i] + ` `
for i = 0; i < size; i++ {
filters += `*.` + extensions[i] + ` `
}
return filters, nil
default:

View File

@ -7,17 +7,17 @@ import (
"github.com/pkg/errors"
)
func fileFilter(method string) (string, error) {
func fileFilter(method string, extensions []string, size int, isMulti bool) (string, error) {
switch method {
case "any":
case "ANY":
return "*", nil
case "image":
case "IMAGE":
return "Images (*.jpeg,*.png,*.gif)\x00*.jpg;*.jpeg;*.png;*.gif\x00All Files (*.*)\x00*.*\x00\x00", nil
case "audio":
case "AUDIO":
return "Audios (*.mp3)\x00*.mp3\x00All Files (*.*)\x00*.*\x00\x00", nil
case "video":
case "VIDEO":
return "Videos (*.webm,*.wmv,*.mpeg,*.mkv,*.mp4,*.avi,*.mov,*.flv)\x00*.webm;*.wmv;*.mpeg;*.mkv;*mp4;*.avi;*.mov;*.flv\x00All Files (*.*)\x00*.*\x00\x00", nil
case "custom":
case "CUSTOM":
var i int
var filters = "Files ("
for i = 0 ; i<size ; i++ {

20
go/plugin.go Normal file → Executable file
View File

@ -20,18 +20,28 @@ func (p *FilePickerPlugin) InitPlugin(messenger plugin.BinaryMessenger) error {
}
func (p *FilePickerPlugin) handleFilePicker(methodCall interface{}) (reply interface{}, err error) {
method := methodCall.(plugin.MethodCall)
method := methodCall.(plugin.MethodCall).Method
arguments := methodCall.(plugin.MethodCall).Arguments.(map[interface{}]interface{})
var allowedExtensions []string
filter, err := fileFilter(method.Method)
if err != nil {
return nil, errors.Wrap(err, "failed to get filter")
// Parse extensions
if arguments != nil && arguments["allowedExtensions"] != nil {
allowedExtensions = make([]string, len(arguments["allowedExtensions"].([]interface{})))
for i := range arguments["allowedExtensions"].([]interface{}) {
allowedExtensions[i] = arguments["allowedExtensions"].([]interface{})[i].(string)
}
}
selectMultiple, ok := method.Arguments.(bool)
selectMultiple, ok := arguments["allowMultipleSelection"].(bool) //method.Arguments.(bool)
if !ok {
return nil, errors.Wrap(err, "invalid format for argument, not a bool")
}
filter, err := fileFilter(method, allowedExtensions, len(allowedExtensions), selectMultiple)
if err != nil {
return nil, errors.Wrap(err, "failed to get filter")
}
if selectMultiple {
filePaths, _, err := dlgs.FileMulti("Select one or more files", filter)
if err != nil {

View File

@ -1,7 +1,7 @@
name: file_picker
description: A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.
homepage: https://github.com/miguelpruivo/plugins_flutter_file_picker
version: 1.6.2
version: 1.6.3+1
dependencies:
flutter: