Flutter openFile, saveFile Dialog 사용
07 Jun 2020 | FlutteropenFile, saveFile Dialog 사용 예제
먼저 pubspec.yaml 파일에 다음 항목을 추가해줍니다.
pubspec.yaml
dependencies: file_chooser: ^0.1.2 path_provider: ^1.6.10 path_provider_macos: ^0.0.4+3
여기서 file_chooser는 구글에서 만든 파일을 선택할 수 있는 인터페이스를 제공해주는 라이브러리이며,
path_provider는 Documents와 같은 특정 디렉토리를 쉽게 찾을 수 있도록 함수를 제공해주는 라이브러리입니다.
여기서 테스트하는 App은 MacOS 버전이기 때문에 macos/Runner/DebugProfile.entitlements 파일에 다음 Permission도 추가해줍니다.
macos/Runner/DebugProfile.entitlements
<dict>
...
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
</dict>
main.dart
import 'dart:io';
import 'package:file_chooser/file_chooser.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
appBar: AppBar(
title: Text('File Dialog Example'),
),
body: SnowDeerExampleWidget(),
),
);
}
}
class SnowDeerExampleWidget extends StatefulWidget {
@override
State createState() => SnowDeerExampleWidgetState();
}
class SnowDeerExampleWidgetState extends State<SnowDeerExampleWidget> {
void showOpenDialog() async {
String initDirectory;
if (Platform.isMacOS || Platform.isWindows) {
initDirectory = (await getApplicationDocumentsDirectory()).path;
}
showOpenPanel(
allowsMultipleSelection: true,
initialDirectory: initDirectory,
).then((value) {
final paths = value.paths;
for (int i = 0; i < paths.length; i++) {
final path = paths[i];
print('- path: $path');
}
});
}
void showSaveDialog() {
showSavePanel().then((value) {
final paths = value.paths;
for (int i = 0; i < paths.length; i++) {
final path = paths[i];
print('- path: $path');
}
});
}
@override
Widget build(BuildContext context) {
return Container(
child: Center(
child: Column(
children: [
RaisedButton(
child: Text('Show open dialog'),
onPressed: () {
showOpenDialog();
},
),
RaisedButton(
child: Text('Show save dialog'),
onPressed: () {
showSaveDialog();
},
),
],
),
),
);
}
}