mirror of
https://github.com/foss42/apidash.git
synced 2025-06-05 10:20:44 +08:00
Add button to save in Downloads folder
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:apidash/utils/utils.dart';
|
||||
import 'package:apidash/consts.dart';
|
||||
import "snackbars.dart";
|
||||
|
||||
class CopyButton extends StatefulWidget {
|
||||
const CopyButton({super.key, required this.toCopy});
|
||||
@ -13,9 +15,12 @@ class CopyButton extends StatefulWidget {
|
||||
class _CopyButtonState extends State<CopyButton> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
var sm = ScaffoldMessenger.of(context);
|
||||
return TextButton(
|
||||
onPressed: () async {
|
||||
await Clipboard.setData(ClipboardData(text: widget.toCopy));
|
||||
sm.hideCurrentSnackBar();
|
||||
sm.showSnackBar(getSnackBar("Copied"));
|
||||
},
|
||||
child: Row(
|
||||
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)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:highlighter/highlighter.dart' show highlight;
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:apidash/utils/utils.dart';
|
||||
import 'code_previewer.dart' show convert;
|
||||
import 'buttons.dart' show CopyButton;
|
||||
import 'buttons.dart';
|
||||
|
||||
class CodeGenPreviewer extends StatefulWidget {
|
||||
const CodeGenPreviewer({
|
||||
@ -144,6 +145,10 @@ class _ViewCodePaneState extends State<ViewCodePane> {
|
||||
),
|
||||
),
|
||||
CopyButton(toCopy: widget.code),
|
||||
SaveInDownloadsButton(
|
||||
content: stringToBytes(widget.code),
|
||||
mimeType: "application/vnd.dart",
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
|
Reference in New Issue
Block a user