Added header suggestions

This commit is contained in:
DenserMeerkat
2023-10-11 10:24:00 +05:30
parent 4c5ecd59b0
commit d2e0ca9967
6 changed files with 235 additions and 4 deletions

View File

@@ -51,13 +51,16 @@ class EditRequestHeadersState extends ConsumerState<EditRequestHeaders> {
grow: 1,
cellBuilder: (_, row) {
int idx = row.index;
return CellField(
TextEditingController headerController =
TextEditingController(text: rows[idx].name);
return HeaderField(
keyId: "$activeId-$idx-headers-k-$seed",
initialValue: rows[idx].name,
controller: headerController,
hintText: "Add Header Name",
onChanged: (value) {
rows[idx] = rows[idx].copyWith(name: value);
_onFieldChange(activeId!);
headerController.text = value;
},
colorScheme: Theme.of(context).colorScheme,
);

View File

@@ -0,0 +1,72 @@
Map<String, String> headers = {
"Accept": "Specifies the media types that are acceptable for the response.",
"Accept-Encoding":
"Indicates the encoding methods the client can understand.",
"Access-Control-Request-Headers":
"Used in preflight requests during CORS to specify the headers that will be included in the actual request.",
"Authorization":
"Contains credentials for authenticating the client with the server.",
"Authorization Bearer Token": "Often used for token-based authentication.",
"Cache-Control":
"Provides directives for caching mechanisms in both requests and responses.",
"Content-Disposition":
"Specifies the presentation style (inline or attachment) of the response.",
"Content-Encoding":
"Indicates the encoding transformations that have been applied to the entity body of the response.",
"Content-Security-Policy":
"Controls the sources from which content can be loaded on a web page to mitigate various types of attacks.",
"Cookie": "Used to send previously stored cookies back to the server.",
"Cross-Origin-Embedder-Policy":
"Controls whether a document is allowed to be embedded in another document.",
"Cross-Origin-Opener-Policy":
"Controls which documents are allowed to open a new window or access the current window.",
"Cross-Origin-Resource-Policy":
"Controls how cross-origin requests for resources are handled.",
"DNT":
"Informs websites whether the user's preference is to opt out of online tracking.",
"Expect": "Indicates certain expectations that need to be met by the server.",
"Host": "Specifies the domain name of the server and the port number.",
"If-Match":
"Used for conditional requests, allows the server to respond based on certain conditions.",
"If-Modified-Since":
"Used for conditional requests, allows the server to respond based on certain conditions.",
"If-None-Match":
"Used for conditional requests, allows the server to respond based on certain conditions.",
"If-Range":
"Used in conjunction with the Range header to conditionally request a partial resource.",
"If-Unmodified-Since":
"Used for conditional requests, allows the server to respond based on certain conditions.",
"Origin": "Specifies the origin of a cross-origin request.",
"Range":
"Used to request only part of a resource, typically in the context of downloading large files.",
"Referer":
"Indicates the URL of the page that referred the client to the current URL.",
"Referrer-Policy":
"Specifies how much information the browser should include in the Referer header when navigating to other pages.",
"Retry-After":
"Informs the client how long it should wait before making another request after a server has responded with a rate-limiting status code.",
"Strict-Transport-Security":
"Instructs the browser to always use HTTPS for the given domain.",
"TE": "Specifies the transfer encodings that are acceptable to the client.",
"User-Agent":
"Identifies the client software and version making the request.",
"Via":
"Indicates intermediate proxies or gateways through which the request or response has passed.",
"X-Api-Key": "Used to authenticate requests to an API with an API key.",
"X-CSRF-Token":
"Used for protection against Cross-Site Request Forgery (CSRF) attacks.",
"X-Forwarded-For":
"Identifies the client's original IP address when behind a proxy or load balancer.",
"X-Requested-With":
"Indicates whether the request was made with JavaScript using XMLHttpRequest.",
"X-XSS-Protection":
"Enables or disables the browser's built-in cross-site scripting (XSS) filter.",
};
List<String> getHeaderSuggestions(String pattern) {
return headers.keys
.where(
(element) => element.toLowerCase().contains(pattern.toLowerCase()),
)
.toList();
}

View File

@@ -0,0 +1,90 @@
import 'package:apidash/utils/header_utils.dart';
import 'package:flutter/material.dart';
import 'package:apidash/consts.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
class HeaderField extends StatefulWidget {
const HeaderField({
super.key,
required this.keyId,
required this.controller,
this.hintText,
this.onChanged,
this.colorScheme,
});
final TextEditingController controller;
final String keyId;
final String? hintText;
final void Function(String)? onChanged;
final ColorScheme? colorScheme;
@override
State<HeaderField> createState() => _HeaderFieldState();
}
class _HeaderFieldState extends State<HeaderField> {
@override
Widget build(BuildContext context) {
var colorScheme = widget.colorScheme ?? Theme.of(context).colorScheme;
return TypeAheadFormField(
minCharsForSuggestions: 1,
hideOnEmpty: true,
key: Key(widget.keyId),
onSuggestionSelected: widget.onChanged!,
itemBuilder: (context, String suggestion) {
return ListTile(
dense: true,
title: Text(suggestion),
);
},
suggestionsCallback: getHeaderSuggestions,
suggestionsBoxDecoration: suggestionBoxDecorations(context),
textFieldConfiguration: TextFieldConfiguration(
onChanged: widget.onChanged!,
controller: widget.controller,
style: kCodeStyle.copyWith(
color: colorScheme.onSurface,
),
decoration: InputDecoration(
hintStyle: kCodeStyle.copyWith(
color: colorScheme.outline.withOpacity(
kHintOpacity,
),
),
hintText: widget.hintText,
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: colorScheme.primary.withOpacity(
kHintOpacity,
),
),
),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(
color: colorScheme.surfaceVariant,
),
),
),
),
);
}
SuggestionsBoxDecoration suggestionBoxDecorations(BuildContext context) {
return SuggestionsBoxDecoration(
elevation: 4,
constraints: const BoxConstraints(maxHeight: 400),
shape: RoundedRectangleBorder(
side: BorderSide(
color: Theme.of(context).dividerColor,
width: 1.2,
),
borderRadius: const BorderRadius.vertical(bottom: Radius.circular(8)),
),
clipBehavior: Clip.hardEdge,
);
}
Future<List<String>> headerSuggestionCallback(String pattern) async {
return getHeaderSuggestions(pattern);
}
}

View File

@@ -9,6 +9,7 @@ export 'dropdowns.dart';
export 'splitviews.dart';
export 'texts.dart';
export 'textfields.dart';
export 'headerfield.dart';
export 'menus.dart';
export 'cards.dart';
export 'intro_message.dart';