فهرست منبع

Fix liveview launch (#3145)

Evan Almloff 8 ماه پیش
والد
کامیت
5d99889728
2فایلهای تغییر یافته به همراه8 افزوده شده و 21 حذف شده
  1. 0 18
      packages/dioxus/src/launch.rs
  2. 8 3
      packages/liveview/src/launch.rs

+ 0 - 18
packages/dioxus/src/launch.rs

@@ -19,24 +19,6 @@ pub type LaunchFn = fn(fn() -> Element, Vec<ContextFn>, Vec<Box<dyn Any>>);
 /// A context function is a Send and Sync closure that returns a boxed trait object
 pub type ContextFn = Box<dyn Fn() -> Box<dyn Any> + Send + Sync + 'static>;
 
-#[cfg(any(
-    feature = "fullstack",
-    feature = "static-generation",
-    feature = "liveview"
-))]
-type ValidContext = SendContext;
-
-#[cfg(not(any(
-    feature = "fullstack",
-    feature = "static-generation",
-    feature = "liveview"
-)))]
-type ValidContext = UnsendContext;
-
-type SendContext = dyn Fn() -> Box<dyn Any + Send + Sync> + Send + Sync + 'static;
-
-type UnsendContext = dyn Fn() -> Box<dyn Any> + 'static;
-
 #[allow(clippy::redundant_closure)] // clippy doesnt doesn't understand our coercion to fn
 impl LaunchBuilder {
     /// Create a new builder for your application. This will create a launch configuration for the current platform based on the features enabled on the `dioxus` crate.

+ 8 - 3
packages/liveview/src/launch.rs

@@ -6,16 +6,21 @@ pub type Config = crate::Config<axum::Router>;
 /// Launches the WebView and runs the event loop, with configuration and root props.
 pub fn launch(
     root: fn() -> Element,
-    contexts: Vec<Box<dyn Fn() -> Box<dyn Any + Send + Sync> + Send + Sync>>,
-    platform_config: Config,
+    contexts: Vec<Box<dyn Fn() -> Box<dyn Any> + Send + Sync>>,
+    platform_configs: Vec<Box<dyn Any>>,
 ) -> ! {
     #[cfg(feature = "multi-thread")]
     let mut builder = tokio::runtime::Builder::new_multi_thread();
     #[cfg(not(feature = "multi-thread"))]
     let mut builder = tokio::runtime::Builder::new_current_thread();
 
+    let config = platform_configs
+        .into_iter()
+        .find_map(|cfg| cfg.downcast::<Config>().ok().map(|cfg| *cfg))
+        .unwrap_or_default();
+
     builder.enable_all().build().unwrap().block_on(async move {
-        platform_config
+        config
             .with_virtual_dom(move || {
                 let mut virtual_dom = VirtualDom::new(root);