-
-
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 |
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
it's not work with me when i pressed on the open file piker button
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):
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.
it doesn't work
it doesn't work
It was working with me. I removed the ‘^’ to match the versions.
it doesn't work
It was working with me. I removed the ‘^’ to match the versions.
Even when changing it, it doesn't work..
file_picker: 1.4.2
Same here @xinruuu