Skip to content

Instantly share code, notes, and snippets.

@joramkimata
Created February 11, 2020 04:54
Show Gist options
  • Save joramkimata/54092c24510c41336863540003ac3cf6 to your computer and use it in GitHub Desktop.
Save joramkimata/54092c24510c41336863540003ac3cf6 to your computer and use it in GitHub Desktop.
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/services.dart';
main() => runApp(App());
class App extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _App();
}
}
class _App extends State<App> {
String _fileName;
String _path;
Map<String, String> _paths;
String _extension;
bool _loadingPath = false;
bool _multiPick = false;
bool _hasValidMime = false;
FileType _pickingType;
TextEditingController _controller = new TextEditingController();
@override
void initState() {
super.initState();
_controller.addListener(() => _extension = _controller.text);
}
void _openFileExplorer() async {
if (_pickingType != FileType.CUSTOM || _hasValidMime) {
setState(() => _loadingPath = true);
try {
if (_multiPick) {
_path = null;
_paths = await FilePicker.getMultiFilePath(
type: _pickingType, fileExtension: _extension);
} else {
_paths = null;
_path = await FilePicker.getFilePath(
type: _pickingType, fileExtension: _extension);
}
} on PlatformException catch (e) {
print("Unsupported operation" + e.toString());
}
if (!mounted) return;
setState(() {
_loadingPath = false;
_fileName = _path != null
? _path.split('/').last
: _paths != null ? _paths.keys.toString() : '...';
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text("FilePickerApp"),
),
body: Container(
child: Center(
child: Column(
children: <Widget>[
new Padding(
padding: const EdgeInsets.only(top: 50.0, bottom: 20.0),
child: new RaisedButton(
onPressed: () => _openFileExplorer(),
child: new Text("Open file picker"),
),
),
new Builder(
builder: (BuildContext context) => _loadingPath
? Padding(
padding: const EdgeInsets.only(bottom: 10.0),
child: const CircularProgressIndicator())
: _path != null || _paths != null
? new Container(
padding: const EdgeInsets.only(bottom: 30.0),
height: MediaQuery.of(context).size.height * 0.50,
child: new Scrollbar(
child: new ListView.separated(
itemCount: _paths != null && _paths.isNotEmpty
? _paths.length
: 1,
itemBuilder: (BuildContext context, int index) {
final bool isMultiPath =
_paths != null && _paths.isNotEmpty;
final String name = 'File $index: ' +
(isMultiPath
? _paths.keys.toList()[index]
: _fileName ?? '...');
final path = isMultiPath
? _paths.values.toList()[index].toString()
: _path;
return new ListTile(
title: new Text(
name,
),
subtitle: new Text(path),
);
},
separatorBuilder:
(BuildContext context, int index) =>
new Divider(),
)),
)
: new Container(),
),
],
)),
),
),
);
}
}
name: filepickerapp
description: A new Flutter project.
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# In Android, build-name is used as versionName while build-number used as versionCode.
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
version: 1.0.0+1
environment:
sdk: ">=2.1.0 <3.0.0"
dependencies:
flutter:
sdk: flutter
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^0.1.2
file_picker: ^1.4.2
dev_dependencies:
flutter_test:
sdk: flutter
# For information on the generic Dart part of this file, see the
# following page: https://dart.dev/tools/pub/pubspec
# The following section is specific to Flutter.
flutter:
# The following line ensures that the Material Icons font is
# included with your application, so that you can use the icons in
# the material Icons class.
uses-material-design: true
# To add assets to your application, add an assets section, like this:
# assets:
# - images/a_dot_burr.jpeg
# - images/a_dot_ham.jpeg
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware.
# For details regarding adding assets from package dependencies, see
# https://flutter.dev/assets-and-images/#from-packages
# To add custom fonts to your application, add a fonts section here,
# in this "flutter" section. Each entry in this list should have a
# "family" key with the font family name, and a "fonts" key with a
# list giving the asset and other descriptors for the font. For
# example:
# fonts:
# - family: Schyler
# fonts:
# - asset: fonts/Schyler-Regular.ttf
# - asset: fonts/Schyler-Italic.ttf
# style: italic
# - family: Trajan Pro
# fonts:
# - asset: fonts/TrajanPro.ttf
# - asset: fonts/TrajanPro_Bold.ttf
# weight: 700
#
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
@GeniusHawlah
Copy link

The named parameter fileExtension isn't defined

@nikdale
Copy link

nikdale commented Jul 10, 2020

