Compare commits

...

42 commits
v0.3.1 ... main

Author SHA1 Message Date
git
e3c6cbd231 Merge pull request 'chore: Configure Renovate' (#112) from renovate/configure into main
Some checks failed
Cargo Build & Test / Rust project - latest (push) Has been cancelled
Reviewed-on: #112
2025-09-07 12:39:23 +02:00
Renovate Bot
7829b76080 Add renovate.json
Some checks failed
Cargo Build & Test / Rust project - latest (push) Has been cancelled
Cargo Build & Test / Rust project - latest (pull_request) Has been cancelled
2025-08-18 20:26:36 +00:00
PatrykHegenberg
b6329eb698
Update README.md 2024-05-31 10:04:47 +02:00
PatrykHegenberg
62f84255e3
Update README.md 2024-05-31 07:23:53 +02:00
PatrykHegenberg
d5cf4d86f2
Create LICENSE 2024-05-31 07:11:06 +02:00
PatrykHegenberg
f19648a386
Update build_and_test_on_push.yml 2024-05-30 09:22:23 +02:00
3abff684ad test(caesar-core,sender): added missing test for replace_protocol 2024-05-30 09:17:50 +02:00
PatrykHegenberg
f76f89bf9f
Create build_and_test_on_push.yml 2024-05-30 09:16:25 +02:00
0465851ec5 docs: added project code documentation 2024-05-30 08:55:59 +02:00
07584a48a1 version: updated version and removed non existing packages 2024-05-30 00:26:16 +02:00
4a3b1a7996 refactor(project): deleted not needed folders 2024-05-30 00:11:47 +02:00
0d354efb8e docs(project): added docstrings to all code files 2024-05-29 23:55:47 +02:00
47acdec22a refactor(gui): removed old rinf based flutter gui 2024-05-29 21:48:37 +02:00
PatrykHegenberg
4697cf35db
Merge pull request #111 from PatrykHegenberg/91-implement-the-gui-for-native-desktop-apps-in-flutter
91 implement the gui for native desktop apps in flutter
2024-05-29 21:27:19 +02:00
PatrykHegenberg
fc5d8efed6
Merge branch 'main' into 91-implement-the-gui-for-native-desktop-apps-in-flutter 2024-05-29 21:26:34 +02:00
4af2255d2f refactor(project): cleaned up with clippy 2024-05-29 20:14:34 +02:00
cd43fd6041 feature(gui): adjusted color settings for buttons and settings screen 2024-05-27 22:25:13 +02:00
d9501024db refactor(gui): cleaned up not needed code 2024-05-27 21:55:35 +02:00
0416ab6dab refactor(core,gui): make all needed changes to send and receive files on linux and android 2024-05-27 21:09:24 +02:00
351b7b9323 refactor(flutter_gui); removed not needed parts 2024-05-25 21:04:16 +02:00
1586818bd6 refactor(ceasar-core): changed from using openssl to rustls 2024-05-24 16:47:44 +02:00
1b83c0b5ff refactor(flutter_gui): moved constants to seperate file 2024-05-17 13:50:53 +02:00
f0f67332a0 feature(flutter_gui): change label alignment on receive screen 2024-05-17 12:03:40 +02:00
fbb212f383 feature(flutter_gui): add file storage location for android and change screen change after transfer 2024-05-17 10:32:11 +02:00
PatrykHegenberg
25422ed089
fix(receiver): add filepath for download on android. 2024-05-17 10:25:48 +02:00
fbb181d95b refactir(gui): added flutter version with flutter_rust_bridge 2024-05-16 20:25:21 +02:00
f1e48f6d12 feature(gui): add needed function for communication between gui and core 2024-05-16 07:43:11 +02:00
113e1cfe53 feature(gui): first basic attempt for a gui frontend in flutter 2024-05-15 19:46:48 +02:00
PatrykHegenberg
9db004472a
Merge pull request #100 from PatrykHegenberg/98-update-configuration-management-to-use-confy-for-file-based-configuration
98 update configuration management to use confy for file based configuration
2024-05-09 16:29:03 +02:00
667127bbf0 feature(cli,config): added custom default config 2024-05-09 16:25:52 +02:00
6a4aa2506d fix(cli,config): fixed usage of german language 2024-05-09 16:04:45 +02:00
3beef739a4 refactor(cli): add an own config.rs file for the config logic 2024-05-09 16:03:15 +02:00
aa183a30bd refactor(sender, receiver, relay): changed use of .env file to a config file
added support for a config file. under linux this will be under
XDG_HOME/.config/caesar with name caesar.toml
2024-05-09 15:22:48 +02:00
bb492aa962 refactor(caesar): cleaned up from unneeded explanatory commits and build on_message function with match instead of if 2024-05-08 19:00:21 +02:00
PatrykHegenberg
7a4708eae2
Merge pull request #97 from PatrykHegenberg/71-seperate-core-functionality-from-app-logic
71 seperate core functionality from app logic
2024-05-05 14:35:53 +02:00
463d6d12ca refactor: added alle needed components 2024-05-05 14:30:14 +02:00
bb874b8a89 Merge branch '94-add-tui-component-to-monorepo' into 71-seperate-core-functionality-from-app-logic
* 94-add-tui-component-to-monorepo:
  feature(tui): add basic structure for a tui component to repo
2024-05-05 14:29:14 +02:00
47ec143f1e feature(tui): add basic structure for a tui component to repo 2024-05-05 14:27:26 +02:00
8fbe713ade feature(mobile,desktop): add basic repo components 2024-05-05 14:25:19 +02:00
PatrykHegenberg
6dbf39110b
Merge pull request #93 from PatrykHegenberg/72-restructure-the-project-to-a-monorepo
refactor(caesar): restructure the project to a monorepo
2024-05-05 13:55:00 +02:00
b39e88107a refactor(caesar): restructure the project to a monorepo 2024-05-05 13:42:11 +02:00
PatrykHegenberg
17ebd0261b
Add issue templates for easier project handling 2024-05-03 13:39:47 +02:00
3111 changed files with 79727 additions and 4089 deletions

38
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View file

@ -0,0 +1,38 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View file

@ -0,0 +1,40 @@
---
name: Development Issue Template
about: This is a developing issue template to be used by the developers
title: Dev
labels: ''
assignees: ''
---
Provide a general summary of the issue in the Title above
**Summary**
A brief summary of the task or feature.
**Description**
A more detailed description of the task or feature.
**Acceptance Criteria**
Which criteria has to be reached to be accepted
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] ...
**Tasks**
Which tasks are included to add this feature
- [ ] Task 1
- [ ] Task 2
- [ ] ...
**Dependencies**
Which dependencies are introduced to the project
- [ ] Dependency 1
- [ ] Dependency 2
- [ ] ...
**Estimates**
Estimated effort for completion: [Effort in hours/days/weeks]
**Additional Information**
Any additional information relevant to the development.

View file

@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View file

@ -0,0 +1,26 @@
name: Cargo Build & Test
on:
push:
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
build_and_test:
name: Rust project - latest
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- stable
- beta
- nightly
steps:
- uses: actions/checkout@v3
- run: sudo apt-get -y install protobuf-compiler
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
- run: cargo build --verbose
- run: cargo test --verbose

853
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -1,56 +1,3 @@
[package]
name = "caesar-transfer-iu"
version = "0.3.1"
edition = "2021"
build = "src/build.rs"
authors = ["Manuel Keidel", "Patryk Hegenberg", "Krzysztof Stankiewicz"]
[[bin]]
name = "caesar"
path = "src/main.rs"
[[bin]]
name = "caesar-transfer-iu"
path = "src/shuttle.rs"
[dependencies]
futures-util = "0.3"
tungstenite = "0.21.0"
tokio = { version = "1.28.1", features = ["full"] }
tokio-tungstenite = { version = "0.21.0", features = [
"rustls-tls-webpki-roots",
] }
serde_json = { version = "1.0" }
serde = { version = "1.0", features = ["derive"] }
uuid = { version = "1.3.2", features = ["v4"] }
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
dotenv = { version = "0.15.0", features = ["clap", "cli"] }
clap = { version = "4.5.4", features = ["derive"] }
flume = { git = "https://github.com/zesterer/flume", rev = "80d19c49" }
prost = "0.12.4"
prost-types = "0.12.4"
base64 = "0.22.0"
url = "2.4.0"
p256 = { version = "0.13.2", features = ["ecdh"] }
hmac = "0.12.1"
sha2 = "0.10.7"
rand = { version = "0.8.5", features = ["getrandom"] }
aes-gcm = "0.10.3"
sanitize-filename = "0.5.0"
qr2term = "0.3.1"
axum = { version = "0.7.5", features = ["ws"] }
tower-http = { version = "0.5.2", features = ["fs", "trace"] }
axum-client-ip = "0.6.0"
local-ip-address = "0.6.1"
axum-extra = { version = "0.9.3", features = ["typed-header"] }
headers = "0.4"
tower = { version = "0.4", features = ["util"] }
shuttle-axum = { version = "0.44.0" }
shuttle-runtime = { version = "0.44.0" }
dotenvy = "0.15.7"
reqwest = { version = "0.12.4", features = ["blocking", "json"] }
hex = "0.4.3"
[build-dependencies]
prost-build = "0.12.4"
[workspace]
resolver = "2"
members = ["caesar-cli", "caesar-core", "caesar-shuttle", "flutter_test_lib"]

