* improve documentation for the fullstack server context * Add a section about axum integration to the crate root docs * make serve_dioxus_application accept the cfg builder directly * remove unused server_fn module * improve fullstack config docs * improve documentation for the server function macro * fix axum router extension link * Fix doc tests * Fix launch builder * Simplify the launch builder * don't re-export launch in the prelude * refactor fullstack launch * Fix fullstack launch builder * Update static generation with the new builder api * fix some formatting/overly broad launch replacements * fix custom menu example * fix fullstack/static generation examples * Fix static generation launch * A few small formatting fixes * Fix a few doc tests * implement LaunchConfig for serve configs * fix fullstack launch with separate web and server launch methods * fix check with all features * dont expose inner core module * clippy and check * fix readme --------- Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
91 lines
2.4 KiB
Rust
91 lines
2.4 KiB
Rust
use anyhow::Result;
|
|
use dioxus::mobile::Config;
|
|
use dioxus::prelude::*;
|
|
|
|
#[cfg(target_os = "android")]
|
|
use dioxus::mobile::wry::android_binding;
|
|
|
|
#[cfg(target_os = "android")]
|
|
fn init_logging() {
|
|
android_logger::init_once(
|
|
android_logger::Config::default()
|
|
.with_min_level(log::Level::Trace)
|
|
.with_tag("mobile-demo"),
|
|
);
|
|
}
|
|
|
|
#[cfg(not(target_os = "android"))]
|
|
fn init_logging() {
|
|
env_logger::init();
|
|
}
|
|
|
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
|
fn stop_unwind<F: FnOnce() -> T, T>(f: F) -> T {
|
|
match std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) {
|
|
Ok(t) => t,
|
|
Err(err) => {
|
|
eprintln!("attempt to unwind out of `rust` with err: {:?}", err);
|
|
std::process::abort()
|
|
}
|
|
}
|
|
}
|
|
|
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
|
fn _start_app() {
|
|
stop_unwind(|| main().unwrap());
|
|
}
|
|
|
|
#[no_mangle]
|
|
#[inline(never)]
|
|
#[cfg(any(target_os = "android", target_os = "ios"))]
|
|
pub extern "C" fn start_app() {
|
|
#[cfg(target_os = "android")]
|
|
android_binding!(com_example, mobile_demo, _start_app);
|
|
#[cfg(target_os = "ios")]
|
|
_start_app()
|
|
}
|
|
|
|
pub fn main() -> Result<()> {
|
|
init_logging();
|
|
|
|
// Right now we're going through dioxus-desktop but we'd like to go through dioxus-mobile
|
|
// That will seed the index.html with some fixes that prevent the page from scrolling/zooming etc
|
|
dioxus::LaunchBuilder::mobile()
|
|
.with_cfg(
|
|
// Note that we have to disable the viewport goofiness of the browser.
|
|
// Dioxus_mobile should do this for us
|
|
Config::default().with_custom_index(include_str!("index.html").to_string()),
|
|
)
|
|
.launch(app);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
fn app() -> Element {
|
|
let mut items = use_signal(|| vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
|
|
|
|
log::debug!("Hello from the app");
|
|
|
|
rsx! {
|
|
div {
|
|
h1 { "Hello, Mobile" }
|
|
div {
|
|
margin_left: "auto",
|
|
margin_right: "auto",
|
|
width: "200px",
|
|
padding: "10px",
|
|
border: "1px solid black",
|
|
button {
|
|
onclick: move |_| {
|
|
items.push(items.len());
|
|
},
|
|
"Add item"
|
|
}
|
|
for item in items.iter() {
|
|
div { "- {item}" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|