step 6 : add file picker not implemented
This commit is contained in:
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<external-path name="external_storage_directory" path="." />
|
||||||
|
</resources>
|
||||||
@@ -4,12 +4,14 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
import '../screen/login/login_screen.dart';
|
import '../screen/login/login_screen.dart';
|
||||||
import '../screen/splash/splash_screen.dart';
|
import '../screen/splash/splash_screen.dart';
|
||||||
|
import '../screen/test_file_picker/test_file_picker.dart';
|
||||||
|
|
||||||
const loginRoute = "/loginRoute";
|
const loginRoute = "/loginRoute";
|
||||||
const menuRoute = "/menuRoute";
|
const menuRoute = "/menuRoute";
|
||||||
const splashScreen = "/splashScreen";
|
const splashScreen = "/splashScreen";
|
||||||
const homeRoute = "/homeRoute";
|
const homeRoute = "/homeRoute";
|
||||||
const transaksiRoute = "/transaksiRoute";
|
const transaksiRoute = "/transaksiRoute";
|
||||||
|
const testFilePickerRoute = "/testFilePickerRoute";
|
||||||
|
|
||||||
class AppRoute {
|
class AppRoute {
|
||||||
static Route<dynamic> generateRoute(RouteSettings settings) {
|
static Route<dynamic> generateRoute(RouteSettings settings) {
|
||||||
@@ -52,6 +54,19 @@ class AppRoute {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test file picker screen
|
||||||
|
if (settings.name == testFilePickerRoute) {
|
||||||
|
return MaterialPageRoute(builder: (context) {
|
||||||
|
return MediaQuery(
|
||||||
|
data: MediaQuery.of(context).copyWith(
|
||||||
|
textScaleFactor: 1.0,
|
||||||
|
padding: EdgeInsets.all(0),
|
||||||
|
),
|
||||||
|
child: TestFilePicker(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// default
|
// default
|
||||||
return MaterialPageRoute(builder: (context) {
|
return MaterialPageRoute(builder: (context) {
|
||||||
return MediaQuery(
|
return MediaQuery(
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ class MyApp extends StatelessWidget {
|
|||||||
debugShowCheckedModeBanner: false,
|
debugShowCheckedModeBanner: false,
|
||||||
// initialRoute: loginRoute,
|
// initialRoute: loginRoute,
|
||||||
// initialRoute: splashScreen,
|
// initialRoute: splashScreen,
|
||||||
initialRoute: transaksiRoute,
|
// initialRoute: transaksiRoute,
|
||||||
|
initialRoute: testFilePickerRoute,
|
||||||
onGenerateRoute: AppRoute.generateRoute,
|
onGenerateRoute: AppRoute.generateRoute,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,93 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:file_picker/file_picker.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:open_file/open_file.dart';
|
||||||
|
|
||||||
|
class TestFilePicker extends StatefulWidget {
|
||||||
|
const TestFilePicker({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<TestFilePicker> createState() => _TestFilePickerState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _TestFilePickerState extends State<TestFilePicker> {
|
||||||
|
List<PlatformFile>? files = [];
|
||||||
|
|
||||||
|
Future<void> openFilePicker() async {
|
||||||
|
FilePickerResult? result = await FilePicker.platform.pickFiles(
|
||||||
|
type: FileType.custom,
|
||||||
|
allowMultiple: true,
|
||||||
|
allowedExtensions: ['pdf', 'doc', 'docx', 'txt'],
|
||||||
|
);
|
||||||
|
|
||||||
|
if (result != null) {
|
||||||
|
// Handle the result and extract the list of files
|
||||||
|
setState(() {
|
||||||
|
files = result.files;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// User canceled the file picking
|
||||||
|
// Handle accordingly
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> deleteFile(String filePath) async {
|
||||||
|
try {
|
||||||
|
File file = File(filePath);
|
||||||
|
await file.delete();
|
||||||
|
setState(() {
|
||||||
|
files?.removeWhere((PlatformFile element) => element.path == filePath);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
print('Error deleting file: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> openSelectedFile(String filePath) async {
|
||||||
|
try {
|
||||||
|
await OpenFile.open(filePath);
|
||||||
|
} catch (e) {
|
||||||
|
print('Error opening file: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: AppBar(
|
||||||
|
title: Text('File Picker Example'),
|
||||||
|
),
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: openFilePicker,
|
||||||
|
child: Text('Open File Picker'),
|
||||||
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
if (files != null && files!.isNotEmpty)
|
||||||
|
Text('Selected Files:')
|
||||||
|
else
|
||||||
|
SizedBox(),
|
||||||
|
for (var file in files ?? [])
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Text(file.name),
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.delete),
|
||||||
|
onPressed: () => deleteFile(file.path),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
icon: Icon(Icons.open_in_browser),
|
||||||
|
onPressed: () => openSelectedFile(file.path),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -224,6 +224,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.1"
|
version: "1.9.1"
|
||||||
|
open_file:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: open_file
|
||||||
|
sha256: a5a32d44acb7c899987d0999e1e3cbb0a0f1adebbf41ac813ec6d2d8faa0af20
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.2"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ dependencies:
|
|||||||
permission_handler: ^10.2.0
|
permission_handler: ^10.2.0
|
||||||
dropdown_button2: ^2.1.3
|
dropdown_button2: ^2.1.3
|
||||||
file_picker: ^6.1.1
|
file_picker: ^6.1.1
|
||||||
|
open_file: ^3.3.2
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Reference in New Issue
Block a user