mirror of
https://github.com/foss42/apidash.git
synced 2025-05-17 22:36:16 +08:00
Merge branch 'main' into client_cancellation
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@ -5,9 +5,11 @@
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.build/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
.swiftpm/
|
||||
migrate_working_dir/
|
||||
.fvm
|
||||
.fvmrc
|
||||
|
@ -15,3 +15,28 @@ A List of API endpoints that can be used for testing API Dash
|
||||
#### For Testing sites with Bad Certificate
|
||||
- https://badssl.com/
|
||||
- https://www.ssl.com/sample-valid-revoked-and-expired-ssl-tls-certificates/
|
||||
|
||||
#### PDF
|
||||
|
||||
- https://training.github.com/downloads/github-git-cheat-sheet.pdf
|
||||
|
||||
#### Text
|
||||
|
||||
- https://www.google.com/robots.txt
|
||||
|
||||
#### JSON
|
||||
|
||||
- https://api.apidash.dev/openapi.json
|
||||
|
||||
#### XML
|
||||
|
||||
- https://apidash.dev/sitemap.xml
|
||||
|
||||
#### Video
|
||||
|
||||
- https://download.blender.org/peach/bigbuckbunny_movies/
|
||||
- https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4
|
||||
|
||||
#### Audio
|
||||
|
||||
-
|
||||
|
309
doc/proposals/2025/gsoc/idea_Akshay_Waghmare_ai-agent-testing.md
Normal file
309
doc/proposals/2025/gsoc/idea_Akshay_Waghmare_ai-agent-testing.md
Normal file
@ -0,0 +1,309 @@
|
||||
# AI Agent for API Testing and Automated Tool Integration
|
||||
|
||||
## Personal Information
|
||||
- **Full Name:** Akshay Waghmare
|
||||
- **University Name:** Indian Institute of Information Technology, Allahabad (IIIT Allahabad)
|
||||
- **Program Enrolled In:** B.Tech in Electronics and Communication Engineering (ECE)
|
||||
- **Year:** Pre-final Year (Third Year)
|
||||
- **Expected Graduation Date:** May 2026
|
||||
|
||||
## About Me
|
||||
I’m Akshay Waghmare, a pre-final year B.Tech student at IIIT Allahabad, majoring in Electronics and Communication Engineering. With a strong foundation in full-stack development and backend architecture, I have hands-on experience in technologies like **Next.js**, **Node.js**, **Spring Boot**, **Kafka**, **RabbitMQ**, and **Flutter**. I’ve interned at **Screenera.ai** and **Webneco Infotech**, working on building scalable, high-performance applications. My open-source contributions span organizations like **Wikimedia Foundation**, **C2SI**, and **OpenClimateFix**, and I’ve mentored aspiring developers at **OpenCode IIIT Allahabad**. I’ve also participated in several competitions, achieving **AIR 12** in the **Amazon ML Challenge**, **Goldman Sachs India Hackathon (National Finalist)**, and **Google GenAI Hackathon**. I’m passionate about AI, cloud technologies, and innovative software solutions, especially in automating tasks with AI agents and leveraging **Large Language Models (LLMs)** for smarter workflows.
|
||||
## Project Details
|
||||
- **Project Title:** AI Agent for API Testing and Automated Tool Integration
|
||||
- **Description:**
|
||||
This project leverages Large Language Models (LLMs) to automate API testing by generating intelligent test cases, validating responses, and converting APIs into structured tool definitions for seamless integration with AI agent frameworks like **crewAI, smolagents, pydantic-ai, and langgraph**.
|
||||
|
||||
- **Key Features:**
|
||||
- Automated API discovery and structured parsing from OpenAPI specs, Postman collections, and raw API calls.
|
||||
- AI-powered test case generation, including edge cases and security testing.
|
||||
- Automated API request execution and intelligent validation using machine learning.
|
||||
- Seamless tool integration with AI frameworks for advanced automation.
|
||||
- Benchmark dataset & evaluation framework for selecting the best LLM backend for end users.
|
||||
|
||||
|
||||
# Proposed Idea : AI Agents for API Testing & Tool Definition Generator
|
||||
|
||||
I propose a approach leveraging Large Language Models to utilise both API testing and framework integration. My solution combines intelligent test generation with automated tool definition creation, all powered by contextually-aware AI.
|
||||
|
||||
The core of my approach is a unified pipeline that first parses and understands API specifications at a deep semantic level, then uses that understanding for two key purposes: generating comprehensive test suites and creating framework-specific tool definitions. This dual-purpose system will dramatically reduce the manual effort typically required for both tasks while improving quality and coverage.
|
||||
|
||||
For the API testing component, We will focus on areas where traditional testing tools fall short - particularly intelligent edge case detection and business logic validation. By leveraging LLMs' ability to reason about APIs contextually, the system will identify potential issues that rule-based generators miss. The test generation will cover functional testing with parameter variations, edge cases including boundary values and invalid inputs, security testing for authentication and injection vulnerabilities, and even performance testing scenarios.
|
||||
|
||||
For the framework integration component, We will then develop a flexible adapter system that generates properly typed tool definitions with appropriate validation rules for each target framework. This means developers can instantly convert their APIs into tool definitions for crewAI, langchain, pydantic-ai, langgraph, and other frameworks without manually rewriting specifications and validation logic.
|
||||
|
||||
To address the benchmarking requirement in the project description, After that we can create a standardized dataset of diverse API specifications and implement a comprehensive evaluation framework. This will measure multiple dimensions including accuracy of generated tests and tools, API coverage percentage, relevance to the API's purpose, edge case detection ability, and cost efficiency across different LLM providers. This will enable users to make informed decisions about which model best fits their specific needs.
|
||||
|
||||
## System Architecture
|
||||
|
||||
The system architecture consists of several key components working together to form a pipeline:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
subgraph Client["Client Layer"]
|
||||
Web[Web Interface]
|
||||
CLI[Command Line Interface]
|
||||
SDK[SDK/API Client]
|
||||
end
|
||||
|
||||
subgraph Gateway["API Gateway"]
|
||||
GW[API Gateway/Load Balancer]
|
||||
Auth[Authentication Service]
|
||||
end
|
||||
|
||||
subgraph Core["Core Services"]
|
||||
subgraph APIAnalysis["API Analysis Service"]
|
||||
Parser[API Specification Parser]
|
||||
Analyzer[Endpoint Analyzer]
|
||||
DependencyDetector[Dependency Detector]
|
||||
end
|
||||
|
||||
subgraph TestGen["Test Generation Service"]
|
||||
TestCaseGen[Test Case Generator]
|
||||
TestDataGen[Test Data Generator]
|
||||
TestSuiteOrg[Test Suite Organizer]
|
||||
EdgeCaseGen[Edge Case Generator]
|
||||
end
|
||||
|
||||
subgraph ToolGen["Tool Generation Service"]
|
||||
ToolDefGen[Tool Definition Generator]
|
||||
SchemaGen[Schema Generator]
|
||||
FrameworkAdapter[Framework Adapter]
|
||||
DocGen[Documentation Generator]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph LLM["LLM Services"]
|
||||
PromptMgr[Prompt Manager]
|
||||
ModelRouter[Model Router]
|
||||
TokenManager[Token Manager]
|
||||
OutputParser[Output Parser]
|
||||
CacheManager[Cache Manager]
|
||||
end
|
||||
|
||||
subgraph Execution["Execution Services"]
|
||||
subgraph Runner["Test Runner Service"]
|
||||
Executor[Request Executor]
|
||||
AuthManager[Auth Manager]
|
||||
RateLimit[Rate Limiter]
|
||||
Retry[Retry Manager]
|
||||
end
|
||||
|
||||
subgraph Validator["Validation Service"]
|
||||
SchemaValidator[Schema Validator]
|
||||
LogicValidator[Business Logic Validator]
|
||||
PerformanceValidator[Performance Validator]
|
||||
SecurityValidator[Security Validator]
|
||||
end
|
||||
|
||||
subgraph Reporter["Reporting Service"]
|
||||
ResultCollector[Result Collector]
|
||||
CoverageAnalyzer[Coverage Analyzer]
|
||||
ReportGenerator[Report Generator]
|
||||
Visualizer[Visualizer]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph Data["Data Services"]
|
||||
DB[(Database)]
|
||||
Cache[(Cache)]
|
||||
Storage[(Object Storage)]
|
||||
Queue[(Message Queue)]
|
||||
end
|
||||
|
||||
subgraph External["External Systems"]
|
||||
TargetAPIs[Target APIs]
|
||||
CISystem[CI/CD Systems]
|
||||
AIFrameworks[AI Agent Frameworks]
|
||||
Monitoring[Monitoring Systems]
|
||||
end
|
||||
|
||||
%% Client to Gateway
|
||||
Web --> GW
|
||||
CLI --> GW
|
||||
SDK --> GW
|
||||
|
||||
%% Gateway to Services
|
||||
GW --> Auth
|
||||
Auth --> Parser
|
||||
Auth --> TestCaseGen
|
||||
Auth --> ToolDefGen
|
||||
Auth --> Executor
|
||||
|
||||
%% API Analysis Flow
|
||||
Parser --> Analyzer
|
||||
Analyzer --> DependencyDetector
|
||||
Parser --> DB
|
||||
|
||||
%% Test Generation Flow
|
||||
Analyzer --> TestCaseGen
|
||||
TestCaseGen --> TestDataGen
|
||||
TestDataGen --> TestSuiteOrg
|
||||
TestCaseGen --> EdgeCaseGen
|
||||
EdgeCaseGen --> TestSuiteOrg
|
||||
TestSuiteOrg --> DB
|
||||
|
||||
%% Tool Generation Flow
|
||||
Analyzer --> ToolDefGen
|
||||
ToolDefGen --> SchemaGen
|
||||
SchemaGen --> FrameworkAdapter
|
||||
FrameworkAdapter --> DocGen
|
||||
ToolDefGen --> DB
|
||||
|
||||
%% LLM Integration
|
||||
TestCaseGen --> PromptMgr
|
||||
EdgeCaseGen --> PromptMgr
|
||||
ToolDefGen --> PromptMgr
|
||||
LogicValidator --> PromptMgr
|
||||
PromptMgr --> ModelRouter
|
||||
ModelRouter --> TokenManager
|
||||
TokenManager --> OutputParser
|
||||
ModelRouter --> CacheManager
|
||||
CacheManager --> Cache
|
||||
|
||||
%% Execution Flow
|
||||
TestSuiteOrg --> Executor
|
||||
Executor --> AuthManager
|
||||
AuthManager --> RateLimit
|
||||
RateLimit --> Retry
|
||||
Executor --> TargetAPIs
|
||||
TargetAPIs --> Executor
|
||||
Executor --> SchemaValidator
|
||||
SchemaValidator --> LogicValidator
|
||||
LogicValidator --> PerformanceValidator
|
||||
PerformanceValidator --> SecurityValidator
|
||||
SchemaValidator --> ResultCollector
|
||||
LogicValidator --> ResultCollector
|
||||
PerformanceValidator --> ResultCollector
|
||||
SecurityValidator --> ResultCollector
|
||||
|
||||
%% Reporting Flow
|
||||
ResultCollector --> CoverageAnalyzer
|
||||
CoverageAnalyzer --> ReportGenerator
|
||||
ReportGenerator --> Visualizer
|
||||
ReportGenerator --> Storage
|
||||
|
||||
%% Data Service Integration
|
||||
DB <--> Parser
|
||||
DB <--> TestSuiteOrg
|
||||
DB <--> ToolDefGen
|
||||
DB <--> ResultCollector
|
||||
Queue <--> Executor
|
||||
Storage <--> ReportGenerator
|
||||
|
||||
%% External Integrations
|
||||
ReportGenerator --> CISystem
|
||||
FrameworkAdapter --> AIFrameworks
|
||||
Reporter --> Monitoring
|
||||
|
||||
%% Styling
|
||||
classDef client fill:#3498db,stroke:#2980b9,color:white
|
||||
classDef gateway fill:#f1c40f,stroke:#f39c12,color:black
|
||||
classDef core fill:#27ae60,stroke:#229954,color:white
|
||||
classDef llm fill:#9b59b6,stroke:#8e44ad,color:white
|
||||
classDef execution fill:#e74c3c,stroke:#c0392b,color:white
|
||||
classDef data fill:#16a085,stroke:#1abc9c,color:white
|
||||
classDef external fill:#7f8c8d,stroke:#2c3e50,color:white
|
||||
|
||||
class Web,CLI,SDK client
|
||||
class GW,Auth gateway
|
||||
class Parser,Analyzer,DependencyDetector,TestCaseGen,TestDataGen,TestSuiteOrg,EdgeCaseGen,ToolDefGen,SchemaGen,FrameworkAdapter,DocGen core
|
||||
class PromptMgr,ModelRouter,TokenManager,OutputParser,CacheManager llm
|
||||
class Executor,AuthManager,RateLimit,Retry,SchemaValidator,LogicValidator,PerformanceValidator,SecurityValidator,ResultCollector,CoverageAnalyzer,ReportGenerator,Visualizer execution
|
||||
class DB,Cache,Storage,Queue data
|
||||
class TargetAPIs,CISystem,AIFrameworks,Monitoring external
|
||||
|
||||
|
||||
|
||||
```
|
||||
|
||||
1. **API Specification Parser**: This component handles multiple API specification formats (OpenAPI, GraphQL, gRPC, etc.) and normalizes them into a unified internal representation. I'll build on existing parsing libraries but extend them with custom logic to extract semantic meaning and relationships between endpoints.
|
||||
|
||||
2. **LLM Integration Layer**: A provider-agnostic abstraction supporting multiple LLM services with intelligent routing, caching, and fallback mechanisms. Prompt templates will be version-controlled and systematically optimized through iterative testing to achieve the best results.
|
||||
|
||||
3. **Test Generation Engine**: This core component uses LLMs to analyze API specifications and generate comprehensive test suites. For large APIs that might exceed context limits, I'll implement a chunking approach that processes endpoints in logical batches while maintaining awareness of their relationships.
|
||||
|
||||
4. **Test Execution Runtime**: Once tests are generated, this component executes them against target APIs, handling authentication, implementing appropriate retry logic, respecting rate limits, and collecting comprehensive response data for validation.
|
||||
|
||||
5. **Response Validation Service**: This combines traditional schema validation with LLM-powered semantic validation to catch subtle issues in responses that might comply with the schema but violate business logic or contain inconsistent data.
|
||||
|
||||
6. **Tool Definition Generator**: This component converts API specifications into properly structured tool definitions for various AI frameworks, handling the specific requirements and patterns of each target framework.
|
||||
|
||||
7. **Benchmark Framework**: The evaluation system that assesses LLM performance on standardized tasks with detailed metrics for accuracy, coverage, relevance, and efficiency.
|
||||
|
||||
All components will be implemented in Python with comprehensive test coverage and documentation. The architecture will be modular, allowing for component reuse and independent scaling as needs evolve.
|
||||
|
||||
For frontend integration, I can either develop integration points with your existing Flutter-based application or implement a CLI interface. The backend will expose a clear API that can be consumed by either approach. I'd welcome discussion on which option would better align with your current infrastructure and team workflows - the CLI would offer simplicity for CI/CD integration, while Flutter integration would provide a more seamless experience for existing users.
|
||||
|
||||
## System Workflow and Interactions
|
||||
To illustrate how the components of my proposed system interact, I've created a sequence diagram showing the key workflows:
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
actor User as "User" #ff6347
|
||||
participant UI as "Client(API Dash UI)/CLI Interface" #4682b4
|
||||
participant Orch as "Orchestrator" #32cd32
|
||||
participant Parser as "API Parser" #ffa500
|
||||
participant LLM as "LLM Service" #8a2be2
|
||||
participant TestGen as "Test Generator" #ff1493
|
||||
participant Runner as "Test Runner" #00ced1
|
||||
participant Validator as "Response Validator" #ff8c00
|
||||
participant Reporter as "Test Reporter" #9932cc
|
||||
participant ToolGen as "Tool Generator" #ffb6c1
|
||||
participant API as "Target API" #20b2aa
|
||||
|
||||
User->>UI: Upload API Spec / Define Test Scenario
|
||||
UI->>Orch: Submit Request
|
||||
Orch->>Parser: Parse API Specification
|
||||
Parser-->>Orch: Structured API Metadata
|
||||
|
||||
Orch->>LLM: Generate Test Cases
|
||||
LLM->>TestGen: Create Test Scenarios
|
||||
TestGen-->>Orch: Generated Test Cases
|
||||
|
||||
Orch->>Runner: Execute Tests
|
||||
Runner->>API: Send API Requests
|
||||
API-->>Runner: API Responses
|
||||
|
||||
Runner->>Validator: Validate Responses
|
||||
Validator->>LLM: Analyze Response Quality
|
||||
LLM-->>Validator: Validation Results
|
||||
Validator-->>Runner: Validation Results
|
||||
|
||||
Runner-->>Orch: Test Execution Results
|
||||
Orch->>Reporter: Generate Reports
|
||||
Reporter-->>UI: Display Results
|
||||
|
||||
alt Tool Definition Generation
|
||||
User->>UI: Request Tool Definitions
|
||||
UI->>Orch: Forward Request
|
||||
Orch->>ToolGen: Generate Tool Definitions
|
||||
ToolGen->>LLM: Optimize Tool Descriptions
|
||||
LLM-->>ToolGen: Enhanced Descriptions
|
||||
ToolGen-->>Orch: Framework-Specific Definitions
|
||||
Orch-->>UI: Return Tool Definitions
|
||||
UI-->>User: Download Definitions
|
||||
end
|
||||
|
||||
|
||||
```
|
||||
This diagram demonstrates the four key workflows in the system:
|
||||
|
||||
1. API Specification Analysis - The system ingests and parses API specifications, then uses LLM to understand them semantically.
|
||||
2. Test Generation - Using the parsed API and LLM intelligence, the system creates comprehensive test suites tailored to the API's functionality.
|
||||
3. Test Execution - Tests are run against the actual API, with responses validated both technically and semantically using LLM-powered understanding.
|
||||
4. Tool Definition Generation - The system leverages its understanding of the API to create framework-specific tool definitions that developers can immediately use.
|
||||
|
||||
The LLM service is central to the entire workflow, providing the intelligence needed for deep API understanding, smart test generation, semantic validation, and appropriate tool definition creation.
|
||||
|
||||
## Clarifying Questions
|
||||
|
||||
I have some questions for more understanding:
|
||||
|
||||
1. Which AI frameworks are highest priority for tool definition generation? Is there a specific order of importance for crewAI, langchain, pydantic-ai, and langgraph?
|
||||
|
||||
2. Do you have preferred LLM providers that should be prioritized for integration, or should the system be designed to work with any provider through a common interface?
|
||||
|
||||
3. Are there specific types of APIs that should be given special focus in the benchmark dataset (e.g., e-commerce, financial, IoT)?
|
||||
|
||||
4. How will the frontend be planned? Will it be a standalone interface, an extension of an existing dashboard, or fully integrated into an API testing - API Dash client ?
|
||||
|
@ -0,0 +1,49 @@
|
||||
## Instructions
|
||||
|
||||
- Create a fork of API Dash.
|
||||
- In the folder [doc/proposals/2025/gsoc](https://github.com/foss42/apidash/tree/main/doc/proposals/2025/gsoc) create a file named `application_<your name>_<short project name>.md`
|
||||
|
||||
The file should contain the follow:
|
||||
|
||||
```
|
||||
### About
|
||||
|
||||
1. Full Name
|
||||
3. Contact info (email, phone, etc.)
|
||||
6. Discord handle
|
||||
7. Home page (if any)
|
||||
8. Blog (if any)
|
||||
9. GitHub profile link
|
||||
10. Twitter, LinkedIn, other socials
|
||||
11. Time zone
|
||||
12. Link to a resume (PDF, publicly accessible via link and not behind any login-wall)
|
||||
|
||||
### University Info
|
||||
|
||||
1. University name
|
||||
2. Program you are enrolled in (Degree & Major/Minor)
|
||||
3. Year
|
||||
5. Expected graduation date
|
||||
|
||||
### Motivation & Past Experience
|
||||
|
||||
Short answers to the following questions (Add relevant links wherever you can):
|
||||
1. Have you worked on or contributed to a FOSS project before? Can you attach repo links or relevant PRs?
|
||||
2. What is your one project/achievement that you are most proud of? Why?
|
||||
3. What kind of problems or challenges motivate you the most to solve them?
|
||||
4. Will you be working on GSoC full-time? In case not, what will you be studying or working on while working on the project?
|
||||
6. Do you mind regularly syncing up with the project mentors?
|
||||
7. What interests you the most about API Dash?
|
||||
8. Can you mention some areas where the project can be improved?
|
||||
|
||||
### Project Proposal Information
|
||||
|
||||
1. Proposal Title
|
||||
2. Abstract: A brief summary about the problem that you will be tackling & how.
|
||||
3. Detailed Description
|
||||
4. Weekly Timeline: A rough week-wise timeline of activities that you would undertake.
|
||||
|
||||
```
|
||||
|
||||
- Feel free to add images by adding it to the `images` folder inside [doc/proposals/2025/gsoc](https://github.com/foss42/apidash/tree/main/doc/proposals/2025/gsoc) and linking it to your doc.
|
||||
- Finally, send your application as a PR for review.
|
26
doc/proposals/2025/gsoc/templates/initial_idea_template.md
Normal file
26
doc/proposals/2025/gsoc/templates/initial_idea_template.md
Normal file
@ -0,0 +1,26 @@
|
||||
## Instructions
|
||||
|
||||
- Create a fork of API Dash.
|
||||
- In the folder [doc/proposals/2025/gsoc](https://github.com/foss42/apidash/tree/main/doc/proposals/2025/gsoc) create a file named `idea_<your name>_<short project name>.md`
|
||||
|
||||
The file should contain the following:
|
||||
|
||||
```
|
||||
### Initial Idea Submission
|
||||
|
||||
Full Name:
|
||||
University name:
|
||||
Program you are enrolled in (Degree & Major/Minor):
|
||||
Year:
|
||||
Expected graduation date:
|
||||
|
||||
Project Title: <Write your idea title>
|
||||
Relevant issues: <Add links to the relevant issues>
|
||||
|
||||
Idea description:
|
||||
<Write you thoughts below discussing your approach and how will you implement it>
|
||||
|
||||
```
|
||||
|
||||
- Feel free to add images by adding it to the `images` folder inside [doc/proposals/2025/gsoc](https://github.com/foss42/apidash/tree/main/doc/proposals/2025/gsoc) and linking it to your doc.
|
||||
- Finally, send you changes as a PR for review.
|
@ -268,15 +268,100 @@ Here are the detailed instructions for running the generated API Dash code in **
|
||||
|
||||
## Go (net/http)
|
||||
|
||||
TODO
|
||||
### 1. Install Go compiler
|
||||
|
||||
- Windows and MacOS: check out the [official source](https://go.dev/doc/install)
|
||||
- Linux: Install from your distro's package manager.
|
||||
|
||||
Verify if go is installed:
|
||||
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
|
||||
### 2. Create a project
|
||||
```bash
|
||||
go mod init example.com/api
|
||||
```
|
||||
|
||||
### 3. Run the generated code
|
||||
- Paste the generated code into `main.go`.
|
||||
- Build and run by `go run main.go`.
|
||||
|
||||
## JavaScript (axios)
|
||||
|
||||
TODO
|
||||
The generated api code can be run in browser by using the code in an html file as demonstrated below:
|
||||
|
||||
### 1. Create the html file with generated code
|
||||
|
||||
Create a new file `index.html`
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Axios Example</title>
|
||||
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
// Paste your API Dash generated code here !!
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
```
|
||||
|
||||
Make sure to paste the generated js code from api dash under the `<script>` tag.
|
||||
|
||||
### 2. Test with Browser Developer Tools
|
||||
|
||||
Open the `index.html` file in a modern browser and open devtools.
|
||||
|
||||
- **Chrome**: Right-click the page and select "Inspect" or press Ctrl+Shift+I (Windows/Linux) or Cmd+Option+I (macOS).
|
||||
|
||||
- **Firefox**: Right-click the page and select "Inspect Element" or press Ctrl+Shift+I (Windows/Linux) or Cmd+Option+I (macOS).
|
||||
|
||||
- **Edge**: Right-click the page and select "Inspect" or press F12 or Ctrl+Shift+I.
|
||||
|
||||
Navigate to network tab and refresh the page to see the requests and network activity.
|
||||
|
||||
## JavaScript (fetch)
|
||||
|
||||
TODO
|
||||
The generated api code can be run in browser by using the code in an html file as demonstrated below:
|
||||
|
||||
### 1. Create the html file with generated code
|
||||
|
||||
Create a new file `index.html`
|
||||
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Fetch Example</title>
|
||||
</head>
|
||||
<body>
|
||||
<script>
|
||||
// Paste your API Dash generated code here !!
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
```
|
||||
|
||||
Make sure to paste the generated js code from api dash under the `<script>` tag.
|
||||
|
||||
### 2. Test with Browser Developer Tools
|
||||
|
||||
Open the `index.html` file in a modern browser and open devtools.
|
||||
|
||||
- **Chrome**: Right-click the page and select "Inspect" or press Ctrl+Shift+I (Windows/Linux) or Cmd+Option+I (macOS).
|
||||
|
||||
- **Firefox**: Right-click the page and select "Inspect Element" or press Ctrl+Shift+I (Windows/Linux) or Cmd+Option+I (macOS).
|
||||
|
||||
- **Edge**: Right-click the page and select "Inspect" or press F12 or Ctrl+Shift+I.
|
||||
|
||||
Navigate to network tab and refresh the page to see the requests and network activity.
|
||||
|
||||
## node.js (JavaScript, axios)
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:code_builder/code_builder.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:dart_style/dart_style.dart';
|
||||
import 'shared.dart';
|
||||
|
||||
@ -141,7 +142,8 @@ class DartDioCodeGen {
|
||||
sbf.writeln(mainFunction.accept(emitter));
|
||||
|
||||
return DartFormatter(
|
||||
pageWidth: contentType == ContentType.formdata ? 70 : 160)
|
||||
.format(sbf.toString());
|
||||
languageVersion: Version(3, 2, 4),
|
||||
pageWidth: contentType == ContentType.formdata ? 70 : 160,
|
||||
).format(sbf.toString());
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ import 'dart:convert';
|
||||
import 'dart:io';
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:code_builder/code_builder.dart';
|
||||
import 'package:pub_semver/pub_semver.dart';
|
||||
import 'package:dart_style/dart_style.dart';
|
||||
import 'shared.dart';
|
||||
|
||||
@ -225,7 +226,8 @@ class DartHttpCodeGen {
|
||||
sbf.writeln(mainFunction.accept(emitter));
|
||||
|
||||
return DartFormatter(
|
||||
pageWidth: contentType == ContentType.formdata ? 70 : 160)
|
||||
.format(sbf.toString());
|
||||
languageVersion: Version(3, 2, 4),
|
||||
pageWidth: contentType == ContentType.formdata ? 70 : 160,
|
||||
).format(sbf.toString());
|
||||
}
|
||||
}
|
||||
|
@ -74,10 +74,7 @@ class NavbarButton extends ConsumerWidget {
|
||||
? Theme.of(context)
|
||||
.colorScheme
|
||||
.onSecondaryContainer
|
||||
: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.65),
|
||||
: Theme.of(context).colorScheme.onSurfaceVariant,
|
||||
),
|
||||
)
|
||||
: const SizedBox.shrink(),
|
||||
|
@ -29,10 +29,7 @@ class EditorTitle extends StatelessWidget {
|
||||
tooltip: title,
|
||||
onSelected: onSelected,
|
||||
child: Ink(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.secondaryContainer
|
||||
.withOpacity(0.3),
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
padding:
|
||||
const EdgeInsets.symmetric(horizontal: 12.0, vertical: 6),
|
||||
child: Row(
|
||||
|
@ -29,17 +29,13 @@ class EnvCellField extends StatelessWidget {
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: clrScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outlineVariant,
|
||||
),
|
||||
hintText: hintText,
|
||||
contentPadding: const EdgeInsets.only(bottom: 12),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: clrScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outlineVariant,
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
|
@ -26,9 +26,7 @@ class EnvURLField extends StatelessWidget {
|
||||
decoration: InputDecoration(
|
||||
hintText: kHintTextUrlCard,
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.outlineVariant,
|
||||
),
|
||||
border: InputBorder.none,
|
||||
),
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:apidash_core/apidash_core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:apidash/providers/providers.dart';
|
||||
@ -11,10 +10,8 @@ class EnvironmentDropdown extends ConsumerWidget {
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
final environments = ref.watch(environmentsStateNotifierProvider);
|
||||
final environmentSequence = ref.watch(environmentSequenceProvider);
|
||||
final environmentsList = environmentSequence
|
||||
.map((e) => environments?[e])
|
||||
.whereNotNull()
|
||||
.toList();
|
||||
final environmentsList =
|
||||
environmentSequence.map((e) => environments?[e]).nonNulls.toList();
|
||||
|
||||
final activeEnvironment = ref.watch(activeEnvironmentIdStateProvider);
|
||||
return EnvironmentPopupMenu(
|
||||
|
@ -107,7 +107,7 @@ class Dashboard extends ConsumerWidget {
|
||||
VerticalDivider(
|
||||
thickness: 1,
|
||||
width: 1,
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHigh,
|
||||
),
|
||||
Expanded(
|
||||
child: IndexedStack(
|
||||
|
@ -112,14 +112,14 @@ class _HistoryExpansionTileState extends ConsumerState<HistoryExpansionTile>
|
||||
child: Icon(
|
||||
Icons.chevron_right_rounded,
|
||||
size: 20,
|
||||
color: colorScheme.onSurface.withOpacity(0.6),
|
||||
color: colorScheme.outline,
|
||||
)),
|
||||
kHSpacer5,
|
||||
Text(
|
||||
humanizeDate(widget.date),
|
||||
style: Theme.of(context).textTheme.titleSmall?.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: colorScheme.onSurface.withOpacity(0.6),
|
||||
color: colorScheme.outline,
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -49,8 +49,9 @@ class HistoryURLCard extends StatelessWidget {
|
||||
style: kCodeStyle.copyWith(
|
||||
fontSize: fontSize,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: getHTTPMethodColor(
|
||||
method,
|
||||
color: getAPIColor(
|
||||
apiType!,
|
||||
method: method,
|
||||
brightness: Theme.of(context).brightness,
|
||||
),
|
||||
),
|
||||
|
@ -21,21 +21,6 @@ class EditRequestBody extends ConsumerWidget {
|
||||
final apiType = ref
|
||||
.watch(selectedRequestModelProvider.select((value) => value?.apiType));
|
||||
|
||||
// TODO: #178 GET->POST Currently switches to POST everytime user edits body even if the user intentionally chooses GET
|
||||
// final sm = ScaffoldMessenger.of(context);
|
||||
// void changeToPostMethod() {
|
||||
// if (requestModel?.httpRequestModel!.method == HTTPVerb.get) {
|
||||
// ref
|
||||
// .read(collectionStateNotifierProvider.notifier)
|
||||
// .update(selectedId, method: HTTPVerb.post);
|
||||
// sm.hideCurrentSnackBar();
|
||||
// sm.showSnackBar(getSnackBar(
|
||||
// "Switched to POST method",
|
||||
// small: false,
|
||||
// ));
|
||||
// }
|
||||
// }
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
(apiType == APIType.rest)
|
||||
@ -55,12 +40,8 @@ class EditRequestBody extends ConsumerWidget {
|
||||
switch (apiType) {
|
||||
APIType.rest => Expanded(
|
||||
child: switch (contentType) {
|
||||
ContentType.formdata => const Padding(
|
||||
padding: kPh4,
|
||||
child: FormDataWidget(
|
||||
// TODO: See changeToPostMethod above
|
||||
// changeMethodToPost: changeToPostMethod,
|
||||
)),
|
||||
ContentType.formdata =>
|
||||
const Padding(padding: kPh4, child: FormDataWidget()),
|
||||
// TODO: Fix JsonTextFieldEditor & plug it here
|
||||
ContentType.json => Padding(
|
||||
padding: kPt5o10,
|
||||
@ -69,7 +50,6 @@ class EditRequestBody extends ConsumerWidget {
|
||||
fieldKey: "$selectedId-json-body-editor",
|
||||
initialValue: requestModel?.httpRequestModel?.body,
|
||||
onChanged: (String value) {
|
||||
// changeToPostMethod();
|
||||
ref
|
||||
.read(collectionStateNotifierProvider.notifier)
|
||||
.update(body: value);
|
||||
@ -84,7 +64,6 @@ class EditRequestBody extends ConsumerWidget {
|
||||
fieldKey: "$selectedId-body-editor",
|
||||
initialValue: requestModel?.httpRequestModel?.body,
|
||||
onChanged: (String value) {
|
||||
// changeToPostMethod();
|
||||
ref
|
||||
.read(collectionStateNotifierProvider.notifier)
|
||||
.update(body: value);
|
||||
|
@ -23,7 +23,7 @@ class BottomNavBar extends ConsumerWidget {
|
||||
color: Theme.of(context).colorScheme.onInverseSurface,
|
||||
),
|
||||
),
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
color: Theme.of(context).colorScheme.surfaceContainerLowest,
|
||||
),
|
||||
child: Material(
|
||||
type: MaterialType.transparency,
|
||||
|
@ -21,9 +21,9 @@ class PageBase extends ConsumerWidget {
|
||||
final isDarkMode =
|
||||
ref.watch(settingsProvider.select((value) => value.isDark));
|
||||
final scaffold = Scaffold(
|
||||
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||
backgroundColor: Theme.of(context).colorScheme.surfaceContainerLowest,
|
||||
appBar: AppBar(
|
||||
backgroundColor: Theme.of(context).colorScheme.surface,
|
||||
backgroundColor: Theme.of(context).colorScheme.surfaceContainerLowest,
|
||||
primary: true,
|
||||
title: Text(title),
|
||||
centerTitle: true,
|
||||
@ -43,7 +43,7 @@ class PageBase extends ConsumerWidget {
|
||||
? kPb70
|
||||
: EdgeInsets.zero) +
|
||||
(kIsWindows || kIsMacOS ? kPt28 : EdgeInsets.zero),
|
||||
color: Theme.of(context).colorScheme.surface,
|
||||
color: Theme.of(context).colorScheme.surfaceContainerLowest,
|
||||
child: scaffold,
|
||||
),
|
||||
if (kIsWindows)
|
||||
|
@ -26,15 +26,16 @@ Color getResponseStatusCodeColor(int? statusCode,
|
||||
return col;
|
||||
}
|
||||
|
||||
Color getHTTPMethodColor(HTTPVerb method,
|
||||
{Brightness brightness = Brightness.light}) {
|
||||
Color col = switch (method) {
|
||||
HTTPVerb.get => kColorHttpMethodGet,
|
||||
HTTPVerb.head => kColorHttpMethodHead,
|
||||
HTTPVerb.post => kColorHttpMethodPost,
|
||||
HTTPVerb.put => kColorHttpMethodPut,
|
||||
HTTPVerb.patch => kColorHttpMethodPatch,
|
||||
HTTPVerb.delete => kColorHttpMethodDelete,
|
||||
Color getAPIColor(
|
||||
APIType apiType, {
|
||||
HTTPVerb? method,
|
||||
Brightness? brightness,
|
||||
}) {
|
||||
Color col = switch (apiType) {
|
||||
APIType.rest => getHTTPMethodColor(
|
||||
method,
|
||||
),
|
||||
APIType.graphql => kColorGQL,
|
||||
};
|
||||
if (brightness == Brightness.dark) {
|
||||
col = getDarkModeColor(col);
|
||||
@ -42,9 +43,22 @@ Color getHTTPMethodColor(HTTPVerb method,
|
||||
return col;
|
||||
}
|
||||
|
||||
Color getHTTPMethodColor(HTTPVerb? method) {
|
||||
Color col = switch (method) {
|
||||
HTTPVerb.get => kColorHttpMethodGet,
|
||||
HTTPVerb.head => kColorHttpMethodHead,
|
||||
HTTPVerb.post => kColorHttpMethodPost,
|
||||
HTTPVerb.put => kColorHttpMethodPut,
|
||||
HTTPVerb.patch => kColorHttpMethodPatch,
|
||||
HTTPVerb.delete => kColorHttpMethodDelete,
|
||||
_ => kColorHttpMethodGet,
|
||||
};
|
||||
return col;
|
||||
}
|
||||
|
||||
Color getDarkModeColor(Color col) {
|
||||
return Color.alphaBlend(
|
||||
col.withOpacity(kOpacityDarkModeBlend),
|
||||
col.withValues(alpha: kOpacityDarkModeBlend),
|
||||
kColorWhite,
|
||||
);
|
||||
}
|
||||
|
@ -21,8 +21,7 @@ class HistoryRequestCard extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final Color color = Theme.of(context).colorScheme.surface;
|
||||
final Color colorVariant =
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest.withOpacity(0.5);
|
||||
final Color colorVariant = Theme.of(context).colorScheme.surfaceContainer;
|
||||
final Color surfaceTint = Theme.of(context).colorScheme.primary;
|
||||
return Card(
|
||||
shape: const ContinuousRectangleBorder(borderRadius: kBorderRadius12),
|
||||
@ -38,7 +37,6 @@ class HistoryRequestCard extends StatelessWidget {
|
||||
onTap: onTap,
|
||||
borderRadius: kBorderRadius6,
|
||||
hoverColor: colorVariant,
|
||||
focusColor: colorVariant.withOpacity(0.5),
|
||||
child: Padding(
|
||||
padding: kPv6 + kPh8,
|
||||
child: SizedBox(
|
||||
|
@ -43,8 +43,7 @@ class SidebarEnvironmentCard extends StatelessWidget {
|
||||
final colorScheme = Theme.of(context).colorScheme;
|
||||
final Color color =
|
||||
isGlobal ? colorScheme.secondaryContainer : colorScheme.surface;
|
||||
final Color colorVariant =
|
||||
colorScheme.surfaceContainerHighest.withOpacity(0.5);
|
||||
final Color colorVariant = colorScheme.surfaceContainer;
|
||||
final Color surfaceTint = colorScheme.primary;
|
||||
bool isSelected = selectedId == id;
|
||||
bool inEditMode = editRequestId == id;
|
||||
@ -68,7 +67,7 @@ class SidebarEnvironmentCard extends StatelessWidget {
|
||||
child: InkWell(
|
||||
borderRadius: kBorderRadius8,
|
||||
hoverColor: colorVariant,
|
||||
focusColor: colorVariant.withOpacity(0.5),
|
||||
focusColor: colorVariant,
|
||||
onTap: inEditMode ? null : onTap,
|
||||
// onSecondaryTap: onSecondaryTap,
|
||||
onSecondaryTapUp: (isGlobal)
|
||||
|
@ -28,8 +28,7 @@ class SidebarHistoryCard extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final Color color = Theme.of(context).colorScheme.surface;
|
||||
final Color colorVariant =
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest.withOpacity(0.5);
|
||||
final Color colorVariant = Theme.of(context).colorScheme.surfaceContainer;
|
||||
final model = models.first;
|
||||
final Color surfaceTint = Theme.of(context).colorScheme.primary;
|
||||
final String name = getHistoryRequestName(model);
|
||||
@ -53,7 +52,6 @@ class SidebarHistoryCard extends StatelessWidget {
|
||||
onTap: onTap,
|
||||
borderRadius: kBorderRadius8,
|
||||
hoverColor: colorVariant,
|
||||
focusColor: colorVariant.withOpacity(0.5),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(
|
||||
left: 6,
|
||||
|
@ -45,8 +45,7 @@ class SidebarRequestCard extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final Color color = Theme.of(context).colorScheme.surface;
|
||||
final Color colorVariant =
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest.withOpacity(0.5);
|
||||
final Color colorVariant = Theme.of(context).colorScheme.surfaceContainer;
|
||||
final Color surfaceTint = Theme.of(context).colorScheme.primary;
|
||||
bool isSelected = selectedId == id;
|
||||
bool inEditMode = editRequestId == id;
|
||||
@ -72,7 +71,7 @@ class SidebarRequestCard extends StatelessWidget {
|
||||
child: InkWell(
|
||||
borderRadius: kBorderRadius8,
|
||||
hoverColor: colorVariant,
|
||||
focusColor: colorVariant.withOpacity(0.5),
|
||||
focusColor: colorVariant,
|
||||
onTap: inEditMode ? null : onTap,
|
||||
// onDoubleTap: inEditMode ? null : onDoubleTap,
|
||||
onSecondaryTapUp: (details) {
|
||||
|
@ -118,12 +118,7 @@ class ViewCodePane extends StatelessWidget {
|
||||
? kLightCodeTheme
|
||||
: kDarkCodeTheme;
|
||||
final textContainerdecoration = BoxDecoration(
|
||||
color: Color.alphaBlend(
|
||||
(Theme.of(context).brightness == Brightness.dark
|
||||
? Theme.of(context).colorScheme.onPrimaryContainer
|
||||
: Theme.of(context).colorScheme.primaryContainer)
|
||||
.withOpacity(kForegroundOpacity),
|
||||
Theme.of(context).colorScheme.surface),
|
||||
color: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||
border: Border.all(
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest),
|
||||
borderRadius: kBorderRadius8,
|
||||
|
@ -29,10 +29,7 @@ showHistoryRetentionDialog(
|
||||
child: Text(
|
||||
"Select the duration for which you want to retain your request history",
|
||||
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.8),
|
||||
color: Theme.of(context).colorScheme.outline,
|
||||
),
|
||||
),
|
||||
),
|
||||
@ -49,10 +46,7 @@ showHistoryRetentionDialog(
|
||||
secondary: Icon(e.icon,
|
||||
color: selectedRetentionPeriod == e
|
||||
? Theme.of(context).colorScheme.primary
|
||||
: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.6)),
|
||||
: Theme.of(context).colorScheme.outline),
|
||||
value: e,
|
||||
groupValue: selectedRetentionPeriod,
|
||||
onChanged: (value) {
|
||||
|
@ -23,8 +23,9 @@ class DropdownButtonHttpMethod extends StatelessWidget {
|
||||
EdgeInsets.only(left: context.isMediumWindow ? 8 : 16),
|
||||
dropdownMenuItemtextStyle: (HTTPVerb v) => kCodeStyle.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: getHTTPMethodColor(
|
||||
v,
|
||||
color: getAPIColor(
|
||||
APIType.rest,
|
||||
method: v,
|
||||
brightness: Theme.of(context).brightness,
|
||||
),
|
||||
),
|
||||
|
@ -86,16 +86,12 @@ class _TextFieldEditorState extends State<TextFieldEditor> {
|
||||
decoration: InputDecoration(
|
||||
hintText: widget.hintText ?? kHintContent,
|
||||
hintStyle: TextStyle(
|
||||
color: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.outlineVariant,
|
||||
),
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderRadius: kBorderRadius8,
|
||||
borderSide: BorderSide(
|
||||
color: Theme.of(context).colorScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.outlineVariant,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
@ -106,12 +102,7 @@ class _TextFieldEditorState extends State<TextFieldEditor> {
|
||||
),
|
||||
filled: true,
|
||||
hoverColor: kColorTransparent,
|
||||
fillColor: Color.alphaBlend(
|
||||
(Theme.of(context).brightness == Brightness.dark
|
||||
? Theme.of(context).colorScheme.onPrimaryContainer
|
||||
: Theme.of(context).colorScheme.primaryContainer)
|
||||
.withOpacity(kForegroundOpacity),
|
||||
Theme.of(context).colorScheme.surface),
|
||||
fillColor: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -31,9 +31,7 @@ class ObscurableCellField extends HookWidget {
|
||||
obscureText: obscureText.value,
|
||||
decoration: InputDecoration(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: clrScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outlineVariant,
|
||||
),
|
||||
hintText: hintText,
|
||||
suffixIcon: IconButton(
|
||||
@ -50,9 +48,7 @@ class ObscurableCellField extends HookWidget {
|
||||
contentPadding: const EdgeInsets.only(bottom: 12),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: clrScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outline,
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
|
@ -80,15 +80,12 @@ class _HeaderFieldState extends State<HeaderField> {
|
||||
color: colorScheme.onSurface,
|
||||
),
|
||||
decoration: InputDecoration(
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: colorScheme.outline.withOpacity(kHintOpacity)),
|
||||
hintStyle: kCodeStyle.copyWith(color: colorScheme.outlineVariant),
|
||||
hintText: widget.hintText,
|
||||
contentPadding: const EdgeInsets.only(bottom: 12),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: colorScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: colorScheme.outline,
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
|
@ -25,9 +25,7 @@ class URLField extends StatelessWidget {
|
||||
decoration: InputDecoration(
|
||||
hintText: kHintTextUrlCard,
|
||||
hintStyle: kCodeStyle.copyWith(
|
||||
color: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.outlineVariant,
|
||||
),
|
||||
border: InputBorder.none,
|
||||
),
|
||||
|
@ -16,7 +16,7 @@ class OverlayWidgetTemplate {
|
||||
_overlay = OverlayEntry(
|
||||
// replace with your own layout
|
||||
builder: (context) => ColoredBox(
|
||||
color: kColorBlack.withOpacity(kOverlayBackgroundOpacity),
|
||||
color: kColorBlack.withValues(alpha: kOverlayBackgroundOpacity),
|
||||
child: widget),
|
||||
);
|
||||
_overlayState!.insert(_overlay!);
|
||||
|
@ -405,14 +405,10 @@ class _BodySuccessState extends State<BodySuccess> {
|
||||
? kLightCodeTheme
|
||||
: kDarkCodeTheme;
|
||||
final textContainerdecoration = BoxDecoration(
|
||||
color: Color.alphaBlend(
|
||||
(Theme.of(context).brightness == Brightness.dark
|
||||
? Theme.of(context).colorScheme.onPrimaryContainer
|
||||
: Theme.of(context).colorScheme.primaryContainer)
|
||||
.withOpacity(kForegroundOpacity),
|
||||
Theme.of(context).colorScheme.surface),
|
||||
color: Theme.of(context).colorScheme.surfaceContainerLow,
|
||||
border: Border.all(
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest),
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
),
|
||||
borderRadius: kBorderRadius8,
|
||||
);
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:multi_split_view/multi_split_view.dart';
|
||||
|
||||
@ -35,10 +34,9 @@ class DashboardSplitViewState extends State<DashboardSplitView> {
|
||||
data: MultiSplitViewThemeData(
|
||||
dividerThickness: 3,
|
||||
dividerPainter: DividerPainters.background(
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
highlightedColor: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.surfaceContainer,
|
||||
highlightedColor:
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
animationEnabled: false,
|
||||
),
|
||||
),
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:multi_split_view/multi_split_view.dart';
|
||||
|
||||
@ -30,10 +29,9 @@ class EqualSplitView extends StatelessWidget {
|
||||
data: MultiSplitViewThemeData(
|
||||
dividerThickness: 3,
|
||||
dividerPainter: DividerPainters.background(
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
highlightedColor: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.surfaceContainer,
|
||||
highlightedColor:
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
animationEnabled: false,
|
||||
),
|
||||
),
|
||||
|
@ -1,4 +1,3 @@
|
||||
import 'package:apidash_design_system/apidash_design_system.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:multi_split_view/multi_split_view.dart';
|
||||
|
||||
@ -35,10 +34,9 @@ class HistorySplitViewState extends State<HistorySplitView> {
|
||||
data: MultiSplitViewThemeData(
|
||||
dividerThickness: 3,
|
||||
dividerPainter: DividerPainters.background(
|
||||
color: Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
highlightedColor: Theme.of(context).colorScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: Theme.of(context).colorScheme.surfaceContainer,
|
||||
highlightedColor:
|
||||
Theme.of(context).colorScheme.surfaceContainerHighest,
|
||||
animationEnabled: false,
|
||||
),
|
||||
),
|
||||
|
@ -35,8 +35,7 @@ class SegmentedTabbar extends StatelessWidget {
|
||||
dividerColor: Colors.transparent,
|
||||
indicatorWeight: 0.0,
|
||||
indicatorSize: TabBarIndicatorSize.tab,
|
||||
unselectedLabelColor:
|
||||
Theme.of(context).colorScheme.onSurface.withOpacity(0.4),
|
||||
unselectedLabelColor: Theme.of(context).colorScheme.outline,
|
||||
labelStyle: kTextStyleTab.copyWith(
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Theme.of(context).colorScheme.onPrimary,
|
||||
|
@ -45,9 +45,7 @@ class RequestDataTable extends StatelessWidget {
|
||||
contentPadding: const EdgeInsets.only(bottom: 12),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: clrScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outlineVariant,
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
|
@ -47,9 +47,7 @@ class RequestFormDataTable extends StatelessWidget {
|
||||
contentPadding: const EdgeInsets.only(bottom: 12),
|
||||
focusedBorder: UnderlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: clrScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: clrScheme.outlineVariant,
|
||||
),
|
||||
),
|
||||
enabledBorder: UnderlineInputBorder(
|
||||
|
@ -25,13 +25,11 @@ class SidebarRequestCardTextBox extends StatelessWidget {
|
||||
style: TextStyle(
|
||||
fontSize: 8,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: switch (apiType) {
|
||||
APIType.rest => getHTTPMethodColor(
|
||||
method,
|
||||
brightness: Theme.of(context).brightness,
|
||||
),
|
||||
APIType.graphql => kColorGQL,
|
||||
},
|
||||
color: getAPIColor(
|
||||
apiType,
|
||||
method: method,
|
||||
brightness: Theme.of(context).brightness,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'dart:io';
|
||||
import 'dart:typed_data';
|
||||
import 'package:apidash/consts.dart';
|
||||
import 'package:fvp/fvp.dart' as fvp;
|
||||
import 'package:flutter/material.dart';
|
||||
@ -20,42 +19,43 @@ class VideoPreviewer extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _VideoPreviewerState extends State<VideoPreviewer> {
|
||||
VideoPlayerController? _videoController;
|
||||
late VideoPlayerController _videoController;
|
||||
late Future<void> _initializeVideoPlayerFuture;
|
||||
bool _isPlaying = false;
|
||||
File? _tempVideoFile;
|
||||
late File _tempVideoFile;
|
||||
bool _showControls = false;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
registerWithAllPlatforms();
|
||||
_initializeVideoPlayer();
|
||||
_initializeVideoPlayerFuture = _initializeVideoPlayer();
|
||||
}
|
||||
|
||||
void registerWithAllPlatforms() {
|
||||
try {
|
||||
fvp.registerWith();
|
||||
} catch (e) {
|
||||
// pass
|
||||
debugPrint("VideoPreviewer registerWithAllPlatforms(): $e");
|
||||
}
|
||||
}
|
||||
|
||||
void _initializeVideoPlayer() async {
|
||||
Future<void> _initializeVideoPlayer() async {
|
||||
final tempDir = await getTemporaryDirectory();
|
||||
_tempVideoFile = File(
|
||||
'${tempDir.path}/temp_video_${DateTime.now().millisecondsSinceEpoch}');
|
||||
try {
|
||||
await _tempVideoFile?.writeAsBytes(widget.videoBytes);
|
||||
_videoController = VideoPlayerController.file(_tempVideoFile!)
|
||||
..initialize().then((_) {
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_videoController!.play();
|
||||
_videoController!.setLooping(true);
|
||||
});
|
||||
}
|
||||
await _tempVideoFile.writeAsBytes(widget.videoBytes);
|
||||
_videoController = VideoPlayerController.file(_tempVideoFile);
|
||||
await _videoController.initialize();
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_videoController.play();
|
||||
_videoController.setLooping(true);
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("VideoPreviewer _initializeVideoPlayer(): $e");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -65,79 +65,84 @@ class _VideoPreviewerState extends State<VideoPreviewer> {
|
||||
final iconColor = Theme.of(context).iconTheme.color;
|
||||
final progressBarColors = VideoProgressColors(
|
||||
playedColor: iconColor!,
|
||||
bufferedColor: iconColor.withOpacity(0.5),
|
||||
backgroundColor: iconColor.withOpacity(0.3),
|
||||
bufferedColor: iconColor.withValues(alpha: 0.5),
|
||||
backgroundColor: iconColor.withValues(alpha: 0.3),
|
||||
);
|
||||
return Scaffold(
|
||||
body: MouseRegion(
|
||||
onEnter: (_) => setState(() => _showControls = true),
|
||||
onExit: (_) => setState(() => _showControls = false),
|
||||
child: Stack(
|
||||
children: [
|
||||
Center(
|
||||
child: _videoController?.value.isInitialized == true
|
||||
? AspectRatio(
|
||||
aspectRatio: _videoController!.value.aspectRatio,
|
||||
child: VideoPlayer(_videoController!),
|
||||
)
|
||||
: const CircularProgressIndicator(),
|
||||
),
|
||||
Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
child: _videoController?.value.isInitialized == true
|
||||
? SizedBox(
|
||||
height: 50.0,
|
||||
child: VideoProgressIndicator(
|
||||
_videoController!,
|
||||
allowScrubbing: true,
|
||||
padding: const EdgeInsets.all(20),
|
||||
colors: progressBarColors,
|
||||
body: FutureBuilder(
|
||||
future: _initializeVideoPlayerFuture,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.connectionState == ConnectionState.done) {
|
||||
if (_videoController.value.isInitialized) {
|
||||
return MouseRegion(
|
||||
onEnter: (_) => setState(() => _showControls = true),
|
||||
onExit: (_) => setState(() => _showControls = false),
|
||||
child: Stack(
|
||||
children: [
|
||||
Center(
|
||||
child: AspectRatio(
|
||||
aspectRatio: _videoController.value.aspectRatio,
|
||||
child: VideoPlayer(_videoController),
|
||||
),
|
||||
)
|
||||
: Container(height: 0),
|
||||
),
|
||||
if (_showControls)
|
||||
Center(
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
if (_videoController!.value.isPlaying) {
|
||||
_videoController!.pause();
|
||||
} else {
|
||||
_videoController!.play();
|
||||
}
|
||||
setState(() {
|
||||
_isPlaying = !_isPlaying;
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
color: Colors.transparent,
|
||||
child: Icon(
|
||||
_isPlaying ? Icons.play_arrow : Icons.pause,
|
||||
size: 64,
|
||||
color: iconColor,
|
||||
),
|
||||
),
|
||||
Positioned(
|
||||
left: 0,
|
||||
right: 0,
|
||||
bottom: 0,
|
||||
child: SizedBox(
|
||||
height: 50.0,
|
||||
child: VideoProgressIndicator(
|
||||
_videoController,
|
||||
allowScrubbing: true,
|
||||
padding: const EdgeInsets.all(20),
|
||||
colors: progressBarColors,
|
||||
),
|
||||
),
|
||||
),
|
||||
if (_showControls)
|
||||
Center(
|
||||
child: GestureDetector(
|
||||
onTap: () {
|
||||
if (_videoController.value.isPlaying) {
|
||||
_videoController.pause();
|
||||
} else {
|
||||
_videoController.play();
|
||||
}
|
||||
setState(() {
|
||||
_isPlaying = !_isPlaying;
|
||||
});
|
||||
},
|
||||
child: Container(
|
||||
color: Colors.transparent,
|
||||
child: Icon(
|
||||
_isPlaying ? Icons.play_arrow : Icons.pause,
|
||||
size: 64,
|
||||
color: iconColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
return const Center(child: CircularProgressIndicator());
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_videoController?.pause();
|
||||
_videoController?.dispose();
|
||||
_videoController.pause();
|
||||
_videoController.dispose();
|
||||
if (!kIsRunningTests) {
|
||||
Future.delayed(const Duration(seconds: 1), () async {
|
||||
try {
|
||||
if (_tempVideoFile != null) {
|
||||
await _tempVideoFile!.delete();
|
||||
}
|
||||
await _tempVideoFile.delete();
|
||||
} catch (e) {
|
||||
debugPrint("VideoPreviewer dispose(): $e");
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
@ -1,5 +1,4 @@
|
||||
import 'package:apidash_core/consts.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:seed/seed.dart';
|
||||
import '../models/models.dart';
|
||||
import 'graphql_utils.dart';
|
||||
@ -52,7 +51,7 @@ List<Map<String, String>>? rowsToFormDataMapList(
|
||||
"value": formData.value,
|
||||
"type": formData.type.name,
|
||||
})
|
||||
.whereNotNull()
|
||||
.nonNulls
|
||||
.toList();
|
||||
return finalMap;
|
||||
}
|
||||
|
@ -15,12 +15,12 @@ dependencies:
|
||||
curl_parser:
|
||||
path: ../curl_parser
|
||||
freezed_annotation: ^2.4.1
|
||||
http: ^1.2.1
|
||||
http_parser: ^4.0.2
|
||||
postman:
|
||||
path: ../postman
|
||||
http: ^1.3.0
|
||||
http_parser: ^4.1.2
|
||||
insomnia_collection:
|
||||
path: ../insomnia_collection
|
||||
postman:
|
||||
path: ../postman
|
||||
seed: ^0.0.3
|
||||
xml: ^6.3.0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# melos_managed_dependency_overrides: curl_parser,postman,seed,insomnia_collection
|
||||
# melos_managed_dependency_overrides: curl_parser,insomnia_collection,postman,seed
|
||||
dependency_overrides:
|
||||
curl_parser:
|
||||
path: ../curl_parser
|
||||
|
@ -6,7 +6,7 @@ const kColorTransparent = Colors.transparent;
|
||||
const kColorWhite = Colors.white;
|
||||
const kColorBlack = Colors.black;
|
||||
const kColorRed = Colors.red;
|
||||
final kColorLightDanger = Colors.red.withOpacity(0.9);
|
||||
final kColorLightDanger = Colors.red.withValues(alpha: 0.9);
|
||||
const kColorDarkDanger = Color(0xffcf6679);
|
||||
|
||||
const kColorSchemeSeed = Colors.blue;
|
||||
|
@ -71,19 +71,13 @@ class ADOutlinedTextField extends StatelessWidget {
|
||||
hintStyle: hintTextStyle ??
|
||||
kCodeStyle.copyWith(
|
||||
fontSize: hintTextFontSize,
|
||||
color: hintTextColor ??
|
||||
clrScheme.outline.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: hintTextColor ?? clrScheme.outlineVariant,
|
||||
),
|
||||
hintText: hintText,
|
||||
contentPadding: contentPadding ?? kP10,
|
||||
focusedBorder: OutlineInputBorder(
|
||||
borderSide: BorderSide(
|
||||
color: focussedBorderColor ??
|
||||
clrScheme.primary.withOpacity(
|
||||
kHintOpacity,
|
||||
),
|
||||
color: focussedBorderColor ?? clrScheme.outline,
|
||||
),
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
|
@ -88,7 +88,7 @@ JsonExplorer(
|
||||
fontSize: 16,
|
||||
),
|
||||
propertyKeyTextStyle: GoogleFonts.inconsolata(
|
||||
color: Colors.black.withOpacity(0.7),
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -284,7 +284,7 @@ class _JsonExplorerPageState extends State<JsonExplorerPage> {
|
||||
fontSize: 16,
|
||||
),
|
||||
propertyKeyTextStyle: GoogleFonts.inconsolata(
|
||||
color: Colors.black.withOpacity(0.7),
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 16,
|
||||
),
|
||||
|
@ -46,8 +46,8 @@ void main() {
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18,
|
||||
),
|
||||
propertyKeyTextStyle: TextStyle(
|
||||
color: Colors.black.withOpacity(0.7),
|
||||
propertyKeyTextStyle: const TextStyle(
|
||||
color: Colors.grey,
|
||||
fontWeight: FontWeight.bold,
|
||||
fontSize: 18,
|
||||
),
|
||||
|
@ -5,42 +5,42 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: async
|
||||
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
|
||||
sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.11.0"
|
||||
version: "2.12.0"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: boolean_selector
|
||||
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
|
||||
sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.1.2"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
||||
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.4.0"
|
||||
clock:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: clock
|
||||
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
|
||||
sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.1"
|
||||
version: "1.1.2"
|
||||
collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
||||
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.18.0"
|
||||
version: "1.19.1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -61,10 +61,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
|
||||
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.1"
|
||||
version: "1.3.2"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -135,18 +135,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05"
|
||||
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.5"
|
||||
version: "10.0.8"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806"
|
||||
sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.5"
|
||||
version: "3.0.9"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -167,10 +167,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16+1"
|
||||
version: "0.12.17"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -183,10 +183,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
version: "1.16.0"
|
||||
multi_trigger_autocomplete_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -198,10 +198,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.9.0"
|
||||
version: "1.9.1"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -270,55 +270,55 @@ packages:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
source: sdk
|
||||
version: "0.0.99"
|
||||
version: "0.0.0"
|
||||
source_span:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.10.1"
|
||||
stack_trace:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.11.1"
|
||||
version: "1.12.1"
|
||||
stream_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.4"
|
||||
string_scanner:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
||||
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.4.1"
|
||||
term_glyph:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
version: "1.2.2"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb"
|
||||
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.2"
|
||||
version: "0.7.4"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -339,10 +339,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.2.5"
|
||||
version: "14.3.1"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -360,5 +360,5 @@ packages:
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
sdks:
|
||||
dart: ">=3.5.0 <4.0.0"
|
||||
dart: ">=3.7.0-0 <4.0.0"
|
||||
flutter: ">=3.24.0"
|
||||
|
323
pubspec.lock
323
pubspec.lock
@ -5,23 +5,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _fe_analyzer_shared
|
||||
sha256: "16e298750b6d0af7ce8a3ba7c18c69c3785d11b15ec83f6dcd0ad2a0009b3cab"
|
||||
sha256: dc27559385e905ad30838356c5f5d574014ba39872d732111cd07ac0beff4c57
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "76.0.0"
|
||||
_macros:
|
||||
dependency: transitive
|
||||
description: dart
|
||||
source: sdk
|
||||
version: "0.3.3"
|
||||
version: "80.0.0"
|
||||
analyzer:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: analyzer
|
||||
sha256: "1f14db053a8c23e260789e9b0980fa27f2680dd640932cae5e1137cce0e46e1e"
|
||||
sha256: "192d1c5b944e7e53b24b5586db760db934b177d4147c42fbca8c8c5f1eb8d11e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.11.0"
|
||||
version: "7.3.0"
|
||||
ansi_styles:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -56,10 +51,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: archive
|
||||
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
|
||||
sha256: "0c64e928dcbefddecd234205422bcfc2b5e6d31be0b86fef0d0dd48d7b4c9742"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.1"
|
||||
version: "4.0.4"
|
||||
args:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -80,10 +75,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: audio_session
|
||||
sha256: b2a26ba8b7efa1790d6460e82971fde3e398cfbe2295df9dea22f3499d2c12a7
|
||||
sha256: "2b7fff16a552486d078bfc09a8cde19f426dc6d6329262b684182597bec5b1ac"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.23"
|
||||
version: "0.1.25"
|
||||
barcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -100,6 +95,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.12"
|
||||
binary_codec:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: binary_codec
|
||||
sha256: "368144225d749e1e33f2f4628d0c70bffff99b99b1d6c0777b039f8967365b07"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.3"
|
||||
boolean_selector:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -112,10 +115,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build
|
||||
sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0"
|
||||
sha256: cef23f1eda9b57566c81e2133d196f8e3df48f244b317368d65c5943d91148f0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.1"
|
||||
version: "2.4.2"
|
||||
build_config:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -136,26 +139,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_resolvers
|
||||
sha256: "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a"
|
||||
sha256: b9e4fda21d846e192628e7a4f6deda6888c36b5b69ba02ff291a01fd529140f0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.2"
|
||||
version: "2.4.4"
|
||||
build_runner:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: build_runner
|
||||
sha256: "028819cfb90051c6b5440c7e574d1896f8037e3c96cf17aaeb054c9311cfbf4d"
|
||||
sha256: "058fe9dce1de7d69c4b84fada934df3e0153dd000758c4d65964d0166779aa99"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.13"
|
||||
version: "2.4.15"
|
||||
build_runner_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_runner_core
|
||||
sha256: f8126682b87a7282a339b871298cc12009cb67109cfa1614d6436fb0289193e0
|
||||
sha256: "22e3aa1c80e0ada3722fe5b63fd43d9c8990759d0a2cf489c8c5d7b2bdebc021"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.3.2"
|
||||
version: "8.0.0"
|
||||
built_collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -176,10 +179,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: characters
|
||||
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
|
||||
sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.4.0"
|
||||
charcode:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -204,6 +207,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
ci:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ci
|
||||
sha256: "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.0"
|
||||
cli_launcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -240,10 +251,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: collection
|
||||
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
|
||||
sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.19.0"
|
||||
version: "1.19.1"
|
||||
conventional_commit:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -311,10 +322,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
|
||||
sha256: "27eb0ae77836989a3bc541ce55595e8ceee0992807f14511552a898ddd0d88ac"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.7"
|
||||
version: "3.0.1"
|
||||
dartx:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -335,10 +346,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: desktop_drop
|
||||
sha256: d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d
|
||||
sha256: "03abf1c0443afdd1d65cf8fa589a2f01c67a11da56bbb06f6ea1de79d5628e94"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.4"
|
||||
version: "0.5.0"
|
||||
equatable:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -471,18 +482,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flex_color_scheme
|
||||
sha256: "32914024a4f404d90ff449f58d279191675b28e7c08824046baf06826e99d984"
|
||||
sha256: ae638050fceb35b6040a43cf67892f9b956022068e736284919d93322fdd4ba2
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.3.1"
|
||||
version: "8.1.1"
|
||||
flex_seed_scheme:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flex_seed_scheme
|
||||
sha256: "4cee2f1d07259f77e8b36f4ec5f35499d19e74e17c7dce5b819554914082bc01"
|
||||
sha256: d3ba3c5c92d2d79d45e94b4c6c71d01fac3c15017da1545880c53864da5dfeb0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.0"
|
||||
version: "3.5.0"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@ -497,10 +508,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_hooks
|
||||
sha256: cde36b12f7188c85286fba9b38cc5a902e7279f36dd676967106c041dc9dde70
|
||||
sha256: b772e710d16d7a20c0740c4f855095026b31c7eb5ba3ab67d2bd52021cd9461d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.20.5"
|
||||
version: "0.21.2"
|
||||
flutter_keyboard_visibility:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -553,34 +564,34 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_launcher_icons
|
||||
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
|
||||
sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.1"
|
||||
version: "0.14.3"
|
||||
flutter_lints:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
|
||||
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
version: "5.0.0"
|
||||
flutter_markdown:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_markdown
|
||||
sha256: "255b00afa1a7bad19727da6a7780cf3db6c3c12e68d302d85e0ff1fdf173db9e"
|
||||
sha256: e7bbc718adc9476aa14cfddc1ef048d2e21e4e8f18311aaac723266db9f9e7b5
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.4+3"
|
||||
version: "0.7.6+2"
|
||||
flutter_native_splash:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_native_splash
|
||||
sha256: "1152ab0067ca5a2ebeb862fe0a762057202cceb22b7e62692dcbabf6483891bb"
|
||||
sha256: edb09c35ee9230c4b03f13dd45bb3a276d0801865f0a4650b7e2a3bba61a803a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.3"
|
||||
version: "2.4.5"
|
||||
flutter_portal:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -601,10 +612,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_svg
|
||||
sha256: "54900a1a1243f3c4a5506d853a2b5c2dbc38d5f27e52a52618a8054401431123"
|
||||
sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.16"
|
||||
version: "2.0.17"
|
||||
flutter_test:
|
||||
dependency: "direct dev"
|
||||
description: flutter
|
||||
@ -627,10 +638,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: freezed
|
||||
sha256: "44c19278dd9d89292cf46e97dc0c1e52ce03275f40a97c5a348e802a924bf40e"
|
||||
sha256: "59a584c24b3acdc5250bb856d0d3e9c0b798ed14a4af1ddb7dc1c7b41df91c9c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.7"
|
||||
version: "2.5.8"
|
||||
freezed_annotation:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -656,10 +667,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: fvp
|
||||
sha256: "040aa12beccd5bc60631259f27a481c4abc11a389aa4f57a47b643f58fe0b060"
|
||||
sha256: f5012756985f7c8c19caaea2d65baf8a6cf5fee9fe520e1fabb8bc61e1d5f468
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.26.1"
|
||||
version: "0.30.0"
|
||||
glob:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -716,6 +727,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.1"
|
||||
hotreloader:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: hotreloader
|
||||
sha256: bc167a1163807b03bada490bfe2df25b0d744df359227880220a5cbd04e5734b
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.3.0"
|
||||
html:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -736,10 +755,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
||||
sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
version: "1.3.0"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -752,18 +771,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.2"
|
||||
version: "4.1.2"
|
||||
image:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image
|
||||
sha256: f31d52537dc417fdcde36088fdf11d191026fd5e4fae742491ebd40e5a8bea7d
|
||||
sha256: "13d3349ace88f12f4a0d175eb5c12dcdd39d35c4c109a8a13dfeb6d0bd9e31c3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.3.0"
|
||||
version: "4.5.3"
|
||||
insomnia_collection:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -792,22 +811,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.5"
|
||||
jaspr:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: jaspr
|
||||
sha256: "1bc6dfd4e00ac45e85efff80e457ff5fb7a40ed05828f8046b130cc6bfe7fd36"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.15.2"
|
||||
jinja:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: jinja
|
||||
sha256: ee379abb8106faec4898d7a8b712f7085474c8d8dea43d06c52def04fbe5aa67
|
||||
sha256: "157a05d22c1b60aaf21e3e9f0b26ec27315cd2892f7ac9571e9478eb0d5d62f9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.0"
|
||||
version: "0.6.1"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||
sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
version: "0.6.7"
|
||||
json_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -827,10 +854,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: json_serializable
|
||||
sha256: c2fcb3920cf2b6ae6845954186420fca40bc0a8abcc84903b7801f17d7050d7c
|
||||
sha256: "81f04dee10969f89f604e1249382d46b97a1ccad53872875369622b5bfc9e58a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.9.0"
|
||||
version: "6.9.4"
|
||||
json_text_field:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -843,10 +870,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: just_audio
|
||||
sha256: a49e7120b95600bd357f37a2bb04cd1e88252f7cdea8f3368803779b925b1049
|
||||
sha256: f978d5b4ccea08f267dae0232ec5405c1b05d3f3cd63f82097ea46c015d5c09e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.9.42"
|
||||
version: "0.9.46"
|
||||
just_audio_mpv:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -859,18 +886,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: just_audio_platform_interface
|
||||
sha256: "0243828cce503c8366cc2090cefb2b3c871aa8ed2f520670d76fd47aa1ab2790"
|
||||
sha256: "271b93b484c6f494ecd72a107fffbdb26b425f170c665b9777a0a24a726f2f24"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.3.0"
|
||||
version: "4.4.0"
|
||||
just_audio_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: just_audio_web
|
||||
sha256: "9a98035b8b24b40749507687520ec5ab404e291d2b0937823ff45d92cb18d448"
|
||||
sha256: "58915be64509a7683c44bf11cd1a23c15a48de104927bee116e3c63c8eeea0d4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.13"
|
||||
version: "0.4.14"
|
||||
just_audio_windows:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -907,10 +934,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
|
||||
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.0"
|
||||
version: "5.1.1"
|
||||
logging:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -923,34 +950,26 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: lottie
|
||||
sha256: fa39707f36786707b01eca7626d2c16c32aa603b3f3a146518518458847dc127
|
||||
sha256: c5fa04a80a620066c15cf19cc44773e19e9b38e989ff23ea32e5903ef1015950
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.0"
|
||||
macros:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: macros
|
||||
sha256: "1d9e801cd66f7ea3663c45fc708450db1fa57f988142c64289142c9b7ee80656"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.3-main.0"
|
||||
version: "3.3.1"
|
||||
markdown:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: markdown
|
||||
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
|
||||
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.2.2"
|
||||
version: "7.3.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16+1"
|
||||
version: "0.12.17"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -963,18 +982,18 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: melos
|
||||
sha256: a62abfa8c7826cec927f8585572bb9adf591be152150494d879ca2c75118809d
|
||||
sha256: "3f3ab3f902843d1e5a1b1a4dd39a4aca8ba1056f2d32fd8995210fa2843f646f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.0"
|
||||
version: "6.3.2"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.15.0"
|
||||
version: "1.16.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1058,18 +1077,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: package_info_plus
|
||||
sha256: "70c421fe9d9cc1a9a7f3b05ae56befd469fe4f8daa3b484823141a55442d858d"
|
||||
sha256: "7976bfe4c583170d6cdc7077e3237560b364149fcd268b5f53d95a991963b191"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.1.2"
|
||||
version: "8.3.0"
|
||||
package_info_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: package_info_plus_platform_interface
|
||||
sha256: a5ef9986efc7bf772f2696183a3992615baa76c1ffb1189318dd8803778fb05b
|
||||
sha256: "6c935fb612dff8e3cc9632c2b301720c77450a126114126ffaafe28d2e87956c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
version: "3.2.0"
|
||||
path:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1138,10 +1157,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pdf
|
||||
sha256: "05df53f8791587402493ac97b9869d3824eccbc77d97855f4545cf72df3cae07"
|
||||
sha256: "28eacad99bffcce2e05bba24e50153890ad0255294f4dd78a17075a2ba5c8416"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.11.1"
|
||||
version: "3.11.3"
|
||||
pdf_widget_wrapper:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
@ -1214,6 +1233,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.1"
|
||||
posix:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: posix
|
||||
sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.1"
|
||||
postman:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1254,7 +1281,7 @@ packages:
|
||||
source: hosted
|
||||
version: "6.1.2"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: pub_semver
|
||||
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
||||
@ -1269,22 +1296,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.0"
|
||||
pubspec:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec
|
||||
sha256: f534a50a2b4d48dc3bc0ec147c8bd7c304280fff23b153f3f11803c4d49d927e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
|
||||
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.5.0"
|
||||
qr:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1293,14 +1312,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
quiver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: quiver
|
||||
sha256: ea0b925899e64ecdfbf9c7becb60d5b50e706ade44a85b2363be2a22d88117d2
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.2.2"
|
||||
riverpod:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1393,10 +1404,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shared_preferences
|
||||
sha256: "3c7e73920c694a436afaf65ab60ce3453d91f84208d761fbd83fc21182134d93"
|
||||
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.4"
|
||||
version: "2.5.2"
|
||||
shared_preferences_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1453,6 +1464,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.1"
|
||||
shelf_gzip:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_gzip
|
||||
sha256: "4f4b793c0f969f348aece1ab4cc05fceba9fea431c1ce76b1bc0fa369cecfc15"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.0"
|
||||
shelf_packages_handler:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1461,6 +1480,14 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.2"
|
||||
shelf_proxy:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_proxy
|
||||
sha256: a71d2307f4393211930c590c3d2c00630f6c5a7a77edc1ef6436dfd85a6a7ee3
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.4"
|
||||
shelf_static:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1494,10 +1521,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_gen
|
||||
sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832"
|
||||
sha256: "35c8150ece9e8c8d263337a265153c3329667640850b9304861faea59fc98f6b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.5.0"
|
||||
version: "2.0.0"
|
||||
source_helper:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1526,18 +1553,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: source_span
|
||||
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
|
||||
sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.10.1"
|
||||
spot:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: spot
|
||||
sha256: "648cd3e9f9b336d005a4dcde24538e44edc72b8d548e0416fa93c0541655f219"
|
||||
sha256: "8743e97055bbd22d0eb33d25673aa6dafee7c6eaa869860d0f5a68b7348e12bc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.13.0"
|
||||
version: "0.17.0"
|
||||
sprintf:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1550,10 +1577,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stack_trace
|
||||
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
|
||||
sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.12.0"
|
||||
version: "1.12.1"
|
||||
state_notifier:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1566,10 +1593,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: stream_channel
|
||||
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
|
||||
sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.4"
|
||||
stream_transform:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1582,10 +1609,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: string_scanner
|
||||
sha256: "0bd04f5bb74fcd6ff0606a888a30e917af9bd52820b178eaa464beb11dca84b6"
|
||||
sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.4.0"
|
||||
version: "1.4.1"
|
||||
sync_http:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1598,34 +1625,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: term_glyph
|
||||
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
|
||||
sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
version: "1.2.2"
|
||||
test:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: test
|
||||
sha256: "713a8789d62f3233c46b4a90b174737b2c04cb6ae4500f2aa8b1be8f03f5e67f"
|
||||
sha256: "301b213cd241ca982e9ba50266bd3f5bd1ea33f1455554c5abb85d1be0e2d87e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.25.8"
|
||||
version: "1.25.15"
|
||||
test_api:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
|
||||
sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.3"
|
||||
version: "0.7.4"
|
||||
test_core:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_core
|
||||
sha256: "12391302411737c176b0b5d6491f466b0dd56d4763e347b6714efbaa74d7953d"
|
||||
sha256: "84d17c3486c8dfdbe5e12a50c8ae176d15e2a771b96909a9442b40173649ccaa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.5"
|
||||
version: "0.6.8"
|
||||
textwrap:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1666,14 +1693,6 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
uri:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: uri
|
||||
sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.0.0"
|
||||
url_launcher:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1782,10 +1801,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: video_player
|
||||
sha256: "4a8c3492d734f7c39c2588a3206707a05ee80cef52e8c7f3b2078d430c84bc17"
|
||||
sha256: "48941c8b05732f9582116b1c01850b74dbee1d8520cd7e34ad4609d6df666845"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.9.2"
|
||||
version: "2.9.3"
|
||||
video_player_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1806,10 +1825,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: video_player_platform_interface
|
||||
sha256: "229d7642ccd9f3dc4aba169609dd6b5f3f443bb4cc15b82f7785fcada5af9bbb"
|
||||
sha256: df534476c341ab2c6a835078066fc681b8265048addd853a1e3c78740316a844
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.3"
|
||||
version: "6.3.0"
|
||||
video_player_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1838,10 +1857,10 @@ packages:
|
||||
dependency: "direct overridden"
|
||||
description:
|
||||
name: web
|
||||
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
|
||||
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.1"
|
||||
version: "1.1.1"
|
||||
web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1919,10 +1938,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: yaml
|
||||
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
||||
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
version: "3.1.3"
|
||||
yaml_edit:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1932,5 +1951,5 @@ packages:
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
sdks:
|
||||
dart: ">=3.5.3 <3.999.0"
|
||||
flutter: ">=3.24.2"
|
||||
dart: ">=3.7.0-0 <3.999.0"
|
||||
flutter: ">=3.29.0"
|
||||
|
51
pubspec.yaml
51
pubspec.yaml
@ -5,7 +5,7 @@ version: 0.5.0+5
|
||||
|
||||
environment:
|
||||
sdk: ">=3.0.0 <4.0.0"
|
||||
flutter: ">=3.24.2"
|
||||
flutter: ">=3.29.0"
|
||||
|
||||
dependencies:
|
||||
flutter:
|
||||
@ -17,74 +17,75 @@ dependencies:
|
||||
code_builder: ^4.10.0
|
||||
csv: ^6.0.0
|
||||
data_table_2: 2.5.16
|
||||
dart_style: ^2.3.7
|
||||
desktop_drop: ^0.4.4
|
||||
dart_style: ^3.0.1
|
||||
desktop_drop: ^0.5.0
|
||||
extended_text_field: ^16.0.0
|
||||
file_selector: ^1.0.3
|
||||
flex_color_scheme: ^7.3.1
|
||||
flutter_hooks: ^0.20.5
|
||||
flutter_markdown: ^0.7.3+1
|
||||
flex_color_scheme: ^8.1.1
|
||||
flutter_hooks: ^0.21.2
|
||||
flutter_markdown: ^0.7.6+2
|
||||
flutter_portal: ^1.1.4
|
||||
flutter_riverpod: ^2.5.1
|
||||
flutter_svg: ^2.0.10+1
|
||||
flutter_svg: ^2.0.17
|
||||
flutter_typeahead: ^5.2.0
|
||||
fvp: ^0.26.1
|
||||
fvp: ^0.30.0
|
||||
highlighter: ^0.1.1
|
||||
hive_flutter: ^1.1.0
|
||||
hooks_riverpod: ^2.5.2
|
||||
intl: ^0.19.0
|
||||
jinja: ^0.6.0
|
||||
jinja: ^0.6.1
|
||||
json_annotation: ^4.9.0
|
||||
json_explorer:
|
||||
path: packages/json_explorer
|
||||
json_text_field: ^1.2.0
|
||||
just_audio: ^0.9.40
|
||||
just_audio: ^0.9.46
|
||||
just_audio_mpv: ^0.1.7
|
||||
just_audio_windows: ^0.2.0
|
||||
lottie: ^3.1.0
|
||||
markdown: ^7.2.2
|
||||
lottie: ^3.3.1
|
||||
markdown: ^7.3.0
|
||||
mime_dart: ^3.0.0
|
||||
multi_split_view: ^3.2.2
|
||||
multi_trigger_autocomplete_plus:
|
||||
path: packages/multi_trigger_autocomplete_plus
|
||||
package_info_plus: ^8.0.2
|
||||
package_info_plus: ^8.3.0
|
||||
path: ^1.8.3
|
||||
path_provider: ^2.1.2
|
||||
printing: ^5.13.4
|
||||
provider: ^6.1.2
|
||||
pub_semver: ^2.1.5
|
||||
riverpod: ^2.5.1
|
||||
scrollable_positioned_list: ^0.3.8
|
||||
shared_preferences: ^2.3.2
|
||||
share_plus: ^10.1.4
|
||||
shared_preferences: ^2.5.2
|
||||
url_launcher: ^6.2.5
|
||||
uuid: ^4.5.0
|
||||
vector_graphics_compiler: ^1.1.9+1
|
||||
video_player: ^2.8.7
|
||||
video_player_platform_interface: ^6.2.2
|
||||
video_player: ^2.9.3
|
||||
video_player_platform_interface: ^6.3.0
|
||||
window_manager: ^0.4.2
|
||||
window_size:
|
||||
git:
|
||||
url: https://github.com/google/flutter-desktop-embedding.git
|
||||
path: plugins/window_size
|
||||
share_plus: ^10.1.4
|
||||
|
||||
dependency_overrides:
|
||||
extended_text_field: ^16.0.0
|
||||
pdf_widget_wrapper: ^1.0.4
|
||||
web: ^0.5.0
|
||||
web: ^1.1.1
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
build_runner: ^2.4.12
|
||||
flutter_launcher_icons: ^0.13.1
|
||||
flutter_lints: ^4.0.0
|
||||
flutter_native_splash: ^2.4.1
|
||||
build_runner: ^2.4.15
|
||||
flutter_launcher_icons: ^0.14.3
|
||||
flutter_lints: ^5.0.0
|
||||
flutter_native_splash: ^2.4.5
|
||||
freezed: ^2.5.7
|
||||
json_serializable: ^6.7.1
|
||||
json_serializable: ^6.9.4
|
||||
integration_test:
|
||||
sdk: flutter
|
||||
melos: ^6.2.0
|
||||
spot: ^0.13.0
|
||||
melos: ^6.3.2
|
||||
spot: ^0.17.0
|
||||
test: ^1.25.2
|
||||
|
||||
flutter:
|
||||
|
@ -115,7 +115,6 @@ void main() {
|
||||
label.style?.color,
|
||||
equals(Theme.of(tester.element(find.byKey(testKey)))
|
||||
.colorScheme
|
||||
.onSurface
|
||||
.withOpacity(0.65)));
|
||||
.onSurfaceVariant));
|
||||
});
|
||||
}
|
||||
|
@ -71,77 +71,115 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
group("Testing getAPIColor function", () {
|
||||
HTTPVerb methodGet = HTTPVerb.get;
|
||||
Color colMethodGetDarkModeExpected = getDarkModeColor(kColorHttpMethodGet);
|
||||
test('Test getAPIColor for GET method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodGet,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodGetDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodHead = HTTPVerb.head;
|
||||
Color colMethodHeadDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodHead);
|
||||
test('Test getHTTPMethodColor for HEAD Method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodHead,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodHeadDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPatch = HTTPVerb.patch;
|
||||
Color colMethodPatchDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodPatch);
|
||||
test('Test getHTTPMethodColor for PATCH Method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodPatch,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodPatchDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPut = HTTPVerb.put;
|
||||
Color colMethodPutDarkModeExpected = getDarkModeColor(kColorHttpMethodPut);
|
||||
test('Test getHTTPMethodColor for PUT Method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodPut,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodPutDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPost = HTTPVerb.post;
|
||||
Color colMethodPostDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodPost);
|
||||
test('Test getHTTPMethodColor for POST Method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodPost,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodPostDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodDelete = HTTPVerb.delete;
|
||||
Color colMethodDeleteDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodDelete);
|
||||
test('Test getHTTPMethodColor for DELETE Method dark mode', () {
|
||||
expect(
|
||||
getAPIColor(
|
||||
APIType.rest,
|
||||
method: methodDelete,
|
||||
brightness: dark,
|
||||
),
|
||||
colMethodDeleteDarkModeExpected);
|
||||
});
|
||||
});
|
||||
|
||||
group("Testing getHTTPMethodColor function", () {
|
||||
HTTPVerb methodGet = HTTPVerb.get;
|
||||
test('Test getHTTPMethodColor for GET method', () {
|
||||
expect(getHTTPMethodColor(methodGet), kColorHttpMethodGet);
|
||||
});
|
||||
|
||||
Color colMethodGetDarkModeExpected = getDarkModeColor(kColorHttpMethodGet);
|
||||
test('Test getHTTPMethodColor for GET method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodGet, brightness: dark),
|
||||
colMethodGetDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodHead = HTTPVerb.head;
|
||||
test('Test getHTTPMethodColor for HEAD Method', () {
|
||||
expect(getHTTPMethodColor(methodHead), kColorHttpMethodHead);
|
||||
});
|
||||
|
||||
Color colMethodHeadDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodHead);
|
||||
test('Test getHTTPMethodColor for HEAD Method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodHead, brightness: dark),
|
||||
colMethodHeadDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPatch = HTTPVerb.patch;
|
||||
test('Test getHTTPMethodColor for PATCH Method', () {
|
||||
expect(getHTTPMethodColor(methodPatch), kColorHttpMethodPatch);
|
||||
});
|
||||
|
||||
Color colMethodPatchDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodPatch);
|
||||
test('Test getHTTPMethodColor for PATCH Method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodPatch, brightness: dark),
|
||||
colMethodPatchDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPut = HTTPVerb.put;
|
||||
test('Test getHTTPMethodColor for PUT Method', () {
|
||||
expect(getHTTPMethodColor(methodPut), kColorHttpMethodPut);
|
||||
});
|
||||
|
||||
Color colMethodPutDarkModeExpected = getDarkModeColor(kColorHttpMethodPut);
|
||||
test('Test getHTTPMethodColor for PUT Method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodPut, brightness: dark),
|
||||
colMethodPutDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodPost = HTTPVerb.post;
|
||||
|
||||
test('Test getHTTPMethodColor for POST Method', () {
|
||||
expect(getHTTPMethodColor(methodPost), kColorHttpMethodPost);
|
||||
});
|
||||
|
||||
Color colMethodPostDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodPost);
|
||||
test('Test getHTTPMethodColor for POST Method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodPost, brightness: dark),
|
||||
colMethodPostDarkModeExpected);
|
||||
});
|
||||
|
||||
HTTPVerb methodDelete = HTTPVerb.delete;
|
||||
test('Test getHTTPMethodColor for DELETE Method', () {
|
||||
expect(getHTTPMethodColor(methodDelete), kColorHttpMethodDelete);
|
||||
});
|
||||
|
||||
Color colMethodDeleteDarkModeExpected =
|
||||
getDarkModeColor(kColorHttpMethodDelete);
|
||||
test('Test getHTTPMethodColor for DELETE Method dark mode', () {
|
||||
expect(getHTTPMethodColor(methodDelete, brightness: dark),
|
||||
colMethodDeleteDarkModeExpected);
|
||||
});
|
||||
});
|
||||
|
||||
group('Testing getScaffoldKey function', () {
|
||||
|
Reference in New Issue
Block a user