Add button to save in Downloads folder

This commit is contained in:
Ankit Mahato
2023-04-25 07:44:56 +05:30
parent a20cdeca92
commit 5835a44e47
2 changed files with 68 additions and 1 deletions

View File

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:apidash/utils/utils.dart';
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
import "snackbars.dart";
class CopyButton extends StatefulWidget { class CopyButton extends StatefulWidget {
const CopyButton({super.key, required this.toCopy}); const CopyButton({super.key, required this.toCopy});
@ -13,9 +15,12 @@ class CopyButton extends StatefulWidget {
class _CopyButtonState extends State<CopyButton> { class _CopyButtonState extends State<CopyButton> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var sm = ScaffoldMessenger.of(context);
return TextButton( return TextButton(
onPressed: () async { onPressed: () async {
await Clipboard.setData(ClipboardData(text: widget.toCopy)); await Clipboard.setData(ClipboardData(text: widget.toCopy));
sm.hideCurrentSnackBar();
sm.showSnackBar(getSnackBar("Copied"));
}, },
child: Row( child: Row(
children: const [ children: const [
@ -78,3 +83,60 @@ class _SendRequestButtonState extends State<SendRequestButton> {
); );
} }
} }
class SaveInDownloadsButton extends StatefulWidget {
const SaveInDownloadsButton({
super.key,
this.content,
this.mimeType,
this.name,
});
final Uint8List? content;
final String? mimeType;
final String? name;
@override
State<SaveInDownloadsButton> createState() => _SaveInDownloadsButtonState();
}
class _SaveInDownloadsButtonState extends State<SaveInDownloadsButton> {
@override
Widget build(BuildContext context) {
var sm = ScaffoldMessenger.of(context);
return TextButton(
onPressed: (widget.content != null)
? () async {
var message = "";
var ext = getFileExtension(widget.mimeType);
var path = await getFileDownloadpath(
widget.name,
ext,
);
if (path != null) {
try {
await saveFile(path, widget.content!);
var sp = getShortPath(path);
message = 'Saved to $sp';
} catch (e) {
message = "An error occurred while saving file.";
}
} else {
message = "Unable to determine the download path.";
}
sm.hideCurrentSnackBar();
sm.showSnackBar(getSnackBar(message, small: false));
}
: null,
child: Row(
children: const [
Icon(
Icons.download,
size: 20,
),
Text(kLabelDownload)
],
),
);
}
}

View File

@ -1,8 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:highlighter/highlighter.dart' show highlight; import 'package:highlighter/highlighter.dart' show highlight;
import 'package:apidash/consts.dart'; import 'package:apidash/consts.dart';
import 'package:apidash/utils/utils.dart';
import 'code_previewer.dart' show convert; import 'code_previewer.dart' show convert;
import 'buttons.dart' show CopyButton; import 'buttons.dart';
class CodeGenPreviewer extends StatefulWidget { class CodeGenPreviewer extends StatefulWidget {
const CodeGenPreviewer({ const CodeGenPreviewer({
@ -144,6 +145,10 @@ class _ViewCodePaneState extends State<ViewCodePane> {
), ),
), ),
CopyButton(toCopy: widget.code), CopyButton(toCopy: widget.code),
SaveInDownloadsButton(
content: stringToBytes(widget.code),
mimeType: "application/vnd.dart",
)
], ],
), ),
), ),