The named parameter fileExtension isn't defined

Just write like this:

          _paths = await FilePicker.getMultiFilePath(
                type: _pickingType,
                allowedExtensions: [_extension]
              );

@Bryanmuloni
Copy link

@nikdale this implementation is for mobile, what about Flutter Web?

@nikdale
Copy link

nikdale commented Jul 11, 2020

@nikdale this implementation is for mobile, what about Flutter Web?

Donno, wouldn't use Flutter Web ever... Use Meteor or React.js of Vue.js or, maybe, Angular?

@7cold
Copy link

7cold commented Jul 15, 2020

does it work with the web flutter? or do I have to make another code?

@ngominhtrungit
Copy link

E/AndroidRuntime(22184): FATAL EXCEPTION: Thread-6
E/AndroidRuntime(22184): Process: com.example.flutteruploadimagefirebase, PID: 22184
E/AndroidRuntime(22184): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
E/AndroidRuntime(22184): at com.mr.flutter.plugin.filepicker.FilePickerDelegate$2.run(FilePickerDelegate.java:106)
E/AndroidRuntime(22184): at java.lang.Thread.run(Thread.java:919)
I/Process (22184): Sending signal. PID: 22184 SIG: 9
Lost connection to device.

pls help me

@ngominhtrungit
Copy link

Tệp tham số có tênExtension không được xác định

Chỉ cần viết như thế này:

          _paths = await FilePicker.getMultiFilePath(
                type: _pickingType,
                allowedExtensions: [_extension]
              );

hi guy. i have error

E/AndroidRuntime(22184): FATAL EXCEPTION: Thread-6
E/AndroidRuntime(22184): Process: com.example.flutteruploadimagefirebase, PID: 22184
E/AndroidRuntime(22184): java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
E/AndroidRuntime(22184): at com.mr.flutter.plugin.filepicker.FilePickerDelegate$2.run(FilePickerDelegate.java:106)
E/AndroidRuntime(22184): at java.lang.Thread.run(Thread.java:919)
I/Process (22184): Sending signal. PID: 22184 SIG: 9
Lost connection to device.

pls help me

@3bitsnoor
Copy link

tterView(28609): Detaching from a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@23fed06c
V/MusicPlayerPlugin(28609): Activity Destroyed
V/MediaPlayer-JNI(28609): stop
V/MediaPlayer(28609): stop
E/MediaPlayer(28609): stop called in state 1
V/MediaPlayer(28609): message received msg=100, ext1=-38, ext2=0
E/MediaPlayer(28609): error (-38, 0)
V/MediaPlayer(28609): callback application
V/MediaPlayer(28609): back from callback
D/FlutterActivityAndFragmentDelegate(28609): Detaching FlutterEngine from the Activity that owns this Fragment.
D/FlutterEngine(28609): Destroying.
D/FlutterEnginePluginRegistry(28609): Destroying.
W/art (28609): Native thread exiting without having called DetachCurrentThread (maybe it's going to use a pthread_key_create destructor?): Thread[18,tid=28635,Native,Thread*=0xafc70c00,peer=0x12c07580,"Thread-15684"]
D/AndroidRuntime(28609): Shutting down VM
I/Process (28609): Sending signal. PID: 28609 SIG: 9
Lost connection to device.

also i am getting error in it plz solve it because i have to add it in my university project

@vashisth00
Copy link

This is garbage code don't follow this

@srk2k13
Copy link

srk2k13 commented Sep 10, 2020

Error: Getter not found: 'CUSTOM'.
if (_pickingType != FileType.CUSTOM || _hasValidMime) {
^^^^^^

FAILURE: Build failed with an exception.

please fix it URGENT
I will be waiting

@obrte
Copy link

obrte commented Sep 11, 2020

Error: Getter not found: 'CUSTOM'.
if (_pickingType != FileType.CUSTOM || _hasValidMime) {
^^^^^^

FAILURE: Build failed with an exception.

please fix it URGENT
I will be waiting

you must change "FileType.CUSTOM" to "FileType.custom"

if (_pickingType != FileType.custom || _hasValidMime) {
 ... 
}

@srk2k13
Copy link

srk2k13 commented Sep 16, 2020

Error: Getter not found: 'CUSTOM'.
if (_pickingType != FileType.CUSTOM || _hasValidMime) {
^^^^^^
FAILURE: Build failed with an exception.
please fix it URGENT
I will be waiting

you must change "FileType.CUSTOM" to "FileType.custom"

if (_pickingType != FileType.custom || _hasValidMime) {
 ... 
}

Thank You. It is working. I man it is running or building without errors. I have installed in my device but "File Picker" is not opening when " Open file picker" button is clicked.
Screenshot_2020-09-16-17-29-53-587_com example file_picker

@srk2k13
Copy link

srk2k13 commented Nov 6, 2020

there is no reply from ur side why my file picker is not opening

@joramkimata
Copy link
Author

joramkimata commented Nov 7, 2020 via email

@xinruuu
Copy link

xinruuu commented Nov 15, 2020

Exception has occurred.
_AssertionError ('package:flutter/src/foundation/diagnostics.dart': Failed assertion: line 3036 pos 5: 'indexOfDot != -1 && indexOfDot < description.length - 1': The provided object "null" is not an enum.)

@khallediRA
Copy link

Same here @xinruuu

@srk2k13
Copy link

srk2k13 commented Nov 26, 2020

When I click on the "Open file picker" , It is not opening device file manager or gallery and I am unable to pick any file. URGENT

@aya-djihane
Copy link

it's not work with me when i pressed on the open file piker button

@aya-djihane
Copy link

E/flutter (13675): [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: 'package:flutter/src/foundation/diagnostics.dart': Failed assertion: line 3036 pos 5: 'indexOfDot != -1 && indexOfDot < description.length - 1': The provided object "null" is not an enum.
E/flutter (13675): #0 _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:46:39)
E/flutter (13675): #1 _AssertionError._throwNew (dart:core-patch/errors_patch.dart:36:5)
E/flutter (13675): #2 describeEnum (package:flutter/src/foundation/diagnostics.dart:3036:5)
E/flutter (13675): #3 MethodChannelFilePicker._getPath (package:file_picker_platform_interface/method_channel_file_picker.dart:53:25)
E/flutter (13675): #4 MethodChannelFilePicker.getFiles (package:file_picker_platform_interface/method_channel_file_picker.dart:26:7)
E/flutter (13675): #5 FilePicker.getFilePath (package:file_picker/file_picker.dart:35:33)
E/flutter (13675): #6 _App._openFileExplorer (package:untitled1/main.dart:36:36)
E/flutter (13675): #7 _App.build. (package:untitled1/main.dart:66:40)
E/flutter (13675): #8 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:991:20)
E/flutter (13675): #9 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24)
E/flutter (13675): #10 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:607:11)
E/flutter (13675): #11 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:296:5)
E/flutter (13675): #12 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:230:7)
E/flutter (13675): #13 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:475:9)
E/flutter (13675): #14 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:93:12)
E/flutter (13675): #15 PointerRouter._dispatchEventToRoutes. (package:flutter/src/gestures/pointer_router.dart:138:9)
E/flutter (13675): #16 _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:397:8)
E/flutter (13675): #17 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:136:18)
E/flutter (13675): #18 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:122:7)
E/flutter (13675): #19 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:381:19)
E/flutter (13675): #20 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:361:22)
E/flutter (13675): #21 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:278:11)
E/flutter (13675): #22 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:316:7)
E/flutter (13675): #23 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:280:5)
E/flutter (13675): #24 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:238:7)
E/flutter (13675): #25 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:221:7)
E/flutter (13675): #26 _rootRunUnary (dart:async/zone.dart:1370:13)
E/flutter (13675): #27 _CustomZone.runUnary (dart:async/zone.dart:1265:19)
E/flutter (13675): #28 _CustomZone.runUnaryGuarded (dart:async/zone.dart:1170:7)
E/flutter (13675): #29 _invoke1 (dart:ui/hooks.dart:180:10)
E/flutter (13675): #30 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:276:7)
E/flutter (13675): #31 _dispatchPointerDataPacket (dart:ui/hooks.dart:96:31)
E/flutter (13675):

@UsamaEjaz0
Copy link

For everyone having issues, change the dependency version to match the version in the op's pubspec.yaml
Write

file_picker: 1.4.2

instead of

file_picker: ^1.4.2

to match the exact version.

@wissalmh
Copy link

it doesn't work

@UsamaEjaz0
Copy link

it doesn't work

It was working with me. I removed the ‘^’ to match the versions.

@wissalmh
Copy link

it doesn't work

It was working with me. I removed the ‘^’ to match the versions.

Even when changing it, it doesn't work..

@srk2k13
Copy link

srk2k13 commented Sep 1, 2021

file_picker: 1.4.2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment