mirror of
https://github.com/foss42/apidash.git
synced 2025-05-31 14:23:45 +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/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)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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",
|
||||||
|
)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Reference in New Issue
Block a user