21
LICENSE Normal file
View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Manuel Keidel, Patryk Hegenberg, Krzysztof Stankiewicz
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,22 +1,28 @@
# Caesar
This program provides a simple relay server that can be controlled via the command line.
# Caesar-Transfer
![caesar-gui-send-linux](https://github.com/PatrykHegenberg/caesar-transfer/assets/112555272/8e8bc3a9-cf2d-4a46-8280-fe88304e0a84)
This program provides a simple end-to_end encrypted filesharing system.
Either the cli version or the gui version can be used for this.
## Prerequisites
Rust toolchain installed
## Installation
1. Clone the repository:
```bash
git clone https://github.com/your-username/caesar.git
git clone https://github.com/PatrykHegenberg/caesar-transfer.git
```
2. Change to the project directory:
```bash
cd caesar
cd caesar-transfer
```
3. Build the program:
```bash
cargo build --release
cargo build --bin caesar --release
```
## Usage
### cli
The program offers the following commands:
`serve`
Starts the relay server.
@ -28,7 +34,7 @@ You can optionally specify the listening address and port using flags:
```bash
./target/release/caesar serve -p 8080 -l 192.168.1.100
```
By default, the server listens on 0.0.0.0:1323.
By default, the server listens on 0.0.0.0:8000.
`send`
Sends data through the relay server.
@ -41,7 +47,18 @@ Receives data through the relay server.
```bash
./target/release/caesar receive
```
### GUI
To use the Gui version of Ceasar-Transfer, you can download the version that suits you under Releases. Currently supported operating systems are Windows, Linux and Android.
#### Desktop
Copy the folder contained in the zip/tar file to a folder of your choice and add the path to it to your PATH variable.
Start the application and configure your relay server in the settings.
#### Android
As the Android version is currently in beta status, the APK must also be downloaded from the release page.
Open it with your smartphone's file manager and install it.
Start the application and configure your relay server in the settings.
## Help
For more information about the commands and arguments, use:
```bash
@ -57,12 +74,12 @@ Start the relay server:
Open a send window in another terminal:
```bash
./target/release/caesar send
./target/release/caesar -r ws://0.0.0.0:8000 send
```
Open a receive window in another terminal:
```bash
./target/release/caesar receive
./target/release/caesar -r ws://0.0.0.0:8000 receive
```
Now you can test the functionality of the relay server.
Now you can test the functionality of the relay server using the cli version.

1
Shuttle.toml Normal file
View file

@ -0,0 +1 @@
name = "caesar-transfer-iu"

23
caesar-cli/Cargo.toml Normal file
View file

@ -0,0 +1,23 @@
[package]
name = "caesar-cli"
version = "0.3.2"
edition = "2021"
authors = ["Manuel Keidel, Patryk Hegenberg, Krzysztof Stankiewicz"]
[[bin]]
name = "caesar"
path = "src/main.rs"
[dependencies]
caesar-core = { path = "../caesar-core" }
tokio = { version = "1.28.1", features = ["full"] }
serde_json = { version = "1.0" }
serde = { version = "1.0", features = ["derive"] }
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
clap = { version = "4.5.4", features = ["derive"] }
axum = { version = "0.7.5", features = ["ws"] }
axum-client-ip = "0.6.0"
confy = "0.6.1"
dotenvy = { version = "0.15.7", features = ["clap", "cli"] }
lazy_static = "1.4.0"

153
caesar-cli/src/cli/args.rs Normal file
View file

@ -0,0 +1,153 @@
use caesar_core::relay;
use caesar_core::sender;
use caesar_core::{receiver, sender::util::generate_random_name};
use clap::{Parser, Subcommand};
use std::{env, sync::Arc};
use tracing::debug;
use crate::config::GLOBAL_CONFIG;
/// Struct representing the command line arguments parsed by clap.
///
/// It uses the clap library to define the command line arguments and their
/// attributes. The version of the application is obtained from the cargo.toml
/// file.
///
/// The `command` field is an optional subcommand. It is represented by the
/// `Commands` enum which defines the different subcommands that can be used.
#[derive(Parser, Debug)]
#[command(version = env!("CARGO_PKG_VERSION"), about = "Send and receive files securely")]
#[command(long_about = None)]
pub struct Args {
/// The subcommand to run.
///
/// It is an optional field. If it is not provided, the program will run without
/// any specific subcommand.
#[command(subcommand)]
pub command: Option<Commands>,
}
#[derive(Subcommand, Debug)]
pub enum Commands {
/// Send files to the receiver or relay server
Send {
/// Address of the relay server. Accepted formats are: 127.0.0.1:8080, [::1]:8080, example.com
#[arg(short, long)]
relay: Option<String>,
/// Path to file(s)
#[arg(value_name = "FILES")]
files: Vec<String>,
},
/// Receives Files from the sender with the matching password
Receive {
/// Address of the relay server. Accepted formats are: 127.0.0.1:8080, [::1]:8080, example.com
#[arg(short, long)]
relay: Option<String>,
/// Name of Transfer to download files
#[arg(value_name = "Transfer_Name")]
name: String,
},
/// Start a relay server
Serve {
/// Port to run the relay server on
#[arg(short, long)]
port: Option<i32>,
/// The Listen address to run the relay server on
#[arg(short, long)]
listen_address: Option<String>,
},
}
/// Default implementation of the `Args` struct.
///
/// This implementation uses the `new` method to create a new instance of `Args`.
impl Default for Args {
/// Creates a new instance of `Args` by calling the `new` method.
///
/// # Returns
///
/// A new instance of `Args`.
fn default() -> Self {
Self::new()
}
}
/// Struct representing the parsed command line arguments.
///
/// This struct implements the `Default` trait to create a new instance of `Args` by calling the
/// `new` method.
///
/// The `run` method is used to execute the corresponding command based on the parsed arguments.
impl Args {
/// Creates a new instance of `Args` by calling the `parse` method.
pub fn new() -> Self {
Self::parse()
}
/// Executes the corresponding command based on the parsed arguments.
///
/// This method takes no parameters.
///
/// # Returns
///
/// A `Result` that either returns `Ok(())` indicating successful execution or an `Err`
/// indicating an error.
pub async fn run(&self) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// Retrieve the global configuration
let cfg = &GLOBAL_CONFIG;
debug!("args: {:#?}", self);
// Match on the `command` field of `Args` to execute the corresponding command
match &self.command {
// Command to send files to the receiver or relay server
Some(Commands::Send { relay, files }) => {
// Create a string representation of the relay address
let relay_string: String = relay.as_deref().unwrap_or(&cfg.app_origin).to_string();
// Create Arc wrappers for the relay address and file paths
let relay_arc = Arc::new(relay_string);
let files_arc = Arc::new(files.to_vec());
// Generate a random name
let rand_name = generate_random_name();
// Start the sender with the generated name, relay address, and file paths
sender::start_sender(rand_name, relay_arc, files_arc).await;
}
// Command to receive files from the sender with the matching password
Some(Commands::Receive {
relay,
name,
}) => {
// Print the received transfer name
println!("Receive for {name:?}");
// Start the receiver with the current directory, relay address, and transfer name
let _ = receiver::start_receiver(
".".to_string(),
relay.as_deref().unwrap_or(&cfg.app_origin),
name,
)
.await;
}
// Command to start a relay server
Some(Commands::Serve {
port,
listen_address,
}) => {
// Create a string representation of the listen address
let address: String = listen_address
.as_deref()
.unwrap_or(&cfg.app_host)
.to_string();
// Create an integer representation of the port
let port_value = port.unwrap_or(cfg.app_port.parse::<i32>().unwrap_or(0));
let port: i32 = port_value;
// Start the relay server with the port and listen address
relay::server::start_ws(&port, &address).await;
}
// No command provided
None => {}
}
Ok(())
}
}

78
caesar-cli/src/config.rs Normal file
View file

@ -0,0 +1,78 @@
use lazy_static::lazy_static;
use serde::{Deserialize, Serialize};
/// Represents the configuration settings for the Caesar application.
///
/// This struct is used to store the configuration settings for the application,
/// such as the environment, host, port, origin, and logging level.
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct CaesarConfig {
/// The environment in which the application is running.
///
/// Possible values are "production", "staging", or "development".
pub app_environment: String,
/// The host on which the application is running.
///
/// This is typically an IP address or a hostname.
pub app_host: String,
/// The port on which the application is listening.
///
/// This is typically a string representation of a port number.
pub app_port: String,
/// The origin of the application.
///
/// This is typically a URL that specifies the protocol, hostname, and port.
pub app_origin: String,
/// The relay endpoint of the application.
///
/// This is typically a combination of a hostname and port.
pub app_relay: String,
/// The logging level for the application.
///
/// This is typically a string representation of a logging level, such as "info",
/// "debug", or "error".
pub rust_log: String,
}
/// The default configuration values for the Caesar application.
///
/// These values are used when loading the configuration file fails.
/// The default configuration is suitable for running the application in a production environment.
impl Default for CaesarConfig {
/// Returns a new `CaesarConfig` instance with default values.
///
/// # Returns
///
/// A new `CaesarConfig` instance with the following default values:
///
/// - `app_environment`: "production"
/// - `app_host`: "0.0.0.0"
/// - `app_port`: "8000"
/// - `app_origin`: "wss://caesar-transfer-iu.shuttleapp.rs"
/// - `app_relay`: "0.0.0.0:8000"
/// - `rust_log`: "info"
fn default() -> Self {
CaesarConfig {
app_environment: "production".to_string(), // The environment in which the application is running.
app_host: "0.0.0.0".to_string(), // The host on which the application is running.
app_port: "8000".to_string(), // The port on which the application is listening.
app_origin: "wss://caesar-transfer-iu.shuttleapp.rs".to_string(), // The origin of the application.
app_relay: "0.0.0.0:8000".to_string(), // The relay endpoint of the application.
rust_log: "info".to_string(), // The logging level for the application.
}
}
}
lazy_static! {
pub static ref GLOBAL_CONFIG: CaesarConfig = {
let cfg: CaesarConfig =
confy::load("caesar", "caesar").expect("could not find config file");
cfg
};
}

34
caesar-cli/src/main.rs Normal file
View file

@ -0,0 +1,34 @@
use crate::cli::args::Args;
use dotenvy::dotenv;
use tracing::error;
use tracing_subscriber::filter::EnvFilter;
mod cli;
mod config;
/// Entry point of the application.
///
/// This function is called when the application is started. It initializes the environment,
/// parses the command line arguments, and runs the application.
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// Load environment variables from the `.env` file.
dotenv().ok();
// Initialize the logging subscriber.
// It configures the logging level based on the `RUST_LOG` environment variable.
tracing_subscriber::fmt()
.with_env_filter(EnvFilter::from_default_env())
.init();
// Parse the command line arguments.
let args = Args::new();
// Run the application.
// If an error occurs, log the error message.
if let Err(e) = args.run().await {
error!("{e}");
}
Ok(())
}

53
caesar-core/Cargo.toml Normal file
View file

@ -0,0 +1,53 @@
[package]
name = "caesar-core"
version = "0.3.2"
edition = "2021"
build = "src/build.rs"
authors = ["Manuel Keidel", "Patryk Hegenberg", "Krzysztof Stankiewicz"]
[lib]
crate-type = ["lib", "cdylib", "staticlib"]
[dependencies]
futures-util = "0.3"
tungstenite = "0.21.0"
tokio = { version = "1.28.1", features = ["full"] }
tokio-tungstenite = { version = "0.21.0", features = [
"rustls-tls-webpki-roots",
] }
serde_json = { version = "1.0" }
serde = { version = "1.0", features = ["derive"] }
uuid = { version = "1.3.2", features = ["v4"] }
tracing = "0.1.40"
tracing-subscriber = { version = "0.3.18", features = ["env-filter"] }
dotenv = { version = "0.15.0", features = ["clap", "cli"] }
clap = { version = "4.5.4", features = ["derive"] }
flume = { git = "https://github.com/zesterer/flume", rev = "80d19c49" }
prost = "0.12.4"
prost-types = "0.12.4"
base64 = "0.22.0"
url = "2.4.0"
p256 = { version = "0.13.2", features = ["ecdh"] }
hmac = "0.12.1"
sha2 = "0.10.7"
rand = { version = "0.8.5", features = ["getrandom"] }
aes-gcm = "0.10.3"
sanitize-filename = "0.5.0"
qr2term = "0.3.1"
axum = { version = "0.7.5", features = ["ws"] }
tower-http = { version = "0.5.2", features = ["fs", "trace"] }
axum-client-ip = "0.6.0"
local-ip-address = "0.6.1"
axum-extra = { version = "0.9.3", features = ["typed-header"] }
headers = "0.4"
tower = { version = "0.4", features = ["util"] }
reqwest = { version = "0.12.4", default-features = false, features = [
"blocking",
"json",
"rustls-tls",
] }
hex = "0.4.3"
anyhow = "1.0.83"
[build-dependencies]
prost-build = "0.12.4"

4
caesar-core/src/lib.rs Normal file
View file

@ -0,0 +1,4 @@
pub mod receiver;
pub mod relay;
pub mod sender;
pub mod shared;

View file

@ -0,0 +1,640 @@
use std::{fs, io::stdout, path::Path};
use crate::shared::{
packets::{
packet::Value, ChunkPacket, HandshakePacket, HandshakeResponsePacket, ListPacket, Packet,
ProgressPacket,
},
JsonPacket, JsonPacketResponse, JsonPacketSender, PacketSender, Sender, Socket, Status,
};
use aes_gcm::{aead::Aead, Aes128Gcm, Key};
use base64::{engine::general_purpose, Engine as _};
use futures_util::{future, pin_mut, stream::TryStreamExt, StreamExt};
use hmac::{Hmac, Mac};
use p256::{ecdh::EphemeralSecret, pkcs8::der::Writer, PublicKey};
use prost::Message;
use rand::rngs::OsRng;
use sha2::Sha256;
use tokio_tungstenite::tungstenite::{protocol::Message as WebSocketMessage, Error};
use tracing::error;
const DESTINATION: u8 = 0;
const NONCE_SIZE: usize = 12;
#[cfg(target_os = "android")]
const FILE_PATH_PREFIX: &str = "/storage/emulated/0/Download";
/// Represents a file to be transferred.
///
/// # Fields
///
/// - `name`: The name of the file.
/// - `size`: The total size of the file in bytes.
/// - `progress`: The number of bytes that have been transferred so far.
/// - `handle`: The file handle for reading and writing the file.
#[derive(Debug)]
struct File {
/// The name of the file.
name: String,
/// The total size of the file in bytes.
size: u64,
/// The number of bytes that have been transferred so far.
progress: u64,
/// The file handle for reading and writing the file.
handle: fs::File,
}
/// Represents the state of the receiver.
///
/// # Fields
///
/// - `hmac`: The HMAC key used for authentication.
/// - `sender`: The sender used for sending packets.
/// - `key`: The ephemeral secret key used for key agreement.
/// - `shared_key`: The shared key used for encryption.
/// - `files`: The list of files being transferred.
/// - `sequence`: The sequence number of the last received packet.
/// - `index`: The index of the current file being transferred.
/// - `progress`: The number of bytes transferred so far.
/// - `length`: The total length of the file being transferred.
struct Context {
/// The HMAC key used for authentication.
hmac: Vec<u8>,
/// The sender used for sending packets.
sender: Sender,
/// The ephemeral secret key used for key agreement.
key: EphemeralSecret,
/// The shared key used for encryption.
shared_key: Option<Aes128Gcm>,
/// The list of files being transferred.
files: Vec<File>,
/// The sequence number of the last received packet.
sequence: u32,
/// The index of the current file being transferred.
index: usize,
/// The number of bytes transferred so far.
progress: u64,
/// The total length of the file being transferred.
length: u64,
}
/// Handle the join room packet.
///
/// # Arguments
///
/// * `size` - The size of the room.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if the join room packet is invalid.
fn on_join_room(size: Option<usize>) -> Status {
// Check if the size of the room is provided
if size.is_none() {
// Return an error if the join room packet is invalid
return Status::Err("Invalid join room packet.".into());
}
// Print a message indicating that the client has successfully connected to the room
println!("Connected to room.");
// Return a continue status to indicate that the operation was successful
Status::Continue()
}
/// Handle the error packet.
///
/// # Arguments
///
/// * `message` - The error message.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error with the provided error message.
fn on_error(message: String) -> Status {
// Return an error with the provided error message
Status::Err(message)
}
/// Handle the leave room packet.
///
/// # Arguments
///
/// * `context` - The receiver context.
/// * `_` - The index of the sender. Currently unused.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if there are still files being transferred.
fn on_leave_room(context: &mut Context, _: usize) -> Status {
// Check if there are any files being transferred with less than 100% progress
if context.files.iter().any(|file| file.progress < 100) {
// Print a message indicating that the transfer was interrupted because the host left the room
println!();
println!("Transfer was interrupted because the host left the room.");
// Return an error with the provided message
Status::Err("Transfer was interrupted because the host left the room.".into())
} else {
// Return an exit status to indicate that the operation was successful
Status::Exit()
}
}
/// Handle the list packet.
///
/// # Arguments
///
/// * `filepath` - The path to the directory where the files will be saved.
/// * `context` - The receiver context.
/// * `list` - The list packet containing the files to be transferred.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if the list packet is invalid or if a file with the same name already exists.
fn on_list(filepath: String, context: &mut Context, list: ListPacket) -> Status {
// Check if the shared key is established
if context.shared_key.is_none() {
return Status::Err("Invalid list packet: no shared key established".into());
}
// Iterate over the entries in the list packet
for entry in list.entries {
// Sanitize the filename to prevent directory traversal attacks
let path = sanitize_filename::sanitize(entry.name.clone());
// Construct the file path
let file_path = format!("{}/{}", filepath, path);
// Check if the file already exists
if Path::new(&file_path).exists() {
return Status::Err(format!("The file '{}' already exists.", path));
}
// Create a new file
let handle = match fs::File::create(&file_path) {
Ok(handle) => handle,
Err(error) => {
return Status::Err(format!(
"Error: Failed to create file '{}': {}",
file_path, error
));
}
};
// Create a new file object and add it to the context
let file = File {
name: entry.name,
size: entry.size,
handle,
progress: 0,
};
context.files.push(file);
}
// Reset the context for the next file transfer
context.index = 0;
context.progress = 0;
context.sequence = 0;
context.length = 0;
Status::Continue()
}
/// Handle a chunk packet.
///
/// This function is responsible for processing chunk packets received from the sender.
/// It checks if the shared key has been established, verifies the sequence number,
/// writes the chunk to the corresponding file, updates the file's progress, sends progress
/// updates if necessary, and handles the end of a file transfer.
///
/// # Arguments
///
/// * `context` - The receiver context.
/// * `chunk` - The chunk packet received from the sender.
///
/// # Returns
///
/// A status indicating if the operation was successful.
fn on_chunk(context: &mut Context, chunk: ChunkPacket) -> Status {
// Check if the shared key is established
if context.shared_key.is_none() {
return Status::Err("Invalid chunk packet: no shared key established".into());
}
// Verify the sequence number
if chunk.sequence != context.sequence {
return Status::Err(format!(
"Expected sequence {}, but got {}.",
context.sequence, chunk.sequence
));
}
// Get the file corresponding to the current index
let Some(file) = context.files.get_mut(context.index) else {
return Status::Err("Invalid file index.".into());
};
// Update the file's length
context.length += chunk.chunk.len() as u64;
// Increment the sequence number
context.sequence += 1;
// Write the chunk to the file
file.handle.write(&chunk.chunk).unwrap();
// Update the file's progress
file.progress = (context.length * 100) / file.size;
// Send progress updates if necessary
if file.progress == 100 || file.progress - context.progress >= 1 || chunk.sequence == 0 {
context.progress = file.progress;
let progress = ProgressPacket {
index: context.index.try_into().unwrap(),
progress: context.progress.try_into().unwrap(),
};
context.sender.send_encrypted_packet(
&context.shared_key,
DESTINATION,
Value::Progress(progress),
);
print!("\rTransferring '{}': {}%", file.name, file.progress);
std::io::Write::flush(&mut stdout()).unwrap();
}
// Handle the end of a file transfer
if file.size == context.length {
context.index += 1;
context.length = 0;
context.progress = 0;
context.sequence = 0;
println!();
}
Status::Continue()
}
/// Handle the handshake packet.
///
/// This function is responsible for handling the handshake packet received from the sender.
/// It performs the necessary verification and establishes the shared key between the sender and receiver.
///
/// # Arguments
///
/// * `context` - The receiver context.
/// * `handshake` - The handshake packet received from the sender.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
fn on_handshake(context: &mut Context, handshake: HandshakePacket) -> Status {
// Check if the shared key is already established
if context.shared_key.is_some() {
return Status::Err("Already performed handshake.".into());
}
// Create a HMAC instance using the shared key
let mut mac = Hmac::<Sha256>::new_from_slice(&context.hmac).unwrap();
// Update the HMAC with the sender's public key
mac.update(&handshake.public_key);
// Verify the signature using the HMAC
let verification = mac.verify_slice(&handshake.signature);
if verification.is_err() {
return Status::Err("Invalid signature from the sender.".into());
}
// Generate the receiver's public key
let public_key = context.key.public_key().to_sec1_bytes().into_vec();
// Create a new HMAC instance using the shared key
let mut mac = Hmac::<Sha256>::new_from_slice(&context.hmac).unwrap();
// Update the HMAC with the receiver's public key
mac.update(&public_key);
// Generate the signature using the HMAC
let signature = mac.finalize().into_bytes().to_vec();
// Convert the sender's public key into a `PublicKey` object
let shared_public_key = PublicKey::from_sec1_bytes(&handshake.public_key).unwrap();
// Perform Diffie-Hellman key exchange
let shared_secret = context.key.diffie_hellman(&shared_public_key);
let shared_secret = shared_secret.raw_secret_bytes();
let shared_secret = &shared_secret[0..16];
// Create a new 128-bit AES-GCM key from the shared secret
let shared_key: &Key<Aes128Gcm> = shared_secret.into();
let shared_key = <Aes128Gcm as aes_gcm::KeyInit>::new(shared_key);
// Create the handshake response packet
let handshake_response = HandshakeResponsePacket {
public_key,
signature,
};
// Send the handshake response packet to the sender
context
.sender
.send_packet(DESTINATION, Value::HandshakeResponse(handshake_response));
// Establish the shared key
context.shared_key = Some(shared_key);
Status::Continue()
}
/// Handle a message received from the WebSocket connection.
///
/// This function takes a `filepath` string, a mutable reference to a `Context` struct,
/// and a `WebSocketMessage` enum. It returns a `Status` enum.
///
/// # Arguments
///
/// * `filepath` - A string representing the file path.
/// * `context` - A mutable reference to a `Context` struct.
/// * `message` - A `WebSocketMessage` enum.
///
/// # Returns
///
/// A `Status` enum.
fn on_message(filepath: String, context: &mut Context, message: WebSocketMessage) -> Status {
// Handle text messages
match message.clone() {
WebSocketMessage::Text(text) => {
// Parse the JSON packet
let packet = match serde_json::from_str(&text) {
Ok(packet) => packet,
Err(_) => {
return Status::Continue();
}
};
// Handle different types of JSON packets
return match packet {
JsonPacketResponse::Join { size } => on_join_room(size),
JsonPacketResponse::Leave { index } => on_leave_room(context, index),
JsonPacketResponse::Error { message } => on_error(message),
_ => Status::Err(format!("Unexpected json packet: {:?}", packet)),
};
}
// Handle binary messages
WebSocketMessage::Binary(data) => {
// Extract the data from the binary message
let data = &data[1..];
let data = if let Some(shared_key) = &context.shared_key {
let nonce = &data[..NONCE_SIZE];
let ciphertext = &data[NONCE_SIZE..];
shared_key.decrypt(nonce.into(), ciphertext).unwrap()
} else {
data.to_vec()
};
// Decode the packet
let packet = Packet::decode(data.as_ref()).unwrap();
let value = packet.value.unwrap();
// Handle different types of packets
return match value {
Value::List(list) => on_list(filepath, context, list),
Value::Chunk(chunk) => on_chunk(context, chunk),
Value::Handshake(handshake) => on_handshake(context, handshake),
_ => Status::Err(format!("Unexpected packet: {:?}", value)),
};
}
_ => (),
}
// Return an error status for invalid message types
Status::Err("Invalid message type".into())
}
/// Starts the receiver's client.
///
/// This function takes in a file path, a socket, and a fragment string. It
/// then extracts the room ID and HMAC from the fragment string. The function
/// also generates an ephemeral secret key.
///
/// The function initializes a `Context` struct with the extracted information
/// and sets up the necessary communication channels. It then sends a join
/// request to the server and starts handling incoming messages.
///
/// # Arguments
///
/// * `filepath` - The path to the file to be received.
/// * `socket` - The WebSocket connection to the server.
/// * `fragment` - The invite code containing the room ID and HMAC.
pub async fn start(filepath: String, socket: Socket, fragment: &str) {
let Some(index) = fragment.rfind('-') else {
println!("Error: The invite code '{}' is not valid.", fragment);
return;
};
let id = &fragment[..index];
let hmac = &fragment[index + 1..];
let Ok(hmac) = general_purpose::STANDARD.decode(hmac) else {
error!("Error: Invalid base64 inside the invite code.");
return;
};
let key = EphemeralSecret::random(&mut OsRng);
let (sender, receiver) = flume::bounded(1000);
let (outgoing, incoming) = socket.split();
let mut context = Context {
hmac,
sender,
key,
shared_key: None,
files: vec![],
index: 0,
sequence: 0,
progress: 0,
length: 0,
};
println!("Attempting to join room '{}'...", id);
context
.sender
.send_json_packet(JsonPacket::Join { id: id.to_string() });
let outgoing_handler = receiver.stream().map(Ok).forward(outgoing);
let incoming_handler = incoming.try_for_each(|message| {
match on_message(filepath.clone(), &mut context, message) {
Status::Exit() => {
context.sender.send_json_packet(JsonPacket::Leave);
println!("Transfer has completed.");
return future::err(Error::ConnectionClosed);
}
Status::Err(error) => {
println!("Error: {}", error);
return future::err(Error::ConnectionClosed);
}
_ => {}
};
future::ok(())
});
pin_mut!(incoming_handler, outgoing_handler);
future::select(incoming_handler, outgoing_handler).await;
}
#[cfg(test)]
mod tests {
use super::*;
use tokio_tungstenite::tungstenite::Message as WebSocketMessage;
#[test]
fn test_on_join_room_valid_size() {
assert_eq!(on_join_room(Some(10)), Status::Continue());
}
#[test]
fn test_on_join_room_invalid_size() {
assert_eq!(
on_join_room(None),
Status::Err("Invalid join room packet.".into())
);
}
#[test]
fn test_on_error_with_message() {
assert_eq!(
on_error("Error message".to_string()),
Status::Err("Error message".to_string())
);
}
#[test]
fn test_on_leave_room() {
let (sender, _) = flume::bounded(1000);
let mut context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![
File {
name: "file1.txt".to_string(),
size: 100,
progress: 100,
handle: fs::File::create("file1.txt").unwrap(),
},
File {
name: "file2.txt".to_string(),
size: 100,
progress: 50,
handle: fs::File::create("file2.txt").unwrap(),
},
],
sequence: 0,
index: 0,
progress: 0,
length: 0,
};
assert_eq!(
on_leave_room(&mut context, 0),
Status::Err("Transfer was interrupted because the host left the room.".into())
);
context.files[1].progress = 100;
assert_eq!(on_leave_room(&mut context, 0), Status::Exit());
}
#[test]
fn test_on_message_text_join() {
let (sender, _) = flume::bounded(1000);
let mut context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![],
sequence: 0,
index: 0,
progress: 0,
length: 0,
};
let text_message = WebSocketMessage::Text(r#"{"type":"join","size":10}"#.to_string());
assert_eq!(
on_message("".to_string(), &mut context, text_message),
Status::Continue()
);
}
#[test]
fn test_on_chunk() {
let (sender, _) = flume::bounded(1000);
let mut context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![File {
name: "file1.txt".to_string(),
size: 100,
progress: 0,
handle: fs::File::create("file1.txt").unwrap(),
}],
sequence: 0,
index: 0,
progress: 0,
length: 0,
};
let chunk_packet = ChunkPacket {
sequence: 0,
chunk: b"Hello, world!".to_vec(),
};
assert_eq!(
on_chunk(&mut context, chunk_packet),
Status::Err("Invalid chunk packet: no shared key established".into())
);
}
}

View file

@ -0,0 +1,69 @@
use anyhow::{anyhow, Result};
use hex;
use reqwest::{self, Client};
use sha2::{Digest, Sha256};
use crate::relay::transfer::TransferResponse;
/// Fetches download information from the relay server for the given file name.
///
/// # Arguments
///
/// * `relay` - The URL of the relay server.
/// * `name` - The name of the file.
///
/// # Returns
///
/// A future that resolves to a `Result` containing the download information
/// if the request is successful, or an error if the request fails.
pub async fn download_info(relay: &str, name: &str) -> Result<TransferResponse> {
// Convert the relay server URL and file name to strings
let url = String::from(relay);
let hashed_name = Sha256::digest(name.as_bytes());
let hashed_string = hex::encode(hashed_name);
// Send a GET request to the relay server with the file name hash as a query parameter
let resp = reqwest::get(format!("{}/download/{}", url, hashed_string))
.await
// If the request fails, return an error with the reason
.map_err(|e| anyhow!("Failed to send GET request: {}", e))?;
// Parse the response body as JSON into a `TransferResponse` struct
resp.json::<TransferResponse>()
.await
// If the JSON parsing fails, return an error with the reason
.map_err(|e| anyhow!("Failed to parse JSON response: {}", e))
}
/// Notifies the relay server that the file download was successful for the given file name.
///
/// # Arguments
///
/// * `relay` - The URL of the relay server.
/// * `name` - The name of the file.
///
/// # Returns
///
/// A future that resolves to a `Result` containing `Ok(())` if the request is successful,
/// or an error if the request fails.
pub async fn download_success(relay: &str, name: &str) -> Result<()> {
// Convert the relay server URL and file name to strings
let url = String::from(relay);
let hashed_name = Sha256::digest(name.as_bytes());
let hashed_string = hex::encode(hashed_name);
// Create a new HTTP client
let client = Client::new();
// Send a POST request to the relay server with the file name hash as a query parameter
let _ = client
.post(format!("{}/download_success/{}", url, hashed_string))
.send()
.await
// If the request fails, return an error with the reason
.map_err(|e| anyhow!("Failed to send POST request: {}", e))?;
// Return Ok(()) if the request was successful
Ok(())
}

View file

@ -0,0 +1,115 @@
pub mod client;
pub mod http_client;
use crate::{receiver::client as receiver, sender::util::replace_protocol};
use anyhow::{anyhow, Result};
use tokio_tungstenite::{
connect_async,
tungstenite::{client::IntoClientRequest, http::HeaderValue},
};
use tracing::{debug, error};
/// Start the receiver process.
///
/// This function initiates the receiver process by performing the following steps:
/// 1. Replaces the protocol of the given `relay` URL.
/// 2. Downloads the room information from the server.
/// 3. Connects to the local or relay server based on the platform.
/// 4. Downloads the file from the server.
///
/// # Arguments
///
/// * `filepath` - The path to the file to be received.
/// * `relay` - The URL of the relay server.
/// * `name` - The name of the receiver.
///
/// # Returns
///
/// Returns a `Result` indicating the success or failure of the receiver process.
pub async fn start_receiver(filepath: String, relay: &str, name: &str) -> Result<()> {
let http_url = replace_protocol(relay);
let res = http_client::download_info(http_url.as_str(), name)
.await
.unwrap();
debug!("Got room_id from Server: {:?}", res);
let res_ip = String::from("ws://") + res.ip.as_str() + ":9000";
#[cfg(not(target_os = "android"))]
if let Err(local_err) = start_ws_com(
filepath.clone(),
res_ip.as_str(),
res.local_room_id.as_str(),
)
.await
{
debug!("Failed to connect local: {local_err}");
if let Err(relay_err) = start_ws_com(filepath, relay, res.relay_room_id.as_str()).await {
debug!("Failed to connect remote: {relay_err}");
}
}
#[cfg(target_os = "android")]
if let Err(relay_err) = start_ws_com(filepath, relay, res.relay_room_id.as_str()).await {
debug!("Failed to connect remote: {relay_err}");
}
http_client::download_success(http_url.as_str(), name)
.await
.map_err(|e| anyhow!("Failed to download success: {}", e))?;
debug!("Success");
Ok(())
}
/// Asynchronously starts a WebSocket communication with a relay server.
///
/// # Arguments
///
/// * `filepath` - The path of the file to transfer.
/// * `relay` - The URL of the relay server.
/// * `name` - The name of the receiver.
///
/// # Returns
///
/// Returns a `Result` indicating the success or failure of the WebSocket communication.
pub async fn start_ws_com(filepath: String, relay: &str, name: &str) -> Result<()> {
// Construct the WebSocket URL by appending "/ws" to the relay URL.
let url = String::from(relay) + "/ws";
// Create a WebSocket request using the constructed URL.
let mut request = url
.into_client_request()
.map_err(|e| anyhow!("Failed to create request: {}", e))?;
// Set the "Origin" header of the request to the relay URL.
request
.headers_mut()
.insert("Origin", HeaderValue::from_str(relay).unwrap());
// Print a message indicating the attempt to connect.
println!("Attempting to connect...");
// Attempt to establish a WebSocket connection with the relay server.
// If the connection fails or times out, return an error.
let _ = match tokio::time::timeout(std::time::Duration::from_secs(5), connect_async(request))
.await
{
Ok(Ok((socket, _))) => {
// Start the receiver process with the established WebSocket connection.
receiver::start(filepath, socket, name).await;
Ok(())
}
Ok(Err(e)) => {
// Log the failure to connect.
error!("Error: Failed to connect: {e:?}");
Err(Box::new(e))
}
Err(e) => {
// Log the timeout.
error!("Error: Timeout reached for local connection attempt");
Err(Box::new(e))
}?,
};
Ok(())
}

View file

@ -0,0 +1,53 @@
use std::{collections::HashMap, sync::Arc};
use tokio::sync::RwLock;
use crate::relay::room::Room;
use crate::relay::transfer::TransferResponse;
/// State of the application.
///
/// This structure holds the state of the application, which includes the rooms
/// and the transfers.
#[derive(Debug, Clone)]
pub struct AppState {
/// Map of rooms, where the key is the room's ID and the value is the room
/// itself.
pub rooms: HashMap<String, Room>,
/// Vector of transfers.
pub transfers: Vec<TransferResponse>,
}
impl AppState {
/// Creates a new instance of the `AppState` struct.
///
/// This function initializes the state of the application with an empty map
/// of rooms and an empty vector of transfers.
///
/// # Returns
///
/// An `Arc<RwLock<AppState>>` that can be used to share the state across multiple
/// tasks.
pub fn new() -> Arc<RwLock<AppState>> {
// Create a new instance of `AppState` with empty rooms and transfers.
let app_state = AppState {
rooms: HashMap::new(),
transfers: Vec::new(),
};
// Wrap the `app_state` in a `RwLock` to make it thread-safe.
Arc::new(RwLock::new(app_state))
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::sync::Arc;
#[test]
fn test_new() {
let app_state = AppState::new();
assert!(Arc::ptr_eq(&app_state, &app_state.clone()));
}
}

View file

@ -0,0 +1,397 @@
use axum::extract::ws::Message;
use futures_util::{future::join_all, stream::SplitSink, SinkExt};
use std::{sync::Arc, vec};
use tokio::{sync::Mutex, sync::RwLock};
use tracing::{debug, error};
use crate::relay::appstate::AppState;
use crate::relay::room::Room;
use crate::relay::RequestPacket;
use crate::relay::ResponsePacket;
use uuid::Uuid;
/// Type alias for a synchronized WebSocket sender.
///
/// This is used to send messages to a WebSocket connection.
type Sender = Arc<Mutex<SplitSink<axum::extract::ws::WebSocket, Message>>>;
/// Struct representing a WebSocket client.
///
/// This struct contains a WebSocket sender and an optional room ID.
/// The sender is used to send messages to the WebSocket connection,
/// while the room ID is used to identify the client's room.
#[derive(Debug)]
pub struct Client {
/// The WebSocket sender for sending messages.
sender: Sender,
/// The optional room ID of the client.
///
/// This is used to identify the client's room.
room_id: Option<String>,
}
impl Client {
/// Creates a new WebSocket client.
///
/// # Arguments
///
/// * `sender` - A synchronized WebSocket sender.
///
/// # Returns
///
/// A new WebSocket client instance.
pub fn new(sender: Sender) -> Client {
Client {
sender, // The WebSocket sender for sending messages.
room_id: None, // The optional room ID of the client. This is used to identify the client's room.
}
}
/// Sends a message to the WebSocket connection.
///
/// # Arguments
///
/// * `sender` - A synchronized WebSocket sender.
/// * `message` - The message to send.
///
/// # Errors
///
/// If the message fails to be sent.
async fn send(&self, sender: Sender, message: Message) {
let mut sender = sender.lock().await; // Acquires a lock on the sender.
if let Err(error) = sender.send(message).await { // Sends the message.
error!("Failed to send message to the client: {}", error); // Logs the error if the message fails to be sent.
}
}
/// Sends a serialized packet to the WebSocket connection.
///
/// # Arguments
///
/// * `sender` - A synchronized WebSocket sender.
/// * `packet` - The packet to send.
///
/// # Errors
///
/// If the serialized packet fails to be sent.
async fn send_packet(&self, sender: Sender, packet: ResponsePacket) {
// Serialize the packet to a string.
let serialized_packet = serde_json::to_string(&packet).unwrap();
// Send the serialized packet as a text message.
self.send(sender, Message::Text(serialized_packet)).await;
}
/// Sends an error message to the WebSocket connection.
///
/// # Arguments
///
/// * `sender` - A synchronized WebSocket sender.
/// * `message` - The error message to send.
///
/// # Errors
///
/// If the error message fails to be sent.
async fn send_error_packet(&self, sender: Sender, message: String) {
// Create an error packet with the given message.
let error_packet = ResponsePacket::Error { message };
// Send the error packet.
self.send_packet(sender, error_packet).await;
}
/// Handles the "create_room" request from a client.
///
/// # Arguments
///
/// * `server` - A lock guard of the `AppState`.
/// * `id` - An optional string representing the room identifier.
///
/// # Errors
///
/// If the room already exists or if the room creation fails.
async fn handle_create_room(&mut self, server: &RwLock<AppState>, id: Option<String>) {
// Acquire a write lock on the server state.
let mut server = server.write().await;
// Check if the client is already in a room.
if server.rooms.iter().any(|(_, room)| {
room.senders
.iter()
.any(|sender| Arc::ptr_eq(sender, &self.sender))
}) {
return;
}
// Set the room size and generate a room identifier if none is provided.
let size = Room::DEFAULT_ROOM_SIZE;
let room_id = match id {
Some(id) => id,
None => Uuid::new_v4().to_string(),
};
// Check if the room identifier already exists.
if server.rooms.contains_key(&room_id) {
drop(server); // Release the lock before returning.
return self
.send_error_packet(
self.sender.clone(),
"A room with that identifier already exists.".to_string(),
)
.await;
}
// Create a new room and add the client to it.
let mut room = Room::new(size);
room.senders.push(self.sender.clone());
// Insert the room into the server state.
server.rooms.insert(room_id.clone(), room);
self.room_id = Some(room_id.clone()); // Store the room identifier.
drop(server); // Release the lock before returning.
debug!("Room created");
// Send the response packet to the client.
self.send_packet(self.sender.clone(), ResponsePacket::Create { id: room_id })
.await
}
/// Handles the "join_room" request from a client.
///
/// # Arguments
///
/// * `server` - A lock guard of the `AppState`.
/// * `room_id` - A string representing the room identifier.
///
/// # Errors
///
/// If the room does not exist or if the room is full.
async fn handle_join_room(&mut self, server: &RwLock<AppState>, room_id: String) {
let mut server = server.write().await;
// Check if the client is already in a room.
if server.rooms.iter().any(|(_, room)| {
room.senders
.iter()
.any(|sender| Arc::ptr_eq(sender, &self.sender))
}) {
return;
}
let Some(room) = server.rooms.get_mut(&room_id) else {
drop(server);
// Send an error packet to the client.
return self
.send_error_packet(self.sender.clone(), "The room does not exist.".to_string())
.await;
};
// Check if the room is full.
if room.senders.len() >= room.size {
drop(server);
// Send an error packet to the client.
return self
.send_error_packet(self.sender.clone(), "The room is full.".to_string())
.await;
}
// Add the client to the room.
room.senders.push(self.sender.clone());
self.room_id = Some(room_id);
let mut futures = vec![];
for sender in &room.senders {
// Send a join packet to the client with its position in the room.
if Arc::ptr_eq(sender, &self.sender) {
futures.push(self.send_packet(
sender.clone(),
ResponsePacket::Join {
size: Some(room.senders.len() - 1),
},
));
} else {
// Send a join packet to the client without its position in the room.
futures.push(self.send_packet(sender.clone(), ResponsePacket::Join { size: None }));
}
}
drop(server);
join_all(futures).await;
}
/// Handle the leave room request from the client.
///
/// This function removes the client from the current room and notifies the other
/// clients in the room about the client's departure.
///
/// # Arguments
///
/// * `server` - A read-write lock guard for the server state.
///
/// # Returns
///
/// This function does not return anything.
#[allow(clippy::needless_pass_by_value)]
async fn handle_leave_room(&mut self, server: &RwLock<AppState>) {
// Acquire a write lock on the server state.
let mut server = server.write().await;
// Get the room ID of the current room.
let Some(room_id) = self.room_id.clone() else {
return;
};
// Get the mutable reference to the room.
let Some(room) = server.rooms.get_mut(&room_id) else {
return;
};
// Get the index of the client in the room.
let Some(index) = room
.senders
.iter()
.position(|sender| Arc::ptr_eq(sender, &self.sender))
else {
return;
};
// Remove the client from the room.
room.senders.remove(index);
self.room_id = None;
let mut futures = vec![];
for sender in &room.senders {
// Send a leave packet to the other clients in the room.
futures.push(self.send_packet(sender.clone(), ResponsePacket::Leave { index }));
}
// If the room is empty, remove it from the server state.
if room.senders.is_empty() {
server.rooms.remove(&room_id);
}
drop(server);
// Wait for all the futures to complete.
join_all(futures).await;
}
/// Handles incoming messages from the client.
///
/// This function interprets the incoming message and performs the corresponding action.
///
/// # Arguments
///
/// * `server` - A RwLock guard containing the state of the server.
/// * `message` - The incoming message from the client.
pub async fn handle_message(&mut self, server: &RwLock<AppState>, message: Message) {
// Match on the type of the message.
match message {
// If the message is text, parse it as a RequestPacket.
Message::Text(text) => {
let packet = match serde_json::from_str(&text) {
Ok(packet) => packet,
Err(_) => return, // Return if the parsing fails.
};
// Match on the RequestPacket type and perform the corresponding action.
match packet {
RequestPacket::Create { id } => self.handle_create_room(server, id).await,
RequestPacket::Join { id } => self.handle_join_room(server, id).await,
RequestPacket::Leave => self.handle_leave_room(server).await,
}
}
// If the message is binary, handle it accordingly.
Message::Binary(_) => {
// Acquire a read lock on the server state.
let server = server.read().await;
// Get the room ID of the current room.
let Some(room_id) = &self.room_id else {
drop(server);
return; // Return if the client is not in a room.
};
// Get the room corresponding to the room ID.
let Some(room) = server.rooms.get(room_id) else {
drop(server);
return; // Return if the room does not exist.
};
// Get the index of the client in the room.
let Some(index) = room
.senders
.iter()
.position(|sender| Arc::ptr_eq(sender, &self.sender))
else {
drop(server);
return; // Return if the client is not in the room.
};
// Get the binary data from the message.
let mut data = message.into_data();
if data.is_empty() {
drop(server);
return; // Return if the data is empty.
}
// Convert the index to a u8 and assign it as the source.
let source = u8::try_from(index).unwrap();
// Get the destination from the first byte of the data.
let destination = usize::from(data[0]);
data[0] = source; // Assign the source to the first byte of the data.
// If the destination is within the range of the room senders, send the data to that sender.
if destination < room.senders.len() {
let sender = room.senders[destination].clone();
drop(server);
return self.send(sender, Message::Binary(data)).await;
}
// If the destination is u8::MAX, send the data to all the room senders except the current one.
if destination == usize::from(u8::MAX) {
let mut futures = vec![];
for sender in &room.senders {
if Arc::ptr_eq(sender, &self.sender) {
continue; // Skip the current client.
}
futures.push(self.send(sender.clone(), Message::Binary(data.clone())));
}
drop(server);
join_all(futures).await;
}
}
// If the message is Ping, print a message.
Message::Ping(_) => {
println!("Got Message Type Ping");
}
// If the message is Pong, print a message.
Message::Pong(_) => {
println!("Got Message Type Pong");
}
// If the message is Close, print a message and handle the close.
Message::Close(_) => {
println!("Got Message Type Close");
self.handle_close(server).await;
}
}
}
pub async fn handle_close(&mut self, server: &RwLock<AppState>) {
self.handle_leave_room(server).await
}
}
// TODO: Add tests
#[cfg(test)]
mod tests {
// use super::*;
}

View file

@ -0,0 +1,80 @@
pub mod appstate;
pub mod client;
pub mod room;
pub mod server;
pub mod transfer;
use serde::{Deserialize, Serialize};
/// Represents a packet sent by a client to the server.
///
/// The `type` field is used to determine the type of the packet. It can be one of the following
/// values:
/// - `Join`: The client wants to join a room.
/// - `Create`: The client wants to create a new room.
/// - `Leave`: The client wants to leave the current room.
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum RequestPacket {
/// The client wants to join a room.
///
/// The `id` field is the ID of the room that the client wants to join.
Join {
/// The ID of the room that the client wants to join.
id: String,
},
/// The client wants to create a new room.
///
/// The `id` field is an optional field that specifies the ID of the new room. If it is `None`,
/// a random ID will be generated.
Create {
/// The ID of the new room. If it is `None`, a random ID will be generated.
id: Option<String>,
},
/// The client wants to leave the current room.
Leave,
}
/// Represents a packet sent by the server to the client.
///
/// The `type` field is used to determine the type of the packet. It can be one of the following
/// values:
/// - `Join`: The client has joined a room.
/// - `Create`: The client has created a new room.
/// - `Leave`: The client has left the current room.
/// - `Error`: There was an error.
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum ResponsePacket {
/// The client has joined a room.
///
/// The `size` field is an optional field that specifies the size of the room. If it is `None`,
/// the size is unknown.
Join {
/// The size of the room. If it is `None`, the size is unknown.
#[serde(skip_serializing_if = "Option::is_none")]
size: Option<usize>,
},
/// The client has created a new room.
///
/// The `id` field is the ID of the new room.
Create {
/// The ID of the new room.
id: String,
},
/// The client has left the current room.
///
/// The `index` field is the index of the client in the room.
Leave {
/// The index of the client in the room.
index: usize,
},
/// There was an error.
///
/// The `message` field is the error message.
Error {
/// The error message.
message: String,
},
}

View file

@ -0,0 +1,62 @@
use axum::extract::ws::{Message, WebSocket};
use futures_util::stream::SplitSink;
use std::sync::Arc;
use tokio::sync::Mutex;
// `Sender` is a type alias for a synchronized WebSocket sender.
//
// This is used to send messages to a WebSocket connection.
type Sender = Arc<Mutex<SplitSink<WebSocket, Message>>>;
/// Struct representing a room of WebSocket clients.
///
/// A `Room` contains a list of WebSocket senders and a room size.
/// The senders are used to send messages to the WebSocket connections,
/// while the room size represents the maximum number of clients allowed in the room.
#[derive(Debug, Clone)]
pub struct Room {
/// The list of WebSocket senders.
///
/// Each sender is used to send messages to a WebSocket connection.
pub senders: Vec<Sender>,
/// The size of the room.
///
/// This represents the maximum number of clients allowed in the room.
pub size: usize,
}
impl Room {
/// The default room size.
///
/// This is used as a fallback value when creating a new room.
pub const DEFAULT_ROOM_SIZE: usize = 2;
/// Create a new room with the specified size.
///
/// # Arguments
///
/// * `size` - The size of the room.
///
/// # Returns
///
/// A new `Room` instance.
pub fn new(size: usize) -> Room {
Room {
senders: Vec::new(),
size,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[tokio::test]
async fn test_room_new() {
let room = Room::new(5);
assert_eq!(room.size, 5);
assert!(room.senders.is_empty());
}
}

View file

@ -0,0 +1,320 @@
use axum::{
extract::{ws::WebSocket, Json, Path, State, WebSocketUpgrade},
http::StatusCode,
response::IntoResponse,
routing::{get, post, put},
Router,
};
use futures_util::StreamExt;
use serde_json::json;
use std::{net::SocketAddr, sync::Arc};
use tokio::{
net::TcpListener,
signal,
sync::{Mutex, RwLock},
};
use tower_http::trace::{DefaultMakeSpan, TraceLayer};
use tracing::{debug, error, info, warn};
use crate::relay::client::Client;
use crate::relay::transfer::TransferResponse;
use crate::relay::{appstate::AppState, transfer::TransferRequest};
/// Start the WebSocket server.
///
/// This function initializes the server and starts listening for incoming connections.
/// It configures the routes for the WebSocket handler and the upload and download routes.
/// Additionally, it sets up the tracing layer to log incoming requests.
///
/// # Arguments
///
/// * `port` - The port number to listen on.
/// * `listen_addr` - The IP address to listen on.
#[allow(clippy::unused_self)]
pub async fn start_ws(port: &i32, listen_addr: &String) {
// Log the server configuration.
debug!("Server configured to accept connections on host {listen_addr}...");
debug!("Server configured to listen connections on port {port}...");
// Create a new instance of the server state.
let server = AppState::new();
// Set up the routes for the server.
let app = Router::new()
.route("/ws", get(ws_handler))
.route("/upload", put(upload_info))
.route("/download/:name", get(download_info))
.route("/download_success/:name", post(download_success))
.with_state(server)
// Set up the tracing layer to log incoming requests.
.layer(
TraceLayer::new_for_http()
.make_span_with(DefaultMakeSpan::default().include_headers(true)),
);
// Start listening for incoming connections.
let addr = format!("{}:{}", listen_addr, port);
if let Ok(listener) = TcpListener::bind(&addr).await {
let local_addr = listener.local_addr().unwrap();
info!("Listening on: {}", local_addr);
// Serve the app with the listener and handle shutdown gracefully.
axum::serve(
listener,
app.into_make_service_with_connect_info::<SocketAddr>(),
)
.with_graceful_shutdown(shutdown_signal())
.await
.unwrap();
} else {
// Log if the server failed to start.
error!("Failed to listen on: {listen_addr}:{port}");
}
}
/// Handler for the WebSocket route.
///
/// This function upgrades the connection to a WebSocket and handles the socket.
///
/// # Arguments
///
/// * `ws` - The WebSocketUpgrade struct containing the upgrade request.
/// * `shared_state` - The shared state of the server.
pub async fn ws_handler(
ws: WebSocketUpgrade,
State(shared_state): State<Arc<RwLock<AppState>>>,
) -> impl IntoResponse {
// Log the request on the WebSocket route.
debug!("Got Request on Websocket route");
// Log the connection upgrade.
debug!("Upgrading Connection");
// Upgrade the connection to a WebSocket and handle the socket.
// Move the shared state to the handler to avoid holding the lock during the entire connection.
ws.on_upgrade(move |socket| handle_socket(socket, shared_state))
}
/// Handles the WebSocket connection.
///
/// This function splits the WebSocket into a sender and receiver,
/// creates a client, and handles the messages received from the client.
/// It also handles the close event from the client.
///
/// # Arguments
///
/// * `socket` - The WebSocket connection.
/// * `rooms` - The shared state of the server.
async fn handle_socket(socket: WebSocket, rooms: Arc<RwLock<AppState>>) {
// Split the WebSocket into a sender and receiver.
let (sender, mut receiver) = socket.split();
// Create a new Mutex to prevent concurrent access to the sender.
let sender = Arc::new(Mutex::new(sender));
// Create a new client with the sender.
let mut client = Client::new(sender.clone());
// Handle the messages received from the client.
while let Some(message) = receiver.next().await {
match message {
Ok(message) => {
// Handle the message received from the client.
client.handle_message(&rooms, message).await;
}
Err(error) => {
// Log the error if failed to read message from the client.
warn!("Failed to read message from client: {}", error);
break;
}
}
}
// Handle the close event from the client.
client.handle_close(&rooms).await
}
async fn shutdown_signal() {
let ctrl_c = async {
signal::ctrl_c()
.await
.expect("failed to install Ctrl+C handler");
};
#[cfg(unix)]
let terminate = async {
signal::unix::signal(signal::unix::SignalKind::terminate())
.expect("failed to install signal handler")
.recv()
.await;
};
#[cfg(not(unix))]
let terminate = std::future::pending::<()>();
tokio::select! {
_ = ctrl_c => {},
_ = terminate => {},
}
}
/// Handles the upload_info route.
///
/// It updates or creates a new transfer request in the shared state.
/// If the request is found in the shared state, it updates the relay_room_id or local_room_id
/// based on the payload. If the request is not found, it creates a new transfer request and
/// adds it to the shared state.
///
/// # Arguments
///
/// * `shared_state` - The shared state containing the transfer requests.
/// * `payload` - The JSON payload containing the transfer request information.
///
/// # Returns
///
/// A tuple of the HTTP status code and the JSON response.
pub async fn upload_info(
State(shared_state): State<Arc<RwLock<AppState>>>,
Json(payload): Json<TransferRequest>,
) -> impl IntoResponse {
let mut data = shared_state.write().await;
// Find the transfer request in the shared state
match data
.transfers
.iter_mut()
.find(|request| request.name == payload.name)
{
// Update the relay_room_id or local_room_id if the request is found
Some(request) => {
debug!("Found Transfer");
debug!("Request is: {:?}", request);
if request.relay_room_id.is_empty() {
request.relay_room_id = payload.relay_room_id;
debug!("Found Transfer and updated");
debug!("request is: {:#?}", request);
(StatusCode::OK, Json(request.clone()))
} else {
request.local_room_id = payload.local_room_id;
debug!("Found Transfer and updated");
debug!("request is: {:#?}", request);
(StatusCode::OK, Json(request.clone()))
}
}
// Create a new transfer request if the request is not found
None => {
// Initialize relay and local room IDs based on the payload
let mut local = String::from("");
let mut relay = String::from("");
if payload.relay_room_id.is_empty() {
local = payload.local_room_id;
} else {
relay = payload.relay_room_id;
}
// Create a new transfer request
let t_request = TransferResponse {
name: payload.name,
ip: payload.ip,
local_room_id: local,
relay_room_id: relay,
};
// Add the transfer request to the shared state
data.transfers.push(t_request.clone());
debug!("New TransferRequest created");
debug!("Actual AppState is {:#?}", *data);
// Return the created transfer request as the response
(StatusCode::CREATED, Json(t_request))
}
}
}
/// Retrieve information about a transfer request based on the transfer name.
///
/// # Arguments
///
/// * `shared_state` - The shared state containing the transfer requests.
/// * `name` - The name of the transfer request.
///
/// # Returns
///
/// Returns a response containing the transfer request if found, or a not found
/// response if the transfer request is not found.
pub async fn download_info(
State(shared_state): State<Arc<RwLock<AppState>>>,
Path(name): Path<String>,
) -> impl IntoResponse {
// Acquire write lock on shared state
let data = shared_state.write().await;
// Find transfer request by name
match data.transfers.iter().find(|request| request.name == name) {
// If transfer request is found, return Ok response with the transfer request
Some(request) => {
debug!("Found transfer name.");
(StatusCode::OK, Json(request.clone()))
}
// If transfer request is not found, return not found response
None => {
warn!("couldn't find transfer-name: {}", name);
(
StatusCode::NOT_FOUND,
Json(TransferResponse {
// Create a new empty transfer response
name: String::from(""),
ip: String::from(""),
local_room_id: String::from(""),
relay_room_id: String::from(""),
}),
)
}
}
}
/// Delete a transfer request by its name.
///
/// # Arguments
///
/// * `shared_state` - The shared state containing the transfer requests.
/// * `name` - The name of the transfer request.
///
/// # Returns
///
/// Returns a response containing a JSON object with a message indicating the
/// success of the deletion. If the transfer request is not found, a not found
/// response is returned.
pub async fn download_success(
State(shared_state): State<Arc<RwLock<AppState>>>,
Path(name): Path<String>,
) -> impl IntoResponse {
let mut data = shared_state.write().await;
// Find the index of the transfer request
if let Some(index) = data
.transfers
.iter()
.position(|request| request.name == name)
{
// If the transfer request is found, remove it from the shared state
debug!("Found Transfer by name '{name}'");
data.transfers.remove(index);
debug!("Transfer deleted");
// Return a success response
(
StatusCode::OK,
Json(json!({
"message": "transfer deleted"
})),
)
} else {
// If the transfer request is not found, return a not found response
warn!("couldn't find transfer-name: {}", name);
(
StatusCode::NOT_FOUND,
Json(json!({
"message": "transfer not found"
})),
)
}
}

View file

@ -1,13 +1,31 @@
use serde::{Deserialize, Serialize};
/// Request to transfer a connection from one relay to another
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct TransferRequest {
/// The name of the client
pub name: String,
/// The IP address of the client
pub ip: String,
/// The local room ID of the client
pub local_room_id: String,
/// The relay room ID of the client
pub relay_room_id: String,
}
impl TransferRequest {
/// Creates a new transfer request
///
/// # Args
///
/// * `name` - The name of the client
/// * `ip` - The IP address of the client
/// * `local_room_id` - The local room ID of the client
/// * `relay_room_id` - The relay room ID of the client
///
/// # Returns
///
/// A new `TransferRequest` instance
pub fn new(name: String, ip: String, local_room_id: String, relay_room_id: String) -> Self {
Self {
name,
@ -18,15 +36,32 @@ impl TransferRequest {
}
}
/// Response containing the details of the transferred connection
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct TransferResponse {
/// The name of the client
pub name: String,
/// The IP address of the client
pub ip: String,
/// The local room ID of the client
pub local_room_id: String,
/// The relay room ID of the client
pub relay_room_id: String,
}
impl TransferResponse {
/// Creates a new transfer response
///
/// # Args
///
/// * `name` - The name of the client
/// * `ip` - The IP address of the client
/// * `local_room_id` - The local room ID of the client
/// * `relay_room_id` - The relay room ID of the client
///
/// # Returns
///
/// A new `TransferResponse` instance
pub fn new(name: String, ip: String, local_room_id: String, relay_room_id: String) -> Self {
Self {
name,

View file

@ -0,0 +1,879 @@
use crate::sender::http_client::send_info;
use crate::sender::util::{hash_random_name, replace_protocol};
use crate::shared::{
packets::{
list_packet, packet::Value, ChunkPacket, HandshakePacket, HandshakeResponsePacket,
ListPacket, Packet, ProgressPacket,
},
JsonPacket, JsonPacketResponse, JsonPacketSender, PacketSender, Sender, Socket, Status,
};
use aes_gcm::{aead::Aead, Aes128Gcm, Key};
use base64::{engine::general_purpose, Engine as _};
use futures_util::{future, pin_mut, stream::TryStreamExt, StreamExt};
use hmac::{Hmac, Mac};
use p256::{ecdh::EphemeralSecret, PublicKey};
use prost::Message;
use rand::{rngs::OsRng, RngCore};
use sha2::Sha256;
use std::{
fs,
io::{stdout, Write},
path::Path,
time::Duration,
};
use tokio::{io::AsyncReadExt, task::JoinHandle, time::sleep};
use tokio_tungstenite::tungstenite::{protocol::Message as WebSocketMessage, Error};
use tracing::{debug, error};
const DESTINATION: u8 = 1;
const NONCE_SIZE: usize = 12;
const MAX_CHUNK_SIZE: isize = u16::MAX as isize;
const DELAY: Duration = Duration::from_millis(750);
/// Struct representing a file to be sent.
///
/// This struct holds the path, name and size of a file.
#[derive(Clone)]
struct File {
/// The path of the file to be sent.
path: String,
/// The name of the file to be sent.
name: String,
/// The size of the file to be sent.
size: u64,
}
/// The context of a sender.
///
/// This struct holds the necessary information for a sender to send files.
/// It includes the HMAC, the sender, the ephemeral secret, the list of files to
/// be sent, the shared key, and the task handling the sending of the files.
struct Context {
/// The HMAC used for authentication.
hmac: Vec<u8>,
/// The sender used to send packets.
sender: Sender,
/// The ephemeral secret used for key exchange.
key: EphemeralSecret,
/// The list of files to be sent.
files: Vec<File>,
/// The shared key used for encryption.
shared_key: Option<Aes128Gcm>,
/// The task handling the sending of the files.
task: Option<JoinHandle<()>>,
}
/// Handles the create room packet.
///
/// This function is called when a create room packet is received.
/// It creates a room on the specified relay and sends the necessary
/// information to the server.
///
/// # Arguments
///
/// * `context` - The context of the sender.
/// * `id` - The ID of the room.
/// * `relay` - The URL of the relay.
/// * `transfer_name` - The name of the transfer.
/// * `is_local` - A boolean indicating whether the room is local.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
fn on_create_room(
context: &Context,
id: String,
relay: String,
transfer_name: String,
is_local: bool,
) -> Status {
// Debug log the relay URL
debug!("Creating room on: {relay}");
// Encode the HMAC key using base64
let base64 = general_purpose::STANDARD.encode(&context.hmac);
// Generate the URL for the room
let url = format!("{}-{}", id, base64);
// Hash the transfer name
let hash_name = hash_random_name(transfer_name.clone());
// Create copies of the necessary variables for the thread
let send_url = url.to_string();
let h_name = hash_name.to_string();
let server_url = replace_protocol(relay.as_str());
// Spawn a new thread to send the information to the server
let res = std::thread::spawn(move || {
// Create a new runtime and block on the current thread
tokio::runtime::Builder::new_current_thread()
.enable_all()
.build()
.unwrap()
.block_on(send_info(&server_url, &h_name, send_url.as_str(), is_local))
})
.join()
.unwrap();
// Debug log the result
debug!("Got Result: {:?}", res);
// Handle the result of sending the information to the server
match res {
Ok(transfer_response) => {
// Print the room URL and transfer name
if !transfer_response.local_room_id.is_empty()
&& !transfer_response.relay_room_id.is_empty()
{
println!();
// Print the QR code for the transfer name
if let Err(error) = qr2term::print_qr(&transfer_name) {
error!("Failed to generate QR code: {}", error);
}
println!();
println!("Created room: {}", url);
println!("Transfername is: {}", transfer_name);
}
}
Err(e) => {
// Log the error
error!("Error sending info: {e}");
}
}
// Continue with the operation
Status::Continue()
}
/// Handle the join room packet.
///
/// This function is responsible for handling the join room packet received from the receiver.
/// It checks if the size of the room is provided and returns an error if it is not. It then
/// generates the public key and signs it with the HMAC key. It sends the handshake packet to
/// the receiver.
///
/// # Arguments
///
/// * `context` - The sender context.
/// * `size` - The size of the room.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if the join room packet is invalid.
fn on_join_room(context: &Context, size: Option<usize>) -> Status {
// Check if the size of the room is provided
if size.is_some() {
return Status::Err("Invalid join room packet.".into());
}
// Generate the public key
let public_key = context.key.public_key().to_sec1_bytes().into_vec();
// Generate the signature by signing the public key with the HMAC key
let mut mac = Hmac::<Sha256>::new_from_slice(&context.hmac).unwrap();
mac.update(&public_key);
let signature = mac.finalize().into_bytes().to_vec();
// Create the handshake packet with the public key and signature
let handshake = HandshakePacket {
public_key,
signature,
};
// Send the handshake packet to the receiver
context
.sender
.send_packet(DESTINATION, Value::Handshake(handshake));
Status::Continue()
}
/// Handles errors by returning a `Status` with the error message.
///
/// # Arguments
///
/// * `message` - The error message.
///
/// # Returns
///
/// A `Status` indicating the error with the error message.
#[allow(clippy::missing_panics_doc)]
#[inline]
fn on_error(message: String) -> Status {
// Return a `Status` with the error message
Status::Err(message)
}
/// Handle the leave room packet.
///
/// This function handles the leave room packet by aborting any ongoing task,
/// generating a new random key, clearing the shared key, clearing the task,
/// and printing an error message indicating that the transfer was interrupted
/// because the receiver disconnected.
///
/// # Arguments
///
/// * `context` - The sender context.
/// * `_` - The index of the sender. Currently unused.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if there are still files being transferred.
#[allow(clippy::missing_panics_doc)]
#[inline]
fn on_leave_room(context: &mut Context, _: usize) -> Status {
// Abort any ongoing task
if let Some(task) = &context.task {
task.abort();
}
// Generate a new random key
context.key = EphemeralSecret::random(&mut OsRng);
// Clear the shared key
context.shared_key = None;
// Clear the task
context.task = None;
// Print an error message
println!();
error!("Transfer was interrupted because the receiver disconnected.");
// Return a `Status` to indicate that the operation was successful
Status::Continue()
}
/// Handle the progress packet.
///
/// # Arguments
///
/// * `context` - The sender context.
/// * `progress` - The progress packet.
///
/// # Returns
///
/// A `Status` representing the result of the operation.
///
/// # Errors
///
/// Returns an error if the progress packet is invalid.
#[allow(clippy::missing_panics_doc)]
#[inline]
fn on_progress(context: &Context, progress: ProgressPacket) -> Status {
// Check if the shared key is established
if context.shared_key.is_none() {
// Return an error if the progress packet is invalid
return Status::Err("Invalid progress packet: no shared key established".into());
}
// Get the file corresponding to the progress packet index
let file = match context.files.get(progress.index as usize) {
Some(file) => file,
None => return Status::Err("Invalid index in progress packet.".into()),
};
// Print the progress of the file transfer
print!("\rTransferring '{}': {}%", file.name, progress.progress);
// Flush the stdout
stdout().flush().unwrap();
// Check if the progress is 100%
if progress.progress == 100 {
// Print a newline
println!();
// Check if this is the last file being transferred
if progress.index as usize == context.files.len() - 1 {
// Return an exit status to indicate that the operation was successful
return Status::Exit();
}
}
// Return a continue status to indicate that the operation was successful
Status::Continue()
}
/// Asynchronously transfers the chunks of files to the receiver.
///
/// # Arguments
///
/// * `sender` - The sender object used to send packets.
/// * `shared_key` - The shared key used for encryption.
/// * `files` - The list of files to be transferred.
#[allow(clippy::missing_panics_doc)]
#[inline]
async fn on_chunk(
sender: Sender,
shared_key: Option<Aes128Gcm>,
files: Vec<File>,
) {
// For each file in the list of files
for file in files {
let mut sequence = 0;
let mut chunk_size = MAX_CHUNK_SIZE;
let mut size = file.size as isize;
// Open the file
let mut handle = match tokio::fs::File::open(file.path).await {
Ok(handle) => handle,
Err(error) => {
// Print an error message if the file cannot be opened
println!("Error: Unable to open file '{}': {}", file.name, error);
return;
}
};
// While there are still chunks to be transferred
while size > 0 {
// If the remaining size is less than the maximum chunk size
if size < chunk_size {
// Set the chunk size to the remaining size
chunk_size = size;
}
// Create a vector to hold the chunk
let mut chunk = vec![0u8; chunk_size.try_into().unwrap()];
// Read the chunk from the file
handle.read_exact(&mut chunk).await.unwrap();
// Send the encrypted chunk packet to the receiver
sender.send_encrypted_packet(
&shared_key,
DESTINATION,
Value::Chunk(ChunkPacket { sequence, chunk }),
);
// Increment the sequence and decrement the size
sequence += 1;
size -= chunk_size;
}
// Wait for a delay before starting the next file transfer
sleep(DELAY).await;
}
}
/// Finalizes the handshake by sending the list of files to the receiver and
/// starting the file transfer task.
///
/// # Arguments
///
/// * `context` - The mutable context holding the sender, files, and shared key.
///
/// # Returns
///
/// A `Status` indicating the success or failure of the handshake finalization.
fn on_handshake_finalize(context: &mut Context) -> Status {
// Create a vector of `Entry`s from the files in the context
let mut entries = vec![];
for (index, file) in context.files.iter().enumerate() {
let entry = list_packet::Entry {
// The index of the file in the context
index: index.try_into().unwrap(),
// The name of the file
name: file.name.clone(),
// The size of the file
size: file.size,
};
entries.push(entry);
}
// Send the encrypted list packet to the receiver
context.sender.send_encrypted_packet(
&context.shared_key,
DESTINATION,
Value::List(ListPacket { entries }),
);
// Spawn the file transfer task and store it in the context
context.task = Some(tokio::spawn(on_chunk(
context.sender.clone(),
context.shared_key.clone(),
context.files.clone(),
)));
Status::Continue()
}
/// Handles the handshake response packet received from the receiver.
///
/// # Arguments
///
/// * `context` - The mutable context holding the sender, files, and shared key.
/// * `handshake_response` - The handshake response packet received from the receiver.
///
/// # Returns
///
/// A `Status` indicating the success or failure of the handshake.
fn on_handshake(context: &mut Context, handshake_response: HandshakeResponsePacket) -> Status {
// Check if the handshake has already been performed
if context.shared_key.is_some() {
return Status::Err("Already performed handshake.".into());
}
// Create a HMAC instance with the HMAC key
let mut mac = Hmac::<Sha256>::new_from_slice(&context.hmac).unwrap();
// Update the HMAC with the public key from the handshake response
mac.update(&handshake_response.public_key);
// Verify the signature in the handshake response
let verification = mac.verify_slice(&handshake_response.signature);
if verification.is_err() {
// Return an error if the signature is invalid
return Status::Err("Invalid signature from the receiver.".into());
}
// Convert the public key from bytes to a public key instance
let shared_public_key = PublicKey::from_sec1_bytes(&handshake_response.public_key).unwrap();
// Derive the shared secret using Diffie-Hellman key exchange
let shared_secret = context.key.diffie_hellman(&shared_public_key);
// Extract the raw secret bytes from the shared secret
let shared_secret = shared_secret.raw_secret_bytes();
// Take the first 16 bytes of the secret as the shared key
let shared_secret = &shared_secret[0..16];
// Convert the shared secret bytes to a `Key<Aes128Gcm>` instance
let shared_key: &Key<Aes128Gcm> = shared_secret.into();
// Create a new instance of `Aes128Gcm` with the shared key
let shared_key = <Aes128Gcm as aes_gcm::KeyInit>::new(shared_key);
// Set the shared key in the context
context.shared_key = Some(shared_key);
// Finalize the handshake by sending the list of files and starting the file transfer task
on_handshake_finalize(context)
}
/// Handles the incoming message from the WebSocket.
///
/// # Arguments
///
/// * `context` - The mutable context holding the sender and shared key.
/// * `message` - The incoming WebSocket message.
/// * `relay` - The URL of the relay.
/// * `transfer_name` - The name of the transfer.
/// * `is_local` - Whether the transfer is local or not.
///
/// # Returns
///
/// A `Status` indicating the success or failure of handling the message.
fn on_message(
context: &mut Context,
message: WebSocketMessage,
relay: String,
transfer_name: String,
is_local: bool,
) -> Status {
match message.clone() {
// Handle the text WebSocket message
WebSocketMessage::Text(text) => {
// Parse the JSON packet from the text message
let packet = match serde_json::from_str(&text) {
Ok(packet) => packet,
Err(_) => {
return Status::Continue();
}
};
// Call the corresponding handler based on the packet type
return match packet {
// Handle the `Create` packet
JsonPacketResponse::Create { id } => {
on_create_room(context, id, relay, transfer_name, is_local)
}
// Handle the `Join` packet
JsonPacketResponse::Join { size } => on_join_room(context, size),
// Handle the `Leave` packet
JsonPacketResponse::Leave { index } => on_leave_room(context, index),
// Handle the `Error` packet
JsonPacketResponse::Error { message } => on_error(message),
};
}
// Handle the binary WebSocket message
WebSocketMessage::Binary(data) => {
// Extract the encrypted data from the binary message
let data = data[1..].to_vec();
// Decrypt the data using the shared key if available
let data = if let Some(shared_key) = &context.shared_key {
let nonce = &data[..NONCE_SIZE];
let ciphertext = &data[NONCE_SIZE..];
shared_key.decrypt(nonce.into(), ciphertext).unwrap()
} else {
data
};
// Decode the packet from the decrypted data
let packet = Packet::decode(data.as_ref()).unwrap();
let value = packet.value.unwrap();
// Call the corresponding handler based on the packet value
return match value {
// Handle the `HandshakeResponse` packet
Value::HandshakeResponse(handshake_response) => {
on_handshake(context, handshake_response)
}
// Handle the `Progress` packet
Value::Progress(progress) => on_progress(context, progress),
// Handle unexpected packets
_ => Status::Err(format!("Unexpected packet: {:?}", value)),
};
}
// Handle other message types
_ => (),
}
// Return an error for unsupported message types
Status::Err("Invalid message type".into())
}
/// Starts the sender process.
///
/// # Arguments
///
/// * `socket` - The WebSocket connection.
/// * `paths` - The paths to the files to be sent.
/// * `room_id` - The ID of the room to join.
/// * `relay` - The URL of the relay server.
/// * `transfer_name` - The name of the transfer.
/// * `is_local` - Whether the transfer is local or not.
#[allow(clippy::needless_doctest_main)]
pub async fn start(
socket: Socket,
paths: Vec<String>,
room_id: Option<String>,
relay: String,
transfer_name: String,
is_local: bool,
) {
// Prepare the files to be sent
let mut files = vec![];
for path in paths {
// Open the file
let handle = match fs::File::open(&path) {
Ok(handle) => handle,
Err(error) => {
error!("Error: Failed to open file '{}': {}", path, error);
return;
}
};
let metadata = handle.metadata().unwrap();
// Check if the path points to a file
if metadata.is_dir() {
error!("Error: The path '{}' does not point to a file.", path);
return;
}
let name = Path::new(&path).file_name().unwrap().to_str().unwrap();
let size = metadata.len();
// Check if the file is empty
if size == 0 {
error!("Error: The file '{}' is empty and cannot be sent.", name);
return;
}
files.push(File {
name: name.to_string(),
path,
size,
});
}
// Generate the HMAC key
let mut hmac = [0u8; 32];
OsRng.fill_bytes(&mut hmac);
// Generate the encryption key
let key = EphemeralSecret::random(&mut OsRng);
// Create the flume channels
let (sender, receiver) = flume::bounded(1000);
// Split the WebSocket connection
let (outgoing, incoming) = socket.split();
// Create the context
let mut context = Context {
sender,
key,
files,
hmac: hmac.to_vec(),
shared_key: None,
task: None,
};
debug!("Attempting to create room...");
debug!("With Room-ID: {:?}", room_id);
// Send the create room packet
context.sender.send_json_packet(JsonPacket::Create {
id: room_id.clone(),
});
// Handle the incoming WebSocket messages
let outgoing_handler = receiver.stream().map(Ok).forward(outgoing);
let incoming_handler = incoming.try_for_each(|message| {
match on_message(
&mut context,
message,
relay.clone(),
transfer_name.clone(),
is_local,
) {
Status::Exit() => {
// Send the leave room packet
context.sender.send_json_packet(JsonPacket::Leave);
println!("Transfer has completed.");
// Return an error
return future::err(Error::ConnectionClosed);
}
Status::Err(error) => {
error!("Error: {}", error);
// Return an error
return future::err(Error::ConnectionClosed);
}
_ => {}
};
future::ok(())
});
pin_mut!(incoming_handler, outgoing_handler);
// Wait for the incoming or outgoing handlers to complete
future::select(incoming_handler, outgoing_handler).await;
}
#[cfg(test)]
mod tests {
use super::*;
use aes_gcm::KeyInit;
// #[test]
// fn test_on_chunk() {
// let (sender, _) = flume::bounded(1000);
// let context = Context {
// hmac: vec![],
// sender,
// key: EphemeralSecret::random(&mut OsRng),
// shared_key: None,
// files: vec![
// File {
// name: "file1.txt".to_string(),
// size: 100,
// path: "file1.txt".to_string(),
// },
// File {
// name: "file2.txt".to_string(),
// size: 100,
// path: "file2.txt".to_string(),
// },
// ],
// task: None,
// };
// }
#[test]
fn test_on_progress() {
let (sender, _) = flume::bounded(1000);
let context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: Some(Aes128Gcm::new(Key::<Aes128Gcm>::from_slice(&[0u8; 16]))),
files: vec![
File {
name: "file1.txt".to_string(),
size: 100,
path: "file1.txt".to_string(),
},
File {
name: "file2.txt".to_string(),
size: 100,
path: "file2.txt".to_string(),
},
],
task: None,
};
assert_eq!(
on_progress(
&context,
ProgressPacket {
index: 0,
progress: 50
}
),
Status::Continue()
);
}
#[test]
fn test_on_create_room() {
let (sender, _) = flume::bounded(1000);
let context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![
File {
name: "file1.txt".to_string(),
size: 100,
path: "file1.txt".to_string(),
},
File {
name: "file2.txt".to_string(),
size: 100,
path: "file2.txt".to_string(),
},
],
task: None,
};
assert_eq!(
on_create_room(
&context,
"b531e87d-e51a-4507-94f4-335cbe2d32f3-Nc5skZReq7qJN7INwckyAZLWEEbxsrFfH/692tUNgkM="
.to_string(),
String::from("0.0.0.0:8000"),
String::from("Test"),
true,
),
Status::Continue()
);
}
// #[test]
// fn test_on_join_room(){
// let (sender, _) = flume::bounded(1000);
// let mut context = Context {
// hmac: vec![],
// sender: sender,
// key: EphemeralSecret::random(&mut OsRng),
// shared_key: None,
// files: vec![
// File {
// name: "file1.txt".to_string(),
// size: 100,
// path: "file1.txt".to_string(),
// },
// File {
// name: "file2.txt".to_string(),
// size: 100,
// path: "file2.txt".to_string(),
// },
// ],
// task: None,
// };
// assert_eq!(on_join_room(&context, None), Status::Continue());
// }
#[test]
fn test_on_error() {
assert_eq!(
on_error("Error message".to_string()),
Status::Err("Error message".to_string())
);
}
#[test]
fn test_on_leave_room() {
let (sender, _) = flume::bounded(1000);
let mut context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![
File {
name: "file1.txt".to_string(),
size: 100,
path: "file1.txt".to_string(),
},
File {
name: "file2.txt".to_string(),
size: 100,
path: "file2.txt".to_string(),
},
],
task: None,
};
assert_eq!(on_leave_room(&mut context, 5), Status::Continue());
}
#[test]
fn test_on_message() {
let (sender, _) = flume::bounded(1000);
let mut context = Context {
hmac: vec![],
sender,
key: EphemeralSecret::random(&mut OsRng),
shared_key: None,
files: vec![
File {
name: "file1.txt".to_string(),
size: 100,
path: "file1.txt".to_string(),
},
File {
name: "file2.txt".to_string(),
size: 100,
path: "file2.txt".to_string(),
},
],
task: None,
};
assert_eq!(
on_message(
&mut context,
WebSocketMessage::Text(r#"{"type":"leave","index":5}"#.to_string()),
String::from("0.0.0.0:8000"),
String::from("Test"),
true,
),
Status::Continue()
);
assert_eq!(on_message(&mut context, WebSocketMessage::Text(r#"{"type":"create","id":"b531e87d-e51a-4507-94f4-335cbe2d32f3-Nc5skZReq7qJN7INwckyAZLWEEbxsrFfH/692tUNgkM="}"#.to_string()), String::from("0.0.0.0:8000"), String::from("Test"), true), Status::Continue());
assert_eq!(
on_message(
&mut context,
WebSocketMessage::Text(
r#"{"type":"error","message":"Error Message: Test"}"#.to_string()
),
String::from("0.0.0.0:8000"),
String::from("Test"),
true
),
Status::Err("Error Message: Test".to_string())
);
}
}

View file

@ -8,18 +8,34 @@ use crate::relay::transfer::{TransferRequest, TransferResponse};
type Result<T> = std::result::Result<T, Box<dyn std::error::Error + Send + Sync>>;
/// Asynchronously sends information about the sender to the specified relay.
///
/// # Arguments
///
/// * `relay` - The URL of the relay.
/// * `name` - The name of the sender.
/// * `room_id` - The ID of the room.
/// * `is_local` - Indicates whether the sender is local.
///
/// # Returns
///
/// A `Result` containing a `TransferResponse` if the request was successful, or an error if it failed.
pub async fn send_info(
relay: &str,
name: &str,
room_id: &str,
is_local: bool,
) -> Result<TransferResponse> {
// Build the URL for the request
let url = relay.to_string();
// Get the sender's IP address
let sender_ip = match local_ipv6() {
Ok(ip) => ip,
Err(_) => match local_ip() {
Ok(ip) => ip,
Err(e) => {
// Log the error and return the error
error!("Error getting local ip: {e:?}");
return Err(Box::new(e));
}
@ -27,14 +43,19 @@ pub async fn send_info(
};
let ip_str = sender_ip.to_owned().to_string();
// Create the transfer request
let transfer_request = TransferRequest {
// Set the name of the sender
name: String::from(name),
// Set the IP address of the sender
ip: ip_str,
// Set the room ID for the local sender
local_room_id: if is_local {
String::from(room_id)
} else {
String::from("")
},
// Set the room ID for the relay sender
relay_room_id: if !is_local {
String::from(room_id)
} else {
@ -42,7 +63,10 @@ pub async fn send_info(
},
};
// Log the start of the request
debug!("Trying to send Request.");
// Send the request and parse the response
let result: Result<TransferResponse> = task::spawn_blocking(move || {
let client = Client::new();
let response = client
@ -54,5 +78,6 @@ pub async fn send_info(
})
.await?;
// Return the result
result
}

View file

@ -1,43 +1,3 @@
/// Connects to the WebSocket server at `ws://0.0.0.0:8000/ws` with an
/// `Origin` header of `ws://0.0.0.0:8000/ws`. This is the URL that the
/// sender and receiver clients will connect to.
///
/// The `start_sender` function takes a reference to a vector of strings,
/// which are the paths to the files that the sender will send over the
/// WebSocket connection.
///
/// The function first creates a WebSocket request using the `IntoClientRequest`
/// trait from `tungstenite`, which is defined on the `IntoClientRequest` struct.
/// This struct is a type that represents a request to a WebSocket server.
///
/// The `into_client_request` function returns a `Result` because it may fail
/// to create the request. In this case, we do not handle the error, so we just
/// return if the result is an error.
///
/// Once we have a request, we insert the `Origin` header into the headers of
/// the request. This is necessary because the WebSocket protocol requires the
/// `Origin` header to be present in the handshake.
///
/// After that, we print out a message to the console indicating that we are
/// attempting to connect to the server.
///
/// Next, we call the `connect_async` function from `tokio_tungstenite` which
/// takes our request and attempts to connect to the server. This function
/// returns a `Future` that resolves to a tuple of a `WebSocketStream` and a
/// `Response` from the server. The `WebSocketStream` is a stream of
/// WebSocket messages from the server, and the `Response` is the response
/// from the server to our handshake request.
///
/// If connecting to the server fails, we print out an error message and
/// return.
///
/// If connecting to the server succeeds, we pass the `WebSocketStream` and
/// the paths to the files to the `start` function from the `sender` module.
/// The `start` function is defined in the `sender` module, and it is the
/// function that sends the files over the WebSocket connection.
///
/// The `start` function takes ownership of the `WebSocketStream` and the file
/// paths, so we pass it the `paths` vector by value.
pub mod client;
pub mod http_client;
pub mod util;
@ -46,7 +6,7 @@ use std::{net::SocketAddr, sync::Arc};
use crate::{
relay::{appstate::AppState, server::ws_handler},
sender::{client as sender, util::generate_random_name},
sender::client as sender,
};
use axum::{routing::get, Router};
use tokio::{net::TcpListener, sync::mpsc, task};
@ -58,31 +18,46 @@ use tower_http::trace::{DefaultMakeSpan, TraceLayer};
use tracing::{debug, error, info};
use uuid::Uuid;
pub async fn start_sender(relay: Arc<String>, files: Arc<Vec<String>>) {
/// Start the sender process.
///
/// This function starts the sender process which connects to a relay and
/// initiates file transfers. The sender also starts a local WebSocket server.
///
/// # Arguments
///
/// * `name` - The name of the sender.
/// * `relay` - The relay to connect to.
/// * `files` - The files to transfer.
pub async fn start_sender(name: String, relay: Arc<String>, files: Arc<Vec<String>>) {
// Log the name of the sender
debug!("Got name: {:?}", name);
// Create a channel for communication between threads
let (tx, mut rx) = mpsc::channel(1);
debug!("Got relay: {relay}");
// Generate a unique room ID
let room_id = Uuid::new_v4().to_string();
let rand_name = generate_random_name();
let local_room_id = room_id.clone();
let local_files = files.clone();
let local_relay = relay.clone();
let local_rand_name = rand_name.clone();
let local_rand_name = name.clone();
let local_tx = tx.clone();
// Start a local WebSocket server
let local_ws_thread = task::spawn(async move {
start_local_ws().await;
});
// Connect to the relay
let relay_thread = task::spawn(async move {
connect_to_server(
relay.clone(),
files.clone(),
Some(room_id),
relay.clone(),
Arc::new(rand_name.clone()),
Arc::new(name.clone()),
tx.clone(),
false,
)
.await
});
// Connect to the local WebSocket server
let local_thread = task::spawn(async move {
connect_to_server(
Arc::new(String::from("ws://0.0.0.0:9000")),
@ -96,20 +71,40 @@ pub async fn start_sender(relay: Arc<String>, files: Arc<Vec<String>>) {
.await
});
// Wait for the sender threads to finish
rx.recv().await.unwrap();
// Abort the local WebSocket server thread
local_ws_thread.abort();
// Abort the relay thread
relay_thread.abort();
// Abort the local thread
local_thread.abort();
}
/// Start a local WebSocket server.
///
/// This function initializes and runs a WebSocket server on the specified host and port.
/// It creates an instance of the `AppState` struct and uses it as the state for the router.
/// The `ws_handler` function is registered as the handler for the "/ws" route.
///
/// # Arguments
///
/// None
///
/// # Returns
///
/// This function does not return anything.
pub async fn start_local_ws() {
// The host and port the server will listen on.
let app_host = "0.0.0.0";
let app_port = "9000";
// Create a new server data structure.
// Create an instance of the application state.
let server = AppState::new();
// Set up the application routes.
// Create the axum application.
// The `ws_handler` function is registered as the handler for the "/ws" route.
// The `AppState` instance is used as the state for the router.
let app = Router::new()
.route("/ws", get(ws_handler))
.with_state(server)
@ -118,13 +113,16 @@ pub async fn start_local_ws() {
.make_span_with(DefaultMakeSpan::default().include_headers(true)),
);
// Try to bind the server to the specified host and port.
if let Ok(listener) = TcpListener::bind(&format!("{}:{}", app_host, app_port)).await {
// Log the address the server is listening on.
info!(
"Local Websocket listening on: {}",
"Local WebSocket listening on: {}",
listener.local_addr().unwrap()
);
// Run the server.
// Serve the application using the listener.
// The `connect_info` parameter is used to include the client's socket address in the tracing spans.
axum::serve(
listener,
app.into_make_service_with_connect_info::<SocketAddr>(),
@ -132,11 +130,22 @@ pub async fn start_local_ws() {
.await
.unwrap();
} else {
// Log binding failure and exit.
// Log an error if the server fails to bind.
error!("Failed to listen on: {}:{}", app_host, app_port);
}
}
/// Connects to the specified server and starts the file transfer.
///
/// # Arguments
///
/// * `relay` - The relay server URL.
/// * `files` - The files to be transferred.
/// * `room_id` - The room ID for the transfer. If `None`, a random UUID is generated.
/// * `message_server` - The message server URL.
/// * `transfer_name` - The name of the transfer.
/// * `tx` - The sender end of a channel to signal the completion of the transfer.
/// * `is_local` - Whether the transfer is local or not.
async fn connect_to_server(
relay: Arc<String>,
files: Arc<Vec<String>>,
@ -146,21 +155,33 @@ async fn connect_to_server(
tx: mpsc::Sender<()>,
is_local: bool,
) {
// Construct the server URL.
let url = format!("{}/ws", relay);
// Construct the message server URL.
let message_relay = format!("{}", message_server);
// Construct the transfer name.
let transfer_name = format!("{}", transfer_name);
// Create a request to the server.
match url.clone().into_client_request() {
Ok(mut request) => {
// Set the "Origin" header.
request
.headers_mut()
.insert("Origin", HeaderValue::from_str(relay.as_ref()).unwrap());
// Log the connection attempt.
debug!("Attempting to connect to {url}...");
// Generate a room ID if not provided.
let room_id = match room_id {
Some(id) => id,
None => Uuid::new_v4().to_string(),
};
// Connect to the server and start the file transfer.
match connect_async(request).await {
Ok((socket, _)) => {
let paths = files.to_vec();
@ -173,14 +194,18 @@ async fn connect_to_server(
is_local,
)
.await;
// Signal the completion of the transfer.
tx.send(()).await.unwrap();
}
Err(e) => {
// Log the connection error.
error!("Error: Failed to connect with error: {e}");
}
}
}
Err(e) => {
// Log the request creation error.
error!("Error: failed to create request with reason: {e:?}");
}
}

View file

@ -0,0 +1,115 @@
use hex;
use rand::{seq::SliceRandom, thread_rng};
use sha2::{Digest, Sha256};
/// Generates a random name composed of an adjective, a noun, and another noun.
///
/// # Returns
///
/// A string in the format "{adjective}-{noun1}-{noun2}".
pub fn generate_random_name() -> String {
let mut rng = thread_rng();
let adjective = adjectives().choose(&mut rng).unwrap();
let noun1 = nouns1().choose(&mut rng).unwrap();
let noun2 = nouns2().choose(&mut rng).unwrap();
format!("{adjective}-{noun1}-{noun2}")
}
/// Returns a random adjective.
///
/// # Returns
///
/// A `&'static str` representing an adjective.
fn adjectives() -> &'static [&'static str] {
// Define a list of adjectives.
static ADJECTIVES: &[&str] = &["funny", "smart", "creative", "friendly", "great"];
ADJECTIVES
}
/// Returns a random noun.
///
/// # Returns
///
/// A `&'static str` representing a noun.
fn nouns1() -> &'static [&'static str] {
// Define a list of nouns.
static NOUNS1: &[&str] = &["dog", "cat", "flower", "tree", "house"];
NOUNS1
}
/// Returns a random noun.
///
/// # Returns
///
/// A `&'static str` representing a noun.
fn nouns2() -> &'static [&'static str] {
// Define a list of nouns.
static NOUNS2: &[&str] = &["cookie", "cake", "frosting"];
NOUNS2
}
/// Hashes a given name using SHA256 and returns the hex-encoded result.
///
/// # Parameters
///
/// * `name`: A `String` representing the name to be hashed.
///
/// # Returns
///
/// A `String` containing the hex-encoded hash of the name.
pub fn hash_random_name(name: String) -> String {
let hashed_name = Sha256::digest(name.as_bytes());
hex::encode(hashed_name)
}
/// Replaces occurrences of "ws://" and "wss://" in a given address with "http://" and "https://" respectively.
///
/// # Parameters
///
/// * `address`: A `&str` representing the address to modify.
///
/// # Returns
///
/// A `String` representing the modified address.
pub fn replace_protocol(address: &str) -> String {
let mut result = address.to_string();
result = result.replace("ws://", "http://");
result = result.replace("wss://", "https://");
result
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_generate_random_name() {
let name = generate_random_name();
assert!(name.contains('-'));
assert!(name.split('-').count() == 3);
// assert!(name.is_empty());
}
#[test]
fn test_replace_protocol_replaces_ws_with_http() {
let result = replace_protocol("ws://example.com");
assert_eq!(result, "http://example.com");
}
#[test]
fn test_replace_protocol_replaces_wss_with_https() {
let result = replace_protocol("wss://example.com");
assert_eq!(result, "https://example.com");
}
#[test]
fn test_replace_protocol_does_not_replace_http_or_https() {
let result = replace_protocol("http://example.com");
assert_eq!(result, "http://example.com");
let result = replace_protocol("https://example.com");
assert_eq!(result, "https://example.com");
}
}

233
caesar-core/src/shared.rs Normal file
View file

@ -0,0 +1,233 @@
pub mod packets {
include!(concat!(env!("OUT_DIR"), "/packets.rs"));
}
use aes_gcm::{
aead::{Aead, AeadCore},
Aes128Gcm,
};
use packets::Packet;
use prost::Message;
use rand::rngs::OsRng;
use serde::{Deserialize, Serialize};
use tokio::net::TcpStream;
use tokio_tungstenite::tungstenite::protocol::Message as WebSocketMessage;
use tokio_tungstenite::{MaybeTlsStream, WebSocketStream};
/// Represents a packet that is sent over a websocket connection.
///
/// This enum is used to represent different types of packets that can be sent over a websocket connection.
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum JsonPacket {
/// A packet to join a room.
///
/// This variant is used to request to join a room. The `id` field is used to specify the room id.
Join {
/// The id of the room to join.
id: String,
},
/// A packet to create a new room.
///
/// This variant is used to request to create a new room. The `id` field is used to specify the room id, which can be optional.
Create {
/// The id of the room to create. It can be `None` to generate a random room id.
id: Option<String>,
},
/// A packet to leave a room.
///
/// This variant is used to request to leave a room.
Leave,
}
/// Represents a response to a `JsonPacket` packet.
///
/// This enum is used to represent different types of responses to a `JsonPacket` packet.
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type", rename_all = "camelCase")]
pub enum JsonPacketResponse {
/// A response to a `Join` packet.
///
/// This variant is used to indicate the result of a `Join` packet. The `size` field is used to specify the number of existing users in the room.
Join {
/// The number of existing users in the room. This field is `None` if the room is empty.
#[serde(skip_serializing_if = "Option::is_none")]
size: Option<usize>,
},
/// A response to a `Create` packet.
///
/// This variant is used to indicate the result of a `Create` packet. The `id` field is used to specify the room id.
Create {
/// The id of the created room.
id: String,
},
/// A response to a `Leave` packet.
///
/// This variant is used to indicate the result of a `Leave` packet. The `index` field is used to specify the index of the user who left the room.
Leave {
/// The index of the user who left the room.
index: usize,
},
/// An error response.
///
/// This variant is used to indicate an error. The `message` field is used to specify the error message.
Error {
/// The error message.
message: String,
},
}
/// Represents the result of an operation.
///
/// This enum is used to indicate the status of an operation. It can be one of three
/// variants:
///
/// - `Continue`: Operation was successful and the client should continue.
/// - `Exit`: Operation was successful and the client should exit.
/// - `Err`: Operation encountered an error. The error message is provided in the
/// variant.
#[derive(Debug, PartialEq)]
pub enum Status {
/// Operation was successful and the client should continue.
Continue(),
/// Operation was successful and the client should exit.
Exit(),
/// Operation encountered an error. The error message is provided in the variant.
Err(String),
}
/// Represents a sender of JSON packets.
///
/// This trait is used to send JSON packets to a `JsonPacket` receiver. The
/// `send_json_packet` method is used to send a `JsonPacket` packet.
pub trait JsonPacketSender {
/// Sends a `JsonPacket` packet to a receiver.
///
/// This method sends a `JsonPacket` packet to a receiver. The `packet` argument
/// is the packet to send.
fn send_json_packet(&self, packet: JsonPacket);
}
/// Represents a sender of packets.
///
/// This trait is used to send packets to a receiver. The `send_packet` method is used to send
/// a plain packet, and the `send_encrypted_packet` method is used to send an encrypted packet.
pub trait PacketSender {
/// Sends a plain packet to a receiver.
///
/// This method sends a plain packet to a receiver. The `destination` argument specifies the
/// destination of the packet, and the `packet` argument is the packet to send.
fn send_packet(&self, destination: u8, packet: packets::packet::Value);
/// Sends an encrypted packet to a receiver.
///
/// This method sends an encrypted packet to a receiver. The `key` argument is the encryption
/// key to use, the `destination` argument specifies the destination of the packet, and the
/// `value` argument is the packet to send.
fn send_encrypted_packet(
&self,
key: &Option<Aes128Gcm>,
destination: u8,
value: packets::packet::Value,
);
}
/// Implementation of `JsonPacketSender` for `Sender` struct.
///
/// This implementation of `JsonPacketSender` for `Sender` struct provides a method
/// `send_json_packet` to send a `JsonPacket` packet.
impl JsonPacketSender for Sender {
/// Sends a `JsonPacket` packet to a receiver.
///
/// This method serializes the `JsonPacket` using `serde_json` and sends it as a
/// `WebSocketMessage::Text` to a receiver.
///
/// # Arguments
///
/// * `packet` - The `JsonPacket` to send.
fn send_json_packet(&self, packet: JsonPacket) {
// Serialize the JsonPacket using serde_json
let serialized_packet = serde_json::to_string(&packet)
.expect("Failed to serialize JSON packet.");
// Send the serialized packet as a WebSocketMessage::Text
self.send(WebSocketMessage::Text(serialized_packet))
.expect("Failed to send JSON packet.");
}
}
/// Implementation of `PacketSender` for `Sender` struct.
///
/// This implementation of `PacketSender` for `Sender` struct provides methods
/// to send a packet to a receiver.
impl PacketSender for Sender {
/// Sends a packet to a receiver.
///
/// This method serializes the packet and sends it as a `WebSocketMessage::Binary` to a receiver.
///
/// # Arguments
///
/// * `destination` - The destination of the packet.
/// * `value` - The packet to send.
fn send_packet(&self, destination: u8, value: packets::packet::Value) {
// Serialize the packet
let packet = Packet { value: Some(value) };
let mut serialized_packet = packet.encode_to_vec();
// Insert the destination at the beginning of the packet
serialized_packet.insert(0, destination);
// Send the serialized packet as a WebSocketMessage::Binary
self.send(WebSocketMessage::Binary(serialized_packet))
.expect("Failed to send Packet.");
}
/// Sends an encrypted packet to a receiver.
///
/// This method encrypts the packet using the provided key and sends it as a
/// `WebSocketMessage::Binary` to a receiver.
///
/// # Arguments
///
/// * `key` - The encryption key to use.
/// * `destination` - The destination of the packet.
/// * `value` - The packet to send.
fn send_encrypted_packet(
&self,
key: &Option<Aes128Gcm>,
destination: u8,
value: packets::packet::Value,
) {
// Serialize the packet
let packet = Packet { value: Some(value) };
// Generate a nonce for encryption
let nonce = Aes128Gcm::generate_nonce(&mut OsRng);
// Serialize the packet
let plaintext = packet.encode_to_vec();
// Encrypt the packet using the provided key
let mut ciphertext = key
.as_ref()
.unwrap()
.encrypt(&nonce, plaintext.as_ref())
.expect("Failed to encrypt Packet.");
// Create the serialized packet by concatenating the nonce and the ciphertext
let mut serialized_packet = nonce.to_vec();
serialized_packet.append(&mut ciphertext);
// Insert the destination at the beginning of the packet
serialized_packet.insert(0, destination);
// Send the serialized packet as a WebSocketMessage::Binary
self.send(WebSocketMessage::Binary(serialized_packet))
.expect("Failed to send encrypted Packet.");
}
}
pub type Sender = flume::Sender<WebSocketMessage>;
pub type Socket = WebSocketStream<MaybeTlsStream<TcpStream>>;

18
caesar-shuttle/Cargo.toml Normal file
View file

@ -0,0 +1,18 @@
[package]
name = "caesar-transfer-iu"
version = "0.3.2"
edition = "2021"
authors = ["Manuel Keidel, Patryk Hegenberg, Krzysztof Stankiewicz"]
[[bin]]
name = "caesar-transfer-iu"
path = "src/main.rs"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
caesar-core = { path = "../caesar-core" }
shuttle-axum = { version = "0.44.0" }
shuttle-runtime = { version = "0.44.0" }
axum = { version = "0.7.5", features = ["ws"] }
axum-client-ip = "0.6.0"

View file

@ -0,0 +1,41 @@
use axum::{
routing::{get, post, put},
Router,
};
use axum_client_ip::SecureClientIpSource;
use caesar_core::relay::appstate::AppState;
use caesar_core::relay::server::download_info;
use caesar_core::relay::server::download_success;
use caesar_core::relay::server::upload_info;
use caesar_core::relay::server::ws_handler;
use shuttle_axum::ShuttleAxum;
/// The main function that sets up the Axum application.
///
/// This function creates a new server data structure and sets up the application routes.
/// The routes include "/ws" for the websocket handler, "/upload" for the upload info handler,
/// "/download/:name" for the download info handler, and "/download_success/:name" for the download success handler.
/// The routes are associated with the corresponding handlers.
///
/// The application state is wrapped around the routes using the `with_state` method.
/// The client IP source is added as an extension using the `layer` method.
///
/// The function returns a `ShuttleAxum` result.
#[shuttle_runtime::main]
async fn axum() -> ShuttleAxum {
// Create a new server data structure.
let appstate = AppState::new();
// Set up the application routes.
let app = Router::new()
.route("/ws", get(ws_handler)) // Route for the websocket handler
.route("/upload", put(upload_info)) // Route for the upload info handler
.route("/download/:name", get(download_info)) // Route for the download info handler
.route("/download_success/:name", post(download_success)) // Route for the download success handler
.with_state(appstate) // Wrap the routes with the application state
.layer(SecureClientIpSource::ConnectInfo.into_extension()); // Add the client IP source as an extension
// Return the application router wrapped in a `ShuttleAxum` result.
Ok(app.into())
}

View file

@ -0,0 +1,118 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="flutter_test_gui API docs, for the Dart programming language.">
<title>flutter_test_gui - Dart API docs</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="static-assets/github.css?v1">
<link rel="stylesheet" href="static-assets/styles.css?v1">
<link rel="icon" href="static-assets/favicon.png?v1">
</head>
<body data-base-href="" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li class="self-crumb">flutter_test_gui package</li>
</ol>
<div class="self-name">flutter_test_gui</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div id="dartdoc-main-content" class="main-content">
<h1>404: Something's gone wrong :-(</h1>
<section class="desc">
<p>You've tried to visit a page that doesn't exist. Luckily this site
has other <a href="index.html">pages</a>.</p>
<p>If you were looking for something specific, try searching:
<form class="search-body" role="search">
<input type="text" id="search-body" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</p>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li class="self-crumb">flutter_test_gui package</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="main/main-library.html">main</a></li>
<li><a href="pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div>
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="static-assets/highlight.pack.js?v1"></script>
<script src="static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1 @@
[]

View file

@ -0,0 +1,30 @@
<ol>
<li class="section-title"><a href="consts_consts/Constants-class.html#constructors">Constructors</a></li>
<li><a href="consts_consts/Constants/Constants.html">Constants</a></li>
<li class="section-title inherited">
<a href="consts_consts/Constants-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="section-title inherited"><a href="consts_consts/Constants-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/toString.html">toString</a></li>
<li class="section-title inherited"><a href="consts_consts/Constants-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></li>
<li class="section-title"><a href="consts_consts/Constants-class.html#constants">Constants</a></li>
<li><a href="consts_consts/Constants/backColor-constant.html">backColor</a></li>
<li><a href="consts_consts/Constants/highlightColor-constant.html">highlightColor</a></li>
<li><a href="consts_consts/Constants/textColor-constant.html">textColor</a></li>
</ol>

View file

@ -0,0 +1,259 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the Constants class from the consts library, for the Dart programming language.">
<title>Constants class - consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../consts_consts/consts_consts-library.html">consts&#47;consts.dart</a></li>
<li class="self-crumb">Constants class</li>
</ol>
<div class="self-name">Constants</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="consts_consts&#47;consts_consts-library-sidebar.html"
data-below-sidebar="consts_consts&#47;Constants-class-sidebar.html">
<div>
<h1><span class="kind-class">Constants</span> class
</h1></div>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="Constants" class="callable">
<span class="name"><a href="../consts_consts/Constants/Constants.html">Constants</a></span><span class="signature">()</span>
</dt>
<dd>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/toString.html">toString</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constants">
<h2>Constants</h2>
<dl class="properties">
<dt id="backColor" class="constant">
<span class="name "><a href="../consts_consts/Constants/backColor-constant.html">backColor</a></span>
<span class="signature">&#8594; const <a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a></span>
</dt>
<dd>
</dd>
<dt id="highlightColor" class="constant">
<span class="name "><a href="../consts_consts/Constants/highlightColor-constant.html">highlightColor</a></span>
<span class="signature">&#8594; const <a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a></span>
</dt>
<dd>
</dd>
<dt id="textColor" class="constant">
<span class="name "><a href="../consts_consts/Constants/textColor-constant.html">textColor</a></span>
<span class="signature">&#8594; const <a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a></span>
</dt>
<dd>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../consts_consts/consts_consts-library.html">consts</a></li>
<li class="self-crumb">Constants class</li>
</ol>
<h5>consts library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the Constants constructor from Class Constants from the consts library, for the Dart programming language.">
<title>Constants constructor - Constants - consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts&#47;consts.dart</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">Constants constructor</li>
</ol>
<div class="self-name">Constants</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="consts_consts&#47;Constants-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">Constants</span> constructor
</h1></div>
<section class="multi-line-signature">
<span class="name ">Constants</span>(<wbr>)
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">Constants constructor</li>
</ol>
<h5>Constants class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the backColor constant from the Constants class, for the Dart programming language.">
<title>backColor constant - Constants class - consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts&#47;consts.dart</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">backColor constant</li>
</ol>
<div class="self-name">backColor</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="consts_consts&#47;Constants-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">backColor</span> constant
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a>
const <span class="name ">backColor</span>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">static const backColor = Color(0xFF303446);</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">backColor constant</li>
</ol>
<h5>Constants class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the highlightColor constant from the Constants class, for the Dart programming language.">
<title>highlightColor constant - Constants class - consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts&#47;consts.dart</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">highlightColor constant</li>
</ol>
<div class="self-name">highlightColor</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="consts_consts&#47;Constants-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">highlightColor</span> constant
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a>
const <span class="name ">highlightColor</span>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">static const highlightColor = Color(0xFF8caaee);</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">highlightColor constant</li>
</ol>
<h5>Constants class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the textColor constant from the Constants class, for the Dart programming language.">
<title>textColor constant - Constants class - consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts&#47;consts.dart</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">textColor constant</li>
</ol>
<div class="self-name">textColor</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="consts_consts&#47;Constants-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">textColor</span> constant
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-ui/Color-class.html">Color</a>
const <span class="name ">textColor</span>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">static const textColor = Color(0xFFc6d0f5);</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../consts_consts/consts_consts-library.html">consts</a></li>
<li><a href="../../consts_consts/Constants-class.html">Constants</a></li>
<li class="self-crumb">textColor constant</li>
</ol>
<h5>Constants class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,13 @@
<ol>
<li class="section-title"><a href="consts_consts/consts_consts-library.html#classes">Classes</a></li>
<li><a href="consts_consts/Constants-class.html">Constants</a></li>
</ol>

View file

@ -0,0 +1,152 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="consts library API docs, for the Dart programming language.">
<title>consts library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">consts/consts.dart</li>
</ol>
<div class="self-name">consts</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="consts_consts&#47;consts_consts-library-sidebar.html">
<div>
<h1>
<span class="kind-library">consts/consts</span>
library
</h1>
</div>
<section class="summary offset-anchor" id="classes">
<h2>Classes</h2>
<dl>
<dt id="Constants">
<span class="name "><a href="../consts_consts/Constants-class.html">Constants</a></span>
</dt>
<dd>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">consts/consts.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>consts library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

185
docs/flutterdocs/index.html Normal file
View file

@ -0,0 +1,185 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="flutter_test_gui API docs, for the Dart programming language.">
<title>flutter_test_gui - Dart API docs</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="static-assets/github.css?v1">
<link rel="stylesheet" href="static-assets/styles.css?v1">
<link rel="icon" href="static-assets/favicon.png?v1">
</head>
<body data-base-href="" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li class="self-crumb">flutter_test_gui package</li>
</ol>
<div class="self-name">flutter_test_gui</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div id="dartdoc-main-content" class="main-content">
<section class="desc markdown">
<h1 id="flutter_test_gui">flutter_test_gui</h1>
<p>A new Flutter project.</p>
<h2 id="getting-started">Getting Started</h2>
<p>This project is a starting point for a Flutter application.</p>
<p>A few resources to get you started if this is your first Flutter project:</p>
<ul>
<li><a href="https://docs.flutter.dev/get-started/codelab">Lab: Write your first Flutter app</a></li>
<li><a href="https://docs.flutter.dev/cookbook">Cookbook: Useful Flutter samples</a></li>
</ul>
<p>For help getting started with Flutter development, view the
<a href="https://docs.flutter.dev/">online documentation</a>, which offers tutorials,
samples, guidance on mobile development, and a full API reference.</p>
</section>
<section class="summary">
<h2>Libraries</h2>
<dl>
<dt id="consts">
<span class="name"><a href="consts_consts/consts_consts-library.html">consts/consts</a></span>
</dt>
<dd>
</dd>
<dt id="main">
<span class="name"><a href="main/main-library.html">main</a></span>
</dt>
<dd>
</dd>
<dt id="receive_screen">
<span class="name"><a href="pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></span>
</dt>
<dd>
</dd>
<dt id="send_screen">
<span class="name"><a href="pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></span>
</dt>
<dd>
</dd>
<dt id="settings_screen">
<span class="name"><a href="pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></span>
</dt>
<dd>
</dd>
<dt id="succes_screen">
<span class="name"><a href="pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></span>
</dt>
<dd>
</dd>
<dt id="transfer_screen">
<span class="name"><a href="pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></span>
</dt>
<dd>
</dd>
<dt id="waiting_screen">
<span class="name"><a href="pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></span>
</dt>
<dd>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li class="self-crumb">flutter_test_gui package</li>
</ol>
<h5 class="hidden-xs"><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="main/main-library.html">main</a></li>
<li><a href="pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div>
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="static-assets/highlight.pack.js?v1"></script>
<script src="static-assets/docs.dart.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,35 @@
<ol>
<li class="section-title"><a href="main/MyApp-class.html#constructors">Constructors</a></li>
<li><a href="main/MyApp/MyApp.html">MyApp</a></li>
<li class="section-title inherited">
<a href="main/MyApp-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="section-title"><a href="main/MyApp-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="main/MyApp/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="main/MyApp-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,364 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the MyApp class from the main library, for the Dart programming language.">
<title>MyApp class - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main.dart</a></li>
<li class="self-crumb">MyApp class</li>
</ol>
<div class="self-name">MyApp</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;main-library-sidebar.html"
data-below-sidebar="main&#47;MyApp-class-sidebar.html">
<div>
<h1><span class="kind-class">MyApp</span> class
</h1></div>
<section class="desc markdown">
<p>The root widget of the application.</p>
<p>It sets up the material design theme and provides the home page.</p>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>MyApp</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="MyApp" class="callable">
<span class="name"><a href="../main/MyApp/MyApp.html">MyApp</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span>)</span>
</dt>
<dd>
Creates a new instance of <a href="../main/MyApp-class.html">MyApp</a>.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../main/MyApp/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../main/MyApp-class.html">MyApp</a></span>&gt;</span></span>
</span>
</dt>
<dd>
Creates the mutable state for this widget at a given location in the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li class="self-crumb">MyApp class</li>
</ol>
<h5>main library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the MyApp constructor from Class MyApp from the main library, for the Dart programming language.">
<title>MyApp constructor - MyApp - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main.dart</a></li>
<li><a href="../../main/MyApp-class.html">MyApp</a></li>
<li class="self-crumb">MyApp const constructor</li>
</ol>
<div class="self-name">MyApp</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;MyApp-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">MyApp</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">MyApp</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Creates a new instance of <a href="../../main/MyApp-class.html">MyApp</a>.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const MyApp({super.key});</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main</a></li>
<li><a href="../../main/MyApp-class.html">MyApp</a></li>
<li class="self-crumb">MyApp const constructor</li>
</ol>
<h5>MyApp class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the MyApp class, for the Dart programming language.">
<title>createState method - MyApp class - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main.dart</a></li>
<li><a href="../../main/MyApp-class.html">MyApp</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;MyApp-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../../main/MyApp-class.html">MyApp</a></span>&gt;</span></span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates the mutable state for this widget at a given location in the tree.</p>
<p>Subclasses should override this method to return a newly created
instance of their associated <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> subclass:</p>
<pre class="language-dart"><code class="language-dart">@override
State&lt;SomeWidget&gt; createState() =&gt; _SomeWidgetState();
</code></pre>
<p>The framework can call this method multiple times over the lifetime of
a <code>StatefulWidget</code>. For example, if the widget is inserted into the tree
in multiple locations, the framework will create a separate <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object
for each location. Similarly, if the widget is removed from the tree and
later inserted into the tree again, the framework will call <a href="../../main/MyApp/createState.html">createState</a>
again to create a fresh <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object, simplifying the lifecycle of
<a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> objects.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
State&lt;MyApp&gt; createState() =&gt; _MyAppState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main</a></li>
<li><a href="../../main/MyApp-class.html">MyApp</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>MyApp class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,36 @@
<ol>
<li class="section-title"><a href="main/MyHomePage-class.html#constructors">Constructors</a></li>
<li><a href="main/MyHomePage/MyHomePage.html">MyHomePage</a></li>
<li class="section-title">
<a href="main/MyHomePage-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li><a href="main/MyHomePage/title.html">title</a></li>
<li class="section-title"><a href="main/MyHomePage-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="main/MyHomePage/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="main/MyHomePage-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,376 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the MyHomePage class from the main library, for the Dart programming language.">
<title>MyHomePage class - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main.dart</a></li>
<li class="self-crumb">MyHomePage class</li>
</ol>
<div class="self-name">MyHomePage</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;main-library-sidebar.html"
data-below-sidebar="main&#47;MyHomePage-class-sidebar.html">
<div>
<h1><span class="kind-class">MyHomePage</span> class
</h1></div>
<section class="desc markdown">
<p>The root widget of the application that represents the home page.</p>
<p>It sets up the material design theme and provides the home page.</p>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>MyHomePage</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="MyHomePage" class="callable">
<span class="name"><a href="../main/MyHomePage/MyHomePage.html">MyHomePage</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>, </span><span class="parameter" id="-param-title"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">title</span>}</span>)</span>
</dt>
<dd>
Creates a new instance of <a href="../main/MyHomePage-class.html">MyHomePage</a>.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="title" class="property">
<span class="name"><a href="../main/MyHomePage/title.html">title</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
The title of the home page.
<div class="features"><span class="feature">final</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../main/MyHomePage/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../main/MyHomePage-class.html">MyHomePage</a></span>&gt;</span></span>
</span>
</dt>
<dd>
Creates the mutable state for this widget at a given location in the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li class="self-crumb">MyHomePage class</li>
</ol>
<h5>main library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,133 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the MyHomePage constructor from Class MyHomePage from the main library, for the Dart programming language.">
<title>MyHomePage constructor - MyHomePage - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main.dart</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">MyHomePage const constructor</li>
</ol>
<div class="self-name">MyHomePage</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;MyHomePage-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">MyHomePage</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">MyHomePage</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>, </span></li>
<li><span class="parameter" id="-param-title"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">title</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Creates a new instance of <a href="../../main/MyHomePage-class.html">MyHomePage</a>.</p>
<p>The <a href="../../main/MyHomePage/title.html">title</a> argument is the title of the home page.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const MyHomePage({
super.key,
required this.title,
});</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">MyHomePage const constructor</li>
</ol>
<h5>MyHomePage class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the MyHomePage class, for the Dart programming language.">
<title>createState method - MyHomePage class - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main.dart</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;MyHomePage-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../../main/MyHomePage-class.html">MyHomePage</a></span>&gt;</span></span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates the mutable state for this widget at a given location in the tree.</p>
<p>Subclasses should override this method to return a newly created
instance of their associated <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> subclass:</p>
<pre class="language-dart"><code class="language-dart">@override
State&lt;SomeWidget&gt; createState() =&gt; _SomeWidgetState();
</code></pre>
<p>The framework can call this method multiple times over the lifetime of
a <code>StatefulWidget</code>. For example, if the widget is inserted into the tree
in multiple locations, the framework will create a separate <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object
for each location. Similarly, if the widget is removed from the tree and
later inserted into the tree again, the framework will call <a href="../../main/MyHomePage/createState.html">createState</a>
again to create a fresh <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object, simplifying the lifecycle of
<a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> objects.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
State&lt;MyHomePage&gt; createState() =&gt; _MyHomePageState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>MyHomePage class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the title property from the MyHomePage class, for the Dart programming language.">
<title>title property - MyHomePage class - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main.dart</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">title property</li>
</ol>
<div class="self-name">title</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;MyHomePage-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">title</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">title</span>
<div class="features"><span class="feature">final</span></div>
</section>
<section class="desc markdown">
<p>The title of the home page.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">final String title;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../main/main-library.html">main</a></li>
<li><a href="../../main/MyHomePage-class.html">MyHomePage</a></li>
<li class="self-crumb">title property</li>
</ol>
<h5>MyHomePage class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,16 @@
<ol>
<li class="section-title"><a href="main/main-library.html#classes">Classes</a></li>
<li><a href="main/MyApp-class.html">MyApp</a></li>
<li><a href="main/MyHomePage-class.html">MyHomePage</a></li>
<li class="section-title"><a href="main/main-library.html#functions">Functions</a></li>
<li><a href="main/main.html">main</a></li>
</ol>

View file

@ -0,0 +1,179 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="main library API docs, for the Dart programming language.">
<title>main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">main.dart</li>
</ol>
<div class="self-name">main</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="main&#47;main-library-sidebar.html">
<div>
<h1>
<span class="kind-library">main</span>
library
</h1>
</div>
<section class="summary offset-anchor" id="classes">
<h2>Classes</h2>
<dl>
<dt id="MyApp">
<span class="name "><a href="../main/MyApp-class.html">MyApp</a></span>
</dt>
<dd>
The root widget of the application.
</dd>
<dt id="MyHomePage">
<span class="name "><a href="../main/MyHomePage-class.html">MyHomePage</a></span>
</dt>
<dd>
The root widget of the application that represents the home page.
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="functions">
<h2>Functions</h2>
<dl class="callables">
<dt id="main" class="callable">
<span class="name"><a href="../main/main.html">main</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
</span>
</dt>
<dd>
Main entrypoint of the application.
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">main.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>main library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the main function from the main library, for the Dart programming language.">
<title>main function - main library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main.dart</a></li>
<li class="self-crumb">main function</li>
</ol>
<div class="self-name">main</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="main&#47;main-library-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-function">main</span> function
</h1></div>
<section class="multi-line-signature">
<span class="returntype"><a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
<span class="name ">main</span>(<wbr>)
</section>
<section class="desc markdown">
<p>Main entrypoint of the application.</p>
<p>This function is called when the application starts. It initializes the
Rust library, sets up the application widget, and shows the window.</p>
<p>The function first calls the <code>RustLib.init</code> function to initialize the
Rust library. Then, it runs the application using the <a href="https://api.flutter.dev/flutter/widgets/runApp.html">runApp</a> function
with the <a href="../main/MyApp-class.html">MyApp</a> widget. If the application is running on Windows, Linux,
or macOS, it sets up the window properties such as the minimum size,
initial size, alignment, and title. Finally, it shows the window.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">Future&lt;void&gt; main() async {
&#47;&#47; Initialize the Rust library
await RustLib.init();
&#47;&#47; Set up the application widget
runApp(const MyApp());
&#47;&#47; Set up the window properties if running on Windows, Linux, or macOS
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
doWhenWindowReady(() {
final win = appWindow;
&#47;&#47; Set the minimum size of the window
const initialSize = Size(720, 512);
win.minSize = initialSize;
&#47;&#47; Set the initial size of the window
win.size = initialSize;
&#47;&#47; Set the alignment of the window
win.alignment = Alignment.center;
&#47;&#47; Set the title of the window
win.title = &#39;Caesar Test Demo&#39;;
&#47;&#47; Show the window
win.show();
});
}
}</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li class="self-crumb">main function</li>
</ol>
<h5>main library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<ol>
<li class="section-title"><a href="pages_receive_screen/ReceiveScreen-class.html#constructors">Constructors</a></li>
<li><a href="pages_receive_screen/ReceiveScreen/ReceiveScreen.html">ReceiveScreen</a></li>
<li class="section-title inherited">
<a href="pages_receive_screen/ReceiveScreen-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="section-title"><a href="pages_receive_screen/ReceiveScreen-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="pages_receive_screen/ReceiveScreen/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_receive_screen/ReceiveScreen-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,366 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the ReceiveScreen class from the receive_screen library, for the Dart programming language.">
<title>ReceiveScreen class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li class="self-crumb">ReceiveScreen class</li>
</ol>
<div class="self-name">ReceiveScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;pages_receive_screen-library-sidebar.html"
data-below-sidebar="pages_receive_screen&#47;ReceiveScreen-class-sidebar.html">
<div>
<h1><span class="kind-class">ReceiveScreen</span> class
</h1></div>
<section class="desc markdown">
<p>Screen for receiving files.</p>
<p>This screen is used to accept incoming file transfers. It displays a QR
code scanner on supported platforms and allows the user to enter a
connection link manually.</p>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>ReceiveScreen</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="ReceiveScreen" class="callable">
<span class="name"><a href="../pages_receive_screen/ReceiveScreen/ReceiveScreen.html">ReceiveScreen</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span>)</span>
</dt>
<dd>
Creates a new instance of the receive screen.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../pages_receive_screen/ReceiveScreen/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></span>
</span>
</dt>
<dd>
Creates the mutable state for this widget at a given location in the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li class="self-crumb">ReceiveScreen class</li>
</ol>
<h5>receive_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the ReceiveScreen constructor from Class ReceiveScreen from the receive_screen library, for the Dart programming language.">
<title>ReceiveScreen constructor - ReceiveScreen - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></li>
<li class="self-crumb">ReceiveScreen const constructor</li>
</ol>
<div class="self-name">ReceiveScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">ReceiveScreen</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">ReceiveScreen</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Creates a new instance of the receive screen.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const ReceiveScreen({super.key});</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></li>
<li class="self-crumb">ReceiveScreen const constructor</li>
</ol>
<h5>ReceiveScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the ReceiveScreen class, for the Dart programming language.">
<title>createState method - ReceiveScreen class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates the mutable state for this widget at a given location in the tree.</p>
<p>Subclasses should override this method to return a newly created
instance of their associated <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> subclass:</p>
<pre class="language-dart"><code class="language-dart">@override
State&lt;SomeWidget&gt; createState() =&gt; _SomeWidgetState();
</code></pre>
<p>The framework can call this method multiple times over the lifetime of
a <code>StatefulWidget</code>. For example, if the widget is inserted into the tree
in multiple locations, the framework will create a separate <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object
for each location. Similarly, if the widget is removed from the tree and
later inserted into the tree again, the framework will call <a href="../../pages_receive_screen/ReceiveScreen/createState.html">createState</a>
again to create a fresh <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object, simplifying the lifecycle of
<a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> objects.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
ReceiveScreenState createState() =&gt; ReceiveScreenState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>ReceiveScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,45 @@
<ol>
<li class="section-title"><a href="pages_receive_screen/ReceiveScreenState-class.html#constructors">Constructors</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState/ReceiveScreenState.html">ReceiveScreenState</a></li>
<li class="section-title">
<a href="pages_receive_screen/ReceiveScreenState-class.html#instance-properties">Properties</a>
</li>
<li><a href="pages_receive_screen/ReceiveScreenState/appOrigin.html">appOrigin</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState/inputValue.html">inputValue</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState/myController.html">myController</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></li>
<li class="section-title"><a href="pages_receive_screen/ReceiveScreenState-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState/build.html">build</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/initState.html">initState</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState/loadSettings.html">loadSettings</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_receive_screen/ReceiveScreenState-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,487 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the ReceiveScreenState class from the receive_screen library, for the Dart programming language.">
<title>ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li class="self-crumb">ReceiveScreenState class</li>
</ol>
<div class="self-name">ReceiveScreenState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;pages_receive_screen-library-sidebar.html"
data-below-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html">
<div>
<h1><span class="kind-class">ReceiveScreenState</span> class
</h1></div>
<section class="desc markdown">
<p>State for the receive screen.</p>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></span>&gt;</span></li>
<li>ReceiveScreenState</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="ReceiveScreenState" class="callable">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/ReceiveScreenState.html">ReceiveScreenState</a></span><span class="signature">()</span>
</dt>
<dd>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="appOrigin" class="property">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/appOrigin.html">appOrigin</a></span>
<span class="signature">&#8596; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
The URL of the app that initiated the transfer.
<div class="features"><span class="feature">getter/setter pair</span></div>
</dd>
<dt id="context" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span>
</dt>
<dd class="inherited">
The location in the tree where this widget builds.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="inputValue" class="property">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/inputValue.html">inputValue</a></span>
<span class="signature">&#8596; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
The current input value of the connection link input.
<div class="features"><span class="feature">getter/setter pair</span></div>
</dd>
<dt id="mounted" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</dt>
<dd class="inherited">
Whether this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object is currently in a tree.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="myController" class="property">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/myController.html">myController</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/widgets/TextEditingController-class.html">TextEditingController</a></span>
</dt>
<dd>
Text editing controller for the connection link input.
<div class="features"><span class="feature">final</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="widget" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></span>
<span class="signature">&#8594; <a href="../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></span>
</dt>
<dd class="inherited">
The current configuration.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="activate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is reinserted into the tree after having been
removed via <a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="build" class="callable">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/build.html">build</a></span><span class="signature">(<wbr><span class="parameter" id="build-param-context"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span> <span class="parameter-name">context</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></span>
</span>
</dt>
<dd>
Builds the scaffold for the receive screen.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="deactivate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didChangeDependencies" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when a dependency of this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didUpdateWidget" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></span><span class="signature">(<wbr><span class="parameter" id="didUpdateWidget-param-oldWidget"><span>covariant</span> <span class="type-annotation"><a href="../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></span> <span class="parameter-name">oldWidget</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the widget configuration changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="dispose" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree permanently.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="initState" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/initState.html">initState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is inserted into the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="loadSettings" class="callable">
<span class="name"><a href="../pages_receive_screen/ReceiveScreenState/loadSettings.html">loadSettings</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
</span>
</dt>
<dd>
Loads the app origin from the shared preferences.
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="reassemble" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the application is reassembled during debugging, for
example during hot reload.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="setState" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></span><span class="signature">(<wbr><span class="parameter" id="setState-param-fn"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-ui/VoidCallback.html">VoidCallback</a></span> <span class="parameter-name">fn</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Notify the framework that the internal state of this object has changed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A brief description of this object, usually just the <a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a> and the
<a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li class="self-crumb">ReceiveScreenState class</li>
</ol>
<h5>receive_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the ReceiveScreenState constructor from Class ReceiveScreenState from the receive_screen library, for the Dart programming language.">
<title>ReceiveScreenState constructor - ReceiveScreenState - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">ReceiveScreenState constructor</li>
</ol>
<div class="self-name">ReceiveScreenState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">ReceiveScreenState</span> constructor
</h1></div>
<section class="multi-line-signature">
<span class="name ">ReceiveScreenState</span>(<wbr>)
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">ReceiveScreenState constructor</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the appOrigin property from the ReceiveScreenState class, for the Dart programming language.">
<title>appOrigin property - ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">appOrigin property</li>
</ol>
<div class="self-name">appOrigin</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">appOrigin</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">appOrigin</span>
<div class="features"><span class="feature">getter/setter pair</span></div>
</section>
<section class="desc markdown">
<p>The URL of the app that initiated the transfer.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">String appOrigin = &#39;&#39;;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">appOrigin property</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,239 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the build method from the ReceiveScreenState class, for the Dart programming language.">
<title>build method - ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">build method</li>
</ol>
<div class="self-name">build</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">build</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></span>
<span class="name ">build</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="build-param-context"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span> <span class="parameter-name">context</span></span></li>
</ol>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Builds the scaffold for the receive screen.</p>
<p>The scaffold contains a center widget that contains a column of widgets.
The column contains a QR code scanner if <code>_showScanner</code> is true, otherwise
it contains a text field for entering the transfer name. Below the text
field is an elevated button for initiating the receive process.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Constants.backColor,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
&#47;&#47; If _showScanner is false, display a QR code icon that can be tapped
&#47;&#47; to start the QR code scanner.
if (!_showScanner)
GestureDetector(
onTap: () {
if (Platform.isIOS || Platform.isAndroid) {
setState(() {
_showScanner = true;
});
}
},
child: Container(
width: 200,
height: 200,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Constants.textColor,
),
child: const Center(
child: Icon(
Icons.qr_code,
color: Constants.highlightColor,
size: 100,
),
),
),
),
&#47;&#47; If _showScanner is true, display the QR code scanner.
if (_showScanner)
Container(
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height * 0.5,
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
),
child: _buildQRScanner(),
),
&#47;&#47; Add some spacing between the scanner and the text field.
const SizedBox(height: 32),
&#47;&#47; Display a text field for entering the transfer name.
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: SizedBox(
width: MediaQuery.of(context).size.width * 0.5,
child: TextField(
controller: myController,
textAlign: TextAlign.center,
style: const TextStyle(
color: Constants.highlightColor,
),
onChanged: (value) {
setState(() {
inputValue = value;
});
},
decoration: const InputDecoration(
labelText: &#39;Enter Transfername&#39;,
alignLabelWithHint: true,
floatingLabelAlignment: FloatingLabelAlignment.center,
labelStyle: TextStyle(color: Constants.textColor),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Constants.textColor),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Constants.textColor),
),
),
),
),
),
&#47;&#47; Add some spacing between the text field and the receive button.
const SizedBox(height: 16),
&#47;&#47; Display an elevated button for initiating the receive process.
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Constants.textColor,
foregroundColor: Constants.backColor,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
),
onPressed: () {
loadSettings().then((_) =&gt; _startTransfer(appOrigin));
},
child: const Text(&#39;Receive&#39;),
),
],
)),
);
}</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">build method</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the inputValue property from the ReceiveScreenState class, for the Dart programming language.">
<title>inputValue property - ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">inputValue property</li>
</ol>
<div class="self-name">inputValue</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">inputValue</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">inputValue</span>
<div class="features"><span class="feature">getter/setter pair</span></div>
</section>
<section class="desc markdown">
<p>The current input value of the connection link input.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">String inputValue = &#39;&#39;;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">inputValue property</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the loadSettings method from the ReceiveScreenState class, for the Dart programming language.">
<title>loadSettings method - ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">loadSettings method</li>
</ol>
<div class="self-name">loadSettings</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">loadSettings</span> method
</h1></div>
<section class="multi-line-signature">
<span class="returntype"><a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
<span class="name ">loadSettings</span>(<wbr>)
</section>
<section class="desc markdown">
<p>Loads the app origin from the shared preferences.</p>
<p>If the app origin is not present in the shared preferences, it sets the
default value to 'wss://caesar-transfer-iu.shuttleapp.rs'.</p>
<p>Returns a <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a> that completes with no value.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">Future&lt;void&gt; loadSettings() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
appOrigin = prefs.getString(&#39;app_origin&#39;) ??
&#39;wss:&#47;&#47;caesar-transfer-iu.shuttleapp.rs&#39;; &#47;&#47; Load the app origin
}</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">loadSettings method</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the myController property from the ReceiveScreenState class, for the Dart programming language.">
<title>myController property - ReceiveScreenState class - receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">pages&#47;receive_screen.dart</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">myController property</li>
</ol>
<div class="self-name">myController</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_receive_screen&#47;ReceiveScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">myController</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/widgets/TextEditingController-class.html">TextEditingController</a>
<span class="name ">myController</span>
<div class="features"><span class="feature">final</span></div>
</section>
<section class="desc markdown">
<p>Text editing controller for the connection link input.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">final myController = TextEditingController();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_receive_screen/pages_receive_screen-library.html">receive_screen</a></li>
<li><a href="../../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
<li class="self-crumb">myController property</li>
</ol>
<h5>ReceiveScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,14 @@
<ol>
<li class="section-title"><a href="pages_receive_screen/pages_receive_screen-library.html#classes">Classes</a></li>
<li><a href="pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></li>
<li><a href="pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></li>
</ol>

View file

@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="receive_screen library API docs, for the Dart programming language.">
<title>receive_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/receive_screen.dart</li>
</ol>
<div class="self-name">receive_screen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="pages_receive_screen&#47;pages_receive_screen-library-sidebar.html">
<div>
<h1>
<span class="kind-library">pages/receive_screen</span>
library
</h1>
</div>
<section class="summary offset-anchor" id="classes">
<h2>Classes</h2>
<dl>
<dt id="ReceiveScreen">
<span class="name "><a href="../pages_receive_screen/ReceiveScreen-class.html">ReceiveScreen</a></span>
</dt>
<dd>
Screen for receiving files.
</dd>
<dt id="ReceiveScreenState">
<span class="name "><a href="../pages_receive_screen/ReceiveScreenState-class.html">ReceiveScreenState</a></span>
</dt>
<dd>
State for the receive screen.
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/receive_screen.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>receive_screen library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<ol>
<li class="section-title"><a href="pages_send_screen/SendScreen-class.html#constructors">Constructors</a></li>
<li><a href="pages_send_screen/SendScreen/SendScreen.html">SendScreen</a></li>
<li class="section-title inherited">
<a href="pages_send_screen/SendScreen-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="section-title"><a href="pages_send_screen/SendScreen-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="pages_send_screen/SendScreen/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_send_screen/SendScreen-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,370 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SendScreen class from the send_screen library, for the Dart programming language.">
<title>SendScreen class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li class="self-crumb">SendScreen class</li>
</ol>
<div class="self-name">SendScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;pages_send_screen-library-sidebar.html"
data-below-sidebar="pages_send_screen&#47;SendScreen-class-sidebar.html">
<div>
<h1><span class="kind-class">SendScreen</span> class
</h1></div>
<section class="desc markdown">
<p>Represents the screen for sending files.</p>
<p>This is a <a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a> that displays a screen for sending files.
It allows the user to select files to send and provides a name for the transfer.
The selected files are stored in a list and can be accessed by the <a href="../pages_send_screen/SendScreenState-class.html">SendScreenState</a>.</p>
<p>See also:</p>
<ul>
<li><a href="../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
</ul>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>SendScreen</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="SendScreen" class="callable">
<span class="name"><a href="../pages_send_screen/SendScreen/SendScreen.html">SendScreen</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span>)</span>
</dt>
<dd>
Creates a <a href="../pages_send_screen/SendScreen-class.html">SendScreen</a>.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../pages_send_screen/SendScreen/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="../pages_send_screen/SendScreenState-class.html">SendScreenState</a></span>
</span>
</dt>
<dd>
Creates a <a href="../pages_send_screen/SendScreenState-class.html">SendScreenState</a> to control the <a href="../pages_send_screen/SendScreen-class.html">SendScreen</a>.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li class="self-crumb">SendScreen class</li>
</ol>
<h5>send_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,129 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SendScreen constructor from Class SendScreen from the send_screen library, for the Dart programming language.">
<title>SendScreen constructor - SendScreen - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a></li>
<li class="self-crumb">SendScreen const constructor</li>
</ol>
<div class="self-name">SendScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">SendScreen</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">SendScreen</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Creates a <a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a>.</p>
<p>The <a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a> parameter is used to identify the <a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a> widget.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const SendScreen({super.key});</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a></li>
<li class="self-crumb">SendScreen const constructor</li>
</ol>
<h5>SendScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,139 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the SendScreen class, for the Dart programming language.">
<title>createState method - SendScreen class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates a <a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a> to control the <a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a>.</p>
<p>This method is called when a <a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a> widget is created.
It returns a new instance of <a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a>.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
SendScreenState createState() =&gt; SendScreenState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreen-class.html">SendScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>SendScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<ol>
<li class="section-title"><a href="pages_send_screen/SendScreenState-class.html#constructors">Constructors</a></li>
<li><a href="pages_send_screen/SendScreenState/SendScreenState.html">SendScreenState</a></li>
<li class="section-title">
<a href="pages_send_screen/SendScreenState-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li><a href="pages_send_screen/SendScreenState/transferName.html">transferName</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></li>
<li class="section-title"><a href="pages_send_screen/SendScreenState-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></li>
<li><a href="pages_send_screen/SendScreenState/build.html">build</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/initState.html">initState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li><a href="pages_send_screen/SendScreenState/openFilePicker.html">openFilePicker</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_send_screen/SendScreenState-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,460 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SendScreenState class from the send_screen library, for the Dart programming language.">
<title>SendScreenState class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li class="self-crumb">SendScreenState class</li>
</ol>
<div class="self-name">SendScreenState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;pages_send_screen-library-sidebar.html"
data-below-sidebar="pages_send_screen&#47;SendScreenState-class-sidebar.html">
<div>
<h1><span class="kind-class">SendScreenState</span> class
</h1></div>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../pages_send_screen/SendScreen-class.html">SendScreen</a></span>&gt;</span></li>
<li>SendScreenState</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="SendScreenState" class="callable">
<span class="name"><a href="../pages_send_screen/SendScreenState/SendScreenState.html">SendScreenState</a></span><span class="signature">()</span>
</dt>
<dd>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="context" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span>
</dt>
<dd class="inherited">
The location in the tree where this widget builds.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="mounted" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</dt>
<dd class="inherited">
Whether this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object is currently in a tree.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="transferName" class="property">
<span class="name"><a href="../pages_send_screen/SendScreenState/transferName.html">transferName</a></span>
<span class="signature">&#8596; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
Name of the transfer.
<div class="features"><span class="feature">getter/setter pair</span></div>
</dd>
<dt id="widget" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></span>
<span class="signature">&#8594; <a href="../pages_send_screen/SendScreen-class.html">SendScreen</a></span>
</dt>
<dd class="inherited">
The current configuration.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="activate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is reinserted into the tree after having been
removed via <a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="build" class="callable">
<span class="name"><a href="../pages_send_screen/SendScreenState/build.html">build</a></span><span class="signature">(<wbr><span class="parameter" id="build-param-context"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span> <span class="parameter-name">context</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></span>
</span>
</dt>
<dd>
Builds the UI for the send screen.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="deactivate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didChangeDependencies" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when a dependency of this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didUpdateWidget" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></span><span class="signature">(<wbr><span class="parameter" id="didUpdateWidget-param-oldWidget"><span>covariant</span> <span class="type-annotation"><a href="../pages_send_screen/SendScreen-class.html">SendScreen</a></span> <span class="parameter-name">oldWidget</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the widget configuration changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="dispose" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree permanently.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="initState" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/initState.html">initState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is inserted into the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="openFilePicker" class="callable">
<span class="name"><a href="../pages_send_screen/SendScreenState/openFilePicker.html">openFilePicker</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
</span>
</dt>
<dd>
Opens the file picker and adds the selected files to <code>_list</code>.
</dd>
<dt id="reassemble" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the application is reassembled during debugging, for
example during hot reload.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="setState" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></span><span class="signature">(<wbr><span class="parameter" id="setState-param-fn"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-ui/VoidCallback.html">VoidCallback</a></span> <span class="parameter-name">fn</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Notify the framework that the internal state of this object has changed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A brief description of this object, usually just the <a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a> and the
<a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li class="self-crumb">SendScreenState class</li>
</ol>
<h5>send_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,120 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SendScreenState constructor from Class SendScreenState from the send_screen library, for the Dart programming language.">
<title>SendScreenState constructor - SendScreenState - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">SendScreenState constructor</li>
</ol>
<div class="self-name">SendScreenState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">SendScreenState</span> constructor
</h1></div>
<section class="multi-line-signature">
<span class="name ">SendScreenState</span>(<wbr>)
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">SendScreenState constructor</li>
</ol>
<h5>SendScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,240 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the build method from the SendScreenState class, for the Dart programming language.">
<title>build method - SendScreenState class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">build method</li>
</ol>
<div class="self-name">build</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">build</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></span>
<span class="name ">build</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="build-param-context"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span> <span class="parameter-name">context</span></span></li>
</ol>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Builds the UI for the send screen.</p>
<p>Returns a <a href="https://api.flutter.dev/flutter/material/Scaffold-class.html">Scaffold</a> widget that contains a <a href="https://api.flutter.dev/flutter/widgets/Column-class.html">Column</a> with two children:</p>
<ul>
<li>A <a href="https://api.flutter.dev/flutter/widgets/Center-class.html">Center</a> widget that contains a <a href="https://api.flutter.dev/flutter/widgets/Stack-class.html">Stack</a> with a <a href="https://api.flutter.dev/flutter/widgets/GestureDetector-class.html">GestureDetector</a> that
handles file picking and dragging.</li>
<li>An <a href="https://api.flutter.dev/flutter/material/ElevatedButton-class.html">ElevatedButton</a> that triggers the transfer when pressed.</li>
</ul>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
Widget build(BuildContext context) {
return Scaffold(
&#47;&#47; Set the background color of the scaffold.
backgroundColor: Constants.backColor,
&#47;&#47; Build the body of the scaffold.
body: Column(
&#47;&#47; Align the children vertically to the center.
mainAxisAlignment: MainAxisAlignment.center,
children: [
&#47;&#47; Build the file picking and dragging UI.
Center(
child: Stack(
children: [
&#47;&#47; Build the gesture detector.
GestureDetector(
&#47;&#47; Handle file picking when the user taps.
onTap: openFilePicker,
&#47;&#47; Handle file dragging.
child: DropTarget(
&#47;&#47; Add the selected files to the list when the user drops files.
onDragDone: (detail) {
setState(() {
_list.addAll(detail.files);
});
},
&#47;&#47; Show the add icon when the user drags files over the drop area.
onDragEntered: (detail) {
setState(() {
_dragging = true;
});
},
&#47;&#47; Hide the add icon when the user stops dragging files.
onDragExited: (detail) {
setState(() {
_dragging = false;
});
},
&#47;&#47; Build the drop area UI.
child: Column(
children: [
&#47;&#47; Build the circular container for the drop area.
Container(
height: 200,
width: 200,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Constants.textColor),
&#47;&#47; Show the add icon when the user is dragging files.
child: _dragging
? const Center(
child: Icon(
Icons.add_rounded,
color: Constants.highlightColor,
size: 200,
),
)
&#47;&#47; Show the upload icon when the user is not dragging files.
: const Center(
child: Icon(
Icons.upload_rounded,
color: Constants.highlightColor,
size: 200,
),
),
),
&#47;&#47; Add some spacing between the drop area and the send button.
const SizedBox(height: 16),
],
),
),
),
],
),
),
&#47;&#47; Build the send button.
ElevatedButton(
style: ElevatedButton.styleFrom(
&#47;&#47; Set the background color of the button.
backgroundColor: Constants.textColor,
&#47;&#47; Set the text color of the button.
foregroundColor: Constants.backColor,
&#47;&#47; Set the shape of the button.
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20),
),
),
&#47;&#47; Trigger the transfer when the user presses the button.
onPressed: () {
_startTransfer();
},
&#47;&#47; Set the text of the button.
child: const Text(&quot;Send&quot;),
),
],
),
);
}</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">build method</li>
</ol>
<h5>SendScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,143 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the openFilePicker method from the SendScreenState class, for the Dart programming language.">
<title>openFilePicker method - SendScreenState class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">openFilePicker method</li>
</ol>
<div class="self-name">openFilePicker</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">openFilePicker</span> method
</h1></div>
<section class="multi-line-signature">
<span class="returntype"><a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
<span class="name ">openFilePicker</span>(<wbr>)
</section>
<section class="desc markdown">
<p>Opens the file picker and adds the selected files to <code>_list</code>.</p>
<p>See also:</p>
<ul>
<li><code>FilePicker.platform.pickFiles</code></li>
</ul>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">Future&lt;void&gt; openFilePicker() async {
FilePickerResult? result = await FilePicker.platform.pickFiles(
allowMultiple: true, &#47;&#47; Allow selecting multiple files
);
if (result != null) {
_list.addAll(result.xFiles);
}
}</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">openFilePicker method</li>
</ol>
<h5>SendScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the transferName property from the SendScreenState class, for the Dart programming language.">
<title>transferName property - SendScreenState class - send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">pages&#47;send_screen.dart</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">transferName property</li>
</ol>
<div class="self-name">transferName</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_send_screen&#47;SendScreenState-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">transferName</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">transferName</span>
<div class="features"><span class="feature">getter/setter pair</span></div>
</section>
<section class="desc markdown">
<p>Name of the transfer.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">String transferName = &#39;&#39;;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_send_screen/pages_send_screen-library.html">send_screen</a></li>
<li><a href="../../pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
<li class="self-crumb">transferName property</li>
</ol>
<h5>SendScreenState class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,14 @@
<ol>
<li class="section-title"><a href="pages_send_screen/pages_send_screen-library.html#classes">Classes</a></li>
<li><a href="pages_send_screen/SendScreen-class.html">SendScreen</a></li>
<li><a href="pages_send_screen/SendScreenState-class.html">SendScreenState</a></li>
</ol>

View file

@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="send_screen library API docs, for the Dart programming language.">
<title>send_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/send_screen.dart</li>
</ol>
<div class="self-name">send_screen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="pages_send_screen&#47;pages_send_screen-library-sidebar.html">
<div>
<h1>
<span class="kind-library">pages/send_screen</span>
library
</h1>
</div>
<section class="summary offset-anchor" id="classes">
<h2>Classes</h2>
<dl>
<dt id="SendScreen">
<span class="name "><a href="../pages_send_screen/SendScreen-class.html">SendScreen</a></span>
</dt>
<dd>
Represents the screen for sending files.
</dd>
<dt id="SendScreenState">
<span class="name "><a href="../pages_send_screen/SendScreenState-class.html">SendScreenState</a></span>
</dt>
<dd>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/send_screen.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>send_screen library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<ol>
<li class="section-title"><a href="pages_settings_screen/SettingsScreen-class.html#constructors">Constructors</a></li>
<li><a href="pages_settings_screen/SettingsScreen/SettingsScreen.html">SettingsScreen</a></li>
<li class="section-title inherited">
<a href="pages_settings_screen/SettingsScreen-class.html#instance-properties">Properties</a>
</li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="section-title"><a href="pages_settings_screen/SettingsScreen-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="pages_settings_screen/SettingsScreen/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_settings_screen/SettingsScreen-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,366 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SettingsScreen class from the settings_screen library, for the Dart programming language.">
<title>SettingsScreen class - settings_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages&#47;settings_screen.dart</a></li>
<li class="self-crumb">SettingsScreen class</li>
</ol>
<div class="self-name">SettingsScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_settings_screen&#47;pages_settings_screen-library-sidebar.html"
data-below-sidebar="pages_settings_screen&#47;SettingsScreen-class-sidebar.html">
<div>
<h1><span class="kind-class">SettingsScreen</span> class
</h1></div>
<section class="desc markdown">
<p>Screen for displaying and editing the app's settings.</p>
<p>This screen allows the user to view and edit the app's settings.
The settings include the app environment, host, port, origin, and relay.
The settings are stored in SharedPreferences.</p>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>SettingsScreen</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="SettingsScreen" class="callable">
<span class="name"><a href="../pages_settings_screen/SettingsScreen/SettingsScreen.html">SettingsScreen</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span>)</span>
</dt>
<dd>
Constructs a <a href="../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a>.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../pages_settings_screen/SettingsScreen/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; _SettingsScreenState</span>
</span>
</dt>
<dd>
Creates the mutable state for this widget at a given location in the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">settings_screen</a></li>
<li class="self-crumb">SettingsScreen class</li>
</ol>
<h5>settings_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the SettingsScreen constructor from Class SettingsScreen from the settings_screen library, for the Dart programming language.">
<title>SettingsScreen constructor - SettingsScreen - settings_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_settings_screen/pages_settings_screen-library.html">pages&#47;settings_screen.dart</a></li>
<li><a href="../../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></li>
<li class="self-crumb">SettingsScreen const constructor</li>
</ol>
<div class="self-name">SettingsScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_settings_screen&#47;SettingsScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">SettingsScreen</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">SettingsScreen</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Constructs a <a href="../../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a>.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const SettingsScreen({Key? key}) : super(key: key);</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_settings_screen/pages_settings_screen-library.html">settings_screen</a></li>
<li><a href="../../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></li>
<li class="self-crumb">SettingsScreen const constructor</li>
</ol>
<h5>SettingsScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the SettingsScreen class, for the Dart programming language.">
<title>createState method - SettingsScreen class - settings_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_settings_screen/pages_settings_screen-library.html">pages&#47;settings_screen.dart</a></li>
<li><a href="../../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_settings_screen&#47;SettingsScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype">_SettingsScreenState</span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates the mutable state for this widget at a given location in the tree.</p>
<p>Subclasses should override this method to return a newly created
instance of their associated <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> subclass:</p>
<pre class="language-dart"><code class="language-dart">@override
State&lt;SomeWidget&gt; createState() =&gt; _SomeWidgetState();
</code></pre>
<p>The framework can call this method multiple times over the lifetime of
a <code>StatefulWidget</code>. For example, if the widget is inserted into the tree
in multiple locations, the framework will create a separate <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object
for each location. Similarly, if the widget is removed from the tree and
later inserted into the tree again, the framework will call <a href="../../pages_settings_screen/SettingsScreen/createState.html">createState</a>
again to create a fresh <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object, simplifying the lifecycle of
<a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> objects.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
_SettingsScreenState createState() =&gt; _SettingsScreenState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_settings_screen/pages_settings_screen-library.html">settings_screen</a></li>
<li><a href="../../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>SettingsScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,13 @@
<ol>
<li class="section-title"><a href="pages_settings_screen/pages_settings_screen-library.html#classes">Classes</a></li>
<li><a href="pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></li>
</ol>

View file

@ -0,0 +1,152 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="settings_screen library API docs, for the Dart programming language.">
<title>settings_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/settings_screen.dart</li>
</ol>
<div class="self-name">settings_screen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="pages_settings_screen&#47;pages_settings_screen-library-sidebar.html">
<div>
<h1>
<span class="kind-library">pages/settings_screen</span>
library
</h1>
</div>
<section class="summary offset-anchor" id="classes">
<h2>Classes</h2>
<dl>
<dt id="SettingsScreen">
<span class="name "><a href="../pages_settings_screen/SettingsScreen-class.html">SettingsScreen</a></span>
</dt>
<dd>
Screen for displaying and editing the app's settings.
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/settings_screen.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>settings_screen library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,11 @@
<ol>
</ol>

View file

@ -0,0 +1,138 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="succes_screen library API docs, for the Dart programming language.">
<title>succes_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/succes_screen.dart</li>
</ol>
<div class="self-name">succes_screen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar=""
data-below-sidebar="pages_succes_screen&#47;pages_succes_screen-library-sidebar.html">
<div>
<h1>
<span class="kind-library">pages/succes_screen</span>
library
</h1>
</div>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li class="self-crumb">pages/succes_screen.dart</li>
</ol>
<h5><span class="package-name">flutter_test_gui</span> <span class="package-kind">package</span></h5>
<ol>
<li class="section-title">Libraries</li>
<li><a href="../consts_consts/consts_consts-library.html">consts/consts</a></li>
<li><a href="../main/main-library.html">main</a></li>
<li><a href="../pages_receive_screen/pages_receive_screen-library.html">pages/receive_screen</a></li>
<li><a href="../pages_send_screen/pages_send_screen-library.html">pages/send_screen</a></li>
<li><a href="../pages_settings_screen/pages_settings_screen-library.html">pages/settings_screen</a></li>
<li><a href="../pages_succes_screen/pages_succes_screen-library.html">pages/succes_screen</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages/transfer_screen</a></li>
<li><a href="../pages_waiting_screen/pages_waiting_screen-library.html">pages/waiting_screen</a></li>
</ol>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
<h5>succes_screen library</h5>
</div><!--/sidebar-offcanvas-right-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,37 @@
<ol>
<li class="section-title"><a href="pages_transfer_screen/TransferScreen-class.html#constructors">Constructors</a></li>
<li><a href="pages_transfer_screen/TransferScreen/TransferScreen.html">TransferScreen</a></li>
<li class="section-title">
<a href="pages_transfer_screen/TransferScreen-class.html#instance-properties">Properties</a>
</li>
<li><a href="pages_transfer_screen/TransferScreen/directory.html">directory</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li><a href="pages_transfer_screen/TransferScreen/transferName.html">transferName</a></li>
<li class="section-title"><a href="pages_transfer_screen/TransferScreen-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></li>
<li><a href="pages_transfer_screen/TransferScreen/createState.html">createState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_transfer_screen/TransferScreen-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,393 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the TransferScreen class from the transfer_screen library, for the Dart programming language.">
<title>TransferScreen class - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li class="self-crumb">TransferScreen class</li>
</ol>
<div class="self-name">TransferScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;pages_transfer_screen-library-sidebar.html"
data-below-sidebar="pages_transfer_screen&#47;TransferScreen-class-sidebar.html">
<div>
<h1><span class="kind-class">TransferScreen</span> class
</h1></div>
<section class="desc markdown">
<p>Represents the screen for transferring files.</p>
<p>This is a <a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a> that displays a screen for transferring files.
It takes in two parameters:</p>
<ul>
<li><a href="../pages_transfer_screen/TransferScreen/transferName.html">transferName</a>: The name of the transfer.</li>
<li><a href="../pages_transfer_screen/TransferScreen/directory.html">directory</a>: The directory containing the files to be transferred.</li>
</ul>
</section>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree-class.html">DiagnosticableTree</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget-class.html">StatefulWidget</a></li>
<li>TransferScreen</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="TransferScreen" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreen/TransferScreen.html">TransferScreen</a></span><span class="signature">(<span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>, </span><span class="parameter" id="-param-transferName"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">transferName</span>, </span><span class="parameter" id="-param-directory"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">directory</span>}</span>)</span>
</dt>
<dd>
Creates a <a href="../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a> widget.
<div class="constructor-modifier features">const</div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="directory" class="property">
<span class="name"><a href="../pages_transfer_screen/TransferScreen/directory.html">directory</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
<div class="features"><span class="feature">final</span></div>
</dd>
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="key" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/key.html">key</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span>
</dt>
<dd class="inherited">
Controls how one widget replaces another widget in the tree.
<div class="features"><span class="feature">final</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="transferName" class="property">
<span class="name"><a href="../pages_transfer_screen/TransferScreen/transferName.html">transferName</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
<div class="features"><span class="feature">final</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="createElement" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/StatefulWidget/createElement.html">createElement</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a></span>
</span>
</dt>
<dd class="inherited">
Creates a <a href="https://api.flutter.dev/flutter/widgets/StatefulElement-class.html">StatefulElement</a> to manage this widget's location in the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="createState" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreen/createState.html">createState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="../pages_transfer_screen/TransferScreenState-class.html">TransferScreenState</a></span>
</span>
</dt>
<dd>
Creates the mutable state for this widget at a given location in the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="debugDescribeChildren" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/debugDescribeChildren.html">debugDescribeChildren</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/List-class.html">List</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>&gt;</span></span>
</span>
</dt>
<dd class="inherited">
Returns a list of <code>DiagnosticsNode</code> objects describing this node's
children.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringDeep" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringDeep.html">toStringDeep</a></span><span class="signature">(<wbr><span class="parameter" id="toStringDeep-param-prefixLineOne">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">prefixLineOne</span> = <span class="default-value">&#39;&#39;</span>, </span><span class="parameter" id="toStringDeep-param-prefixOtherLines"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">prefixOtherLines</span>, </span><span class="parameter" id="toStringDeep-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a string representation of this node and its descendants.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShallow" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticableTree/toStringShallow.html">toStringShallow</a></span><span class="signature">(<wbr><span class="parameter" id="toStringShallow-param-joiner">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">joiner</span> = <span class="default-value">&#39;, &#39;</span>, </span><span class="parameter" id="toStringShallow-param-minLevel"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.debug</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
Returns a one-line detailed description of the object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A short, textual description of this widget.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/Widget/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li class="self-crumb">TransferScreen class</li>
</ol>
<h5>transfer_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,134 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the TransferScreen constructor from Class TransferScreen from the transfer_screen library, for the Dart programming language.">
<title>TransferScreen constructor - TransferScreen - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">TransferScreen const constructor</li>
</ol>
<div class="self-name">TransferScreen</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;TransferScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-constructor">TransferScreen</span> constructor
</h1></div>
<section class="multi-line-signature">
const
<span class="name ">TransferScreen</span>(<wbr><ol class="parameter-list"><li><span class="parameter" id="-param-key">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/Key-class.html">Key</a>?</span> <span class="parameter-name">key</span>, </span></li>
<li><span class="parameter" id="-param-transferName"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">transferName</span>, </span></li>
<li><span class="parameter" id="-param-directory"><span>required</span> <span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">directory</span>}</span></li>
</ol>)
</section>
<section class="desc markdown">
<p>Creates a <a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a> widget.</p>
<p>The <a href="../../pages_transfer_screen/TransferScreen/transferName.html">transferName</a> and <a href="../../pages_transfer_screen/TransferScreen/directory.html">directory</a> parameters are required.</p>
<p>The <code>key</code> parameter is optional.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">const TransferScreen(
{Key? key, required this.transferName, required this.directory})
: super(key: key);</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">TransferScreen const constructor</li>
</ol>
<h5>TransferScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-left-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,149 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the createState method from the TransferScreen class, for the Dart programming language.">
<title>createState method - TransferScreen class - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<div class="self-name">createState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;TransferScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-method">createState</span> method
</h1></div>
<section class="multi-line-signature">
<div>
<ol class="annotation-list">
<li>@<a href="https://api.flutter.dev/flutter/dart-core/override-constant.html">override</a></li>
</ol>
</div>
<span class="returntype"><a href="../../pages_transfer_screen/TransferScreenState-class.html">TransferScreenState</a></span>
<span class="name ">createState</span>(<wbr>)
<div class="features"><span class="feature">override</span></div>
</section>
<section class="desc markdown">
<p>Creates the mutable state for this widget at a given location in the tree.</p>
<p>Subclasses should override this method to return a newly created
instance of their associated <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> subclass:</p>
<pre class="language-dart"><code class="language-dart">@override
State&lt;SomeWidget&gt; createState() =&gt; _SomeWidgetState();
</code></pre>
<p>The framework can call this method multiple times over the lifetime of
a <code>StatefulWidget</code>. For example, if the widget is inserted into the tree
in multiple locations, the framework will create a separate <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object
for each location. Similarly, if the widget is removed from the tree and
later inserted into the tree again, the framework will call <a href="../../pages_transfer_screen/TransferScreen/createState.html">createState</a>
again to create a fresh <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object, simplifying the lifecycle of
<a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> objects.</p>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">@override
TransferScreenState createState() =&gt; TransferScreenState();</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">createState method</li>
</ol>
<h5>TransferScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the directory property from the TransferScreen class, for the Dart programming language.">
<title>directory property - TransferScreen class - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">directory property</li>
</ol>
<div class="self-name">directory</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;TransferScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">directory</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">directory</span>
<div class="features"><span class="feature">final</span></div>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">final String directory;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">directory property</li>
</ol>
<h5>TransferScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the transferName property from the TransferScreen class, for the Dart programming language.">
<title>transferName property - TransferScreen class - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../../static-assets/github.css?v1">
<link rel="stylesheet" href="../../static-assets/styles.css?v1">
<link rel="icon" href="../../static-assets/favicon.png?v1">
</head>
<body data-base-href="../../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">transferName property</li>
</ol>
<div class="self-name">transferName</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;TransferScreen-class-sidebar.html"
data-below-sidebar="">
<div>
<h1><span class="kind-property">transferName</span> property
</h1></div>
<section class="multi-line-signature">
<a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>
<span class="name ">transferName</span>
<div class="features"><span class="feature">final</span></div>
</section>
<section class="summary source-code" id="source">
<h2><span>Implementation</span></h2>
<pre class="language-dart"><code class="language-dart">final String transferName;</code></pre>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../../index.html">flutter_test_gui</a></li>
<li><a href="../../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li><a href="../../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></li>
<li class="self-crumb">transferName property</li>
</ol>
<h5>TransferScreen class</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div><!--/.sidebar-offcanvas-->
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../../static-assets/highlight.pack.js?v1"></script>
<script src="../../static-assets/docs.dart.js"></script>
</body>
</html>

View file

@ -0,0 +1,45 @@
<ol>
<li class="section-title"><a href="pages_transfer_screen/TransferScreenState-class.html#constructors">Constructors</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/TransferScreenState.html">TransferScreenState</a></li>
<li class="section-title">
<a href="pages_transfer_screen/TransferScreenState-class.html#instance-properties">Properties</a>
</li>
<li><a href="pages_transfer_screen/TransferScreenState/appOrigin.html">appOrigin</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/inputValue.html">inputValue</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></li>
<li class="section-title"><a href="pages_transfer_screen/TransferScreenState-class.html#instance-methods">Methods</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/build.html">build</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/callStartReceiver.html">callStartReceiver</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/initState.html">initState</a></li>
<li><a href="pages_transfer_screen/TransferScreenState/loadSettings.html">loadSettings</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></li>
<li class="section-title inherited"><a href="pages_transfer_screen/TransferScreenState-class.html#operators">Operators</a></li>
<li class="inherited"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></li>
</ol>

View file

@ -0,0 +1,485 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no">
<meta name="description" content="API docs for the TransferScreenState class from the transfer_screen library, for the Dart programming language.">
<title>TransferScreenState class - transfer_screen library - Dart API</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,300;0,400;0,500;0,700;1,400&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@24,400,0,0" rel="stylesheet">
<link rel="stylesheet" href="../static-assets/github.css?v1">
<link rel="stylesheet" href="../static-assets/styles.css?v1">
<link rel="icon" href="../static-assets/favicon.png?v1">
</head>
<body data-base-href="../" data-using-base-href="false" class="light-theme">
<div id="overlay-under-drawer"></div>
<header id="title">
<span id="sidenav-left-toggle" class="material-symbols-outlined" role="button" tabindex="0">menu</span>
<ol class="breadcrumbs gt-separated dark hidden-xs">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">pages&#47;transfer_screen.dart</a></li>
<li class="self-crumb">TransferScreenState class</li>
</ol>
<div class="self-name">TransferScreenState</div>
<form class="search navbar-right" role="search">
<input type="text" id="search-box" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
<div class="toggle" id="theme-button" title="Toggle brightness">
<label for="theme">
<input type="checkbox" id="theme" value="light-theme">
<span id="dark-theme-button" class="material-symbols-outlined">
dark_mode
</span>
<span id="light-theme-button" class="material-symbols-outlined">
light_mode
</span>
</label>
</div>
</header>
<main>
<div
id="dartdoc-main-content"
class="main-content"
data-above-sidebar="pages_transfer_screen&#47;pages_transfer_screen-library-sidebar.html"
data-below-sidebar="pages_transfer_screen&#47;TransferScreenState-class-sidebar.html">
<div>
<h1><span class="kind-class">TransferScreenState</span> class
</h1></div>
<section>
<dl class="dl-horizontal">
<dt>Inheritance</dt>
<dd>
<ul class="gt-separated dark clazz-relationships">
<li><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></li>
<li><a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a><span class="signature">&lt;<wbr><span class="type-parameter"><a href="../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></span>&gt;</span></li>
<li>TransferScreenState</li>
</ul>
</dd>
</dl>
</section>
<section class="summary offset-anchor" id="constructors">
<h2>Constructors</h2>
<dl class="constructor-summary-list">
<dt id="TransferScreenState" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/TransferScreenState.html">TransferScreenState</a></span><span class="signature">()</span>
</dt>
<dd>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-properties">
<h2>Properties</h2>
<dl class="properties">
<dt id="appOrigin" class="property">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/appOrigin.html">appOrigin</a></span>
<span class="signature">&#8596; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
<div class="features"><span class="feature">getter/setter pair</span></div>
</dd>
<dt id="context" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/context.html">context</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span>
</dt>
<dd class="inherited">
The location in the tree where this widget builds.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="hashCode" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/int-class.html">int</a></span>
</dt>
<dd class="inherited">
The hash code for this object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="inputValue" class="property">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/inputValue.html">inputValue</a></span>
<span class="signature">&#8596; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</dt>
<dd>
<div class="features"><span class="feature">getter/setter pair</span></div>
</dd>
<dt id="mounted" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/mounted.html">mounted</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</dt>
<dd class="inherited">
Whether this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object is currently in a tree.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="runtimeType" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a></span>
<span class="signature">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/Type-class.html">Type</a></span>
</dt>
<dd class="inherited">
A representation of the runtime type of the object.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
<dt id="widget" class="property inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/widget.html">widget</a></span>
<span class="signature">&#8594; <a href="../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></span>
</dt>
<dd class="inherited">
The current configuration.
<div class="features"><span class="feature">no setter</span><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor"
id="instance-methods">
<h2>Methods</h2>
<dl class="callables">
<dt id="activate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/activate.html">activate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is reinserted into the tree after having been
removed via <a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="build" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/build.html">build</a></span><span class="signature">(<wbr><span class="parameter" id="build-param-context"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/widgets/BuildContext-class.html">BuildContext</a></span> <span class="parameter-name">context</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/widgets/Widget-class.html">Widget</a></span>
</span>
</dt>
<dd>
Builds the widget tree for the TransferScreen.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="callStartReceiver" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/callStartReceiver.html">callStartReceiver</a></span><span class="signature">(<wbr><span class="parameter" id="callStartReceiver-param-appOrigin"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span> <span class="parameter-name">appOrigin</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
</span>
</dt>
<dd>
Calls the start transfer function with the given <code>appOrigin</code>.
</dd>
<dt id="deactivate" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/deactivate.html">deactivate</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="debugFillProperties" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/debugFillProperties.html">debugFillProperties</a></span><span class="signature">(<wbr><span class="parameter" id="debugFillProperties-param-properties"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticPropertiesBuilder-class.html">DiagnosticPropertiesBuilder</a></span> <span class="parameter-name">properties</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Add additional properties associated with the node.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didChangeDependencies" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didChangeDependencies.html">didChangeDependencies</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when a dependency of this <a href="https://api.flutter.dev/flutter/widgets/State-class.html">State</a> object changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="didUpdateWidget" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/didUpdateWidget.html">didUpdateWidget</a></span><span class="signature">(<wbr><span class="parameter" id="didUpdateWidget-param-oldWidget"><span>covariant</span> <span class="type-annotation"><a href="../pages_transfer_screen/TransferScreen-class.html">TransferScreen</a></span> <span class="parameter-name">oldWidget</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the widget configuration changes.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="dispose" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/dispose.html">dispose</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called when this object is removed from the tree permanently.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="initState" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/initState.html">initState</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd>
Called when this object is inserted into the tree.
<div class="features"><span class="feature">override</span></div>
</dd>
<dt id="loadSettings" class="callable">
<span class="name"><a href="../pages_transfer_screen/TransferScreenState/loadSettings.html">loadSettings</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-async/Future-class.html">Future</a><span class="signature">&lt;<wbr><span class="type-parameter">void</span>&gt;</span></span>
</span>
</dt>
<dd>
Loads the settings from the SharedPreferences.
</dd>
<dt id="noSuchMethod" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/noSuchMethod.html">noSuchMethod</a></span><span class="signature">(<wbr><span class="parameter" id="noSuchMethod-param-invocation"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Invocation-class.html">Invocation</a></span> <span class="parameter-name">invocation</span></span>)
<span class="returntype parameter">&#8594; dynamic</span>
</span>
</dt>
<dd class="inherited">
Invoked when a nonexistent method or property is accessed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="reassemble" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/reassemble.html">reassemble</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Called whenever the application is reassembled during debugging, for
example during hot reload.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="setState" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/widgets/State/setState.html">setState</a></span><span class="signature">(<wbr><span class="parameter" id="setState-param-fn"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-ui/VoidCallback.html">VoidCallback</a></span> <span class="parameter-name">fn</span></span>)
<span class="returntype parameter">&#8594; void</span>
</span>
</dt>
<dd class="inherited">
Notify the framework that the internal state of this object has changed.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toDiagnosticsNode" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toDiagnosticsNode.html">toDiagnosticsNode</a></span><span class="signature">(<wbr><span class="parameter" id="toDiagnosticsNode-param-name">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a>?</span> <span class="parameter-name">name</span>, </span><span class="parameter" id="toDiagnosticsNode-param-style"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticsTreeStyle.html">DiagnosticsTreeStyle</a>?</span> <span class="parameter-name">style</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode-class.html">DiagnosticsNode</a></span>
</span>
</dt>
<dd class="inherited">
Returns a debug representation of the object that is used by debugging
tools and by <a href="https://api.flutter.dev/flutter/foundation/DiagnosticsNode/toStringDeep.html">DiagnosticsNode.toStringDeep</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toString" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toString.html">toString</a></span><span class="signature">(<wbr><span class="parameter" id="toString-param-minLevel">{<span class="type-annotation"><a href="https://api.flutter.dev/flutter/foundation/DiagnosticLevel.html">DiagnosticLevel</a></span> <span class="parameter-name">minLevel</span> = <span class="default-value">DiagnosticLevel.info</span>}</span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A string representation of this object.
<div class="features"><span class="feature">inherited</span></div>
</dd>
<dt id="toStringShort" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/foundation/Diagnosticable/toStringShort.html">toStringShort</a></span><span class="signature">(<wbr>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/String-class.html">String</a></span>
</span>
</dt>
<dd class="inherited">
A brief description of this object, usually just the <a href="https://api.flutter.dev/flutter/dart-core/Object/runtimeType.html">runtimeType</a> and the
<a href="https://api.flutter.dev/flutter/dart-core/Object/hashCode.html">hashCode</a>.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
<section
class="summary offset-anchor inherited"
id="operators">
<h2>Operators</h2>
<dl class="callables">
<dt id="operator ==" class="callable inherited">
<span class="name"><a href="https://api.flutter.dev/flutter/dart-core/Object/operator_equals.html">operator ==</a></span><span class="signature">(<wbr><span class="parameter" id="==-param-other"><span class="type-annotation"><a href="https://api.flutter.dev/flutter/dart-core/Object-class.html">Object</a></span> <span class="parameter-name">other</span></span>)
<span class="returntype parameter">&#8594; <a href="https://api.flutter.dev/flutter/dart-core/bool-class.html">bool</a></span>
</span>
</dt>
<dd class="inherited">
The equality operator.
<div class="features"><span class="feature">inherited</span></div>
</dd>
</dl>
</section>
</div> <!-- /.main-content -->
<div id="dartdoc-sidebar-left" class="sidebar sidebar-offcanvas-left">
<!-- The search input and breadcrumbs below are only responsively visible at low resolutions. -->
<header id="header-search-sidebar" class="hidden-l">
<form class="search-sidebar" role="search">
<input type="text" id="search-sidebar" autocomplete="off" disabled class="form-control typeahead" placeholder="Loading search...">
</form>
</header>
<ol class="breadcrumbs gt-separated dark hidden-l" id="sidebar-nav">
<li><a href="../index.html">flutter_test_gui</a></li>
<li><a href="../pages_transfer_screen/pages_transfer_screen-library.html">transfer_screen</a></li>
<li class="self-crumb">TransferScreenState class</li>
</ol>
<h5>transfer_screen library</h5>
<div id="dartdoc-sidebar-left-content"></div>
</div>
<div id="dartdoc-sidebar-right" class="sidebar sidebar-offcanvas-right">
</div><!--/.sidebar-offcanvas-->
</main>
<footer>
<span class="no-break">
flutter_test_gui
1.0.0+1
</span>
</footer>
<script src="../static-assets/highlight.pack.js?v1"></script>
<script src="../static-assets/docs.dart.js"></script>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show more