butto to import file

master
gitea 1 month ago
parent 7ab2eb2ba4
commit 6b8cf10e3c

@ -1,4 +1,6 @@
import 'dart:convert';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:practice_engine/practice_engine.dart';
@ -271,6 +273,30 @@ class _DeckImportScreenState extends State<DeckImportScreen> {
showTopSnackBar(context, message: 'JSON copied to clipboard');
}
Future<void> _pickJsonFile() async {
final result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['json'],
withData: true,
);
if (result == null || result.files.isEmpty || !mounted) return;
final file = result.files.single;
if (file.bytes == null) {
if (mounted) {
showTopSnackBar(context, message: 'Could not read file content');
}
return;
}
final text = utf8.decode(file.bytes!);
setState(() {
_errorMessage = null;
_jsonController.text = text;
});
if (mounted) {
showTopSnackBar(context, message: 'File loaded');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
@ -393,6 +419,11 @@ class _DeckImportScreenState extends State<DeckImportScreen> {
Row(
mainAxisSize: MainAxisSize.min,
children: [
TextButton.icon(
onPressed: _pickJsonFile,
icon: const Icon(Icons.folder_open),
label: const Text('Select file'),
),
TextButton.icon(
onPressed: _loadSampleDeck,
icon: const Icon(Icons.description),

@ -41,6 +41,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.19.1"
cross_file:
dependency: transitive
description:
name: cross_file
sha256: "28bb3ae56f117b5aec029d702a90f57d285cd975c3c5c281eaca38dbc47c5937"
url: "https://pub.dev"
source: hosted
version: "0.3.5+2"
cupertino_icons:
dependency: "direct main"
description:
@ -73,6 +81,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "7.0.1"
file_picker:
dependency: "direct main"
description:
name: file_picker
sha256: ab13ae8ef5580a411c458d6207b6774a6c237d77ac37011b13994879f68a8810
url: "https://pub.dev"
source: hosted
version: "8.3.7"
flutter:
dependency: "direct main"
description: flutter
@ -86,6 +102,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "3.0.2"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: ee8068e0e1cd16c4a82714119918efdeed33b3ba7772c54b5d094ab53f9b7fd1
url: "https://pub.dev"
source: hosted
version: "2.0.33"
flutter_test:
dependency: "direct dev"
description: flutter
@ -340,6 +364,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.1.1"
win32:
dependency: transitive
description:
name: win32
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
version: "5.15.0"
xdg_directories:
dependency: transitive
description:

@ -13,6 +13,7 @@ dependencies:
path: packages/practice_engine
cupertino_icons: ^1.0.6
shared_preferences: ^2.2.2
file_picker: ^8.1.6
dev_dependencies:
flutter_test:

Loading…
Cancel
Save

Powered by TurnKey Linux.