mirror of
https://github.com/twonlyapp/twonly-app.git
synced 2026-06-13 10:42:12 +00:00
fix user discovery not working some times
This commit is contained in:
parent
1d3b8dbd8a
commit
34ecb66e0b
2 changed files with 11 additions and 7 deletions
|
|
@ -7,9 +7,10 @@ use protocols::user_discovery::traits::{AnnouncedUser, OtherPromotion};
|
||||||
|
|
||||||
use crate::error::{Result, TwonlyError};
|
use crate::error::{Result, TwonlyError};
|
||||||
use crate::{callback_generator, frb_generated::StreamSink};
|
use crate::{callback_generator, frb_generated::StreamSink};
|
||||||
use std::sync::{Arc, OnceLock};
|
use std::sync::Arc;
|
||||||
|
|
||||||
static FLUTTER_CALLBACKS: OnceLock<FlutterCallbacks> = OnceLock::new();
|
static FLUTTER_CALLBACKS: std::sync::RwLock<Option<FlutterCallbacks>> =
|
||||||
|
std::sync::RwLock::new(None);
|
||||||
|
|
||||||
// This will also generate the function init_flutter_callbacks which MUST be called from Flutter to initialize the callbacks
|
// This will also generate the function init_flutter_callbacks which MUST be called from Flutter to initialize the callbacks
|
||||||
callback_generator! {
|
callback_generator! {
|
||||||
|
|
@ -39,8 +40,10 @@ callback_generator! {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn get_callbacks() -> Result<&'static FlutterCallbacks> {
|
pub(crate) fn get_callbacks() -> Result<FlutterCallbacks> {
|
||||||
FLUTTER_CALLBACKS
|
FLUTTER_CALLBACKS
|
||||||
.get()
|
.read()
|
||||||
|
.unwrap()
|
||||||
|
.clone()
|
||||||
.ok_or(TwonlyError::MissingCallbackInitialization)
|
.ok_or(TwonlyError::MissingCallbackInitialization)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ macro_rules! callback_generator {
|
||||||
) => {
|
) => {
|
||||||
// 1. Generate the Nested Sub-Structs
|
// 1. Generate the Nested Sub-Structs
|
||||||
$(
|
$(
|
||||||
|
#[derive(Clone)]
|
||||||
pub(crate) struct $sub_struct_name {
|
pub(crate) struct $sub_struct_name {
|
||||||
$(
|
$(
|
||||||
pub(crate) $fn_name: Arc<dyn Fn($($input),*) -> DartFnFuture<$output> + Send + Sync + 'static>,
|
pub(crate) $fn_name: Arc<dyn Fn($($input),*) -> DartFnFuture<$output> + Send + Sync + 'static>,
|
||||||
|
|
@ -21,6 +22,7 @@ macro_rules! callback_generator {
|
||||||
)*
|
)*
|
||||||
|
|
||||||
// 2. Generate the Main Container Struct
|
// 2. Generate the Main Container Struct
|
||||||
|
#[derive(Clone)]
|
||||||
pub(crate) struct $struct_name {
|
pub(crate) struct $struct_name {
|
||||||
$(
|
$(
|
||||||
pub(crate) $sub_struct_field: $sub_struct_name,
|
pub(crate) $sub_struct_field: $sub_struct_name,
|
||||||
|
|
@ -48,9 +50,8 @@ macro_rules! callback_generator {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Use the static global strictly named FLUTTER_CALLBACKS
|
// Use the static global strictly named FLUTTER_CALLBACKS
|
||||||
FLUTTER_CALLBACKS.set(callbacks).unwrap_or_else(|_| {
|
let mut lock = FLUTTER_CALLBACKS.write().unwrap();
|
||||||
println!("Callbacks were already initialized!");
|
*lock = Some(callbacks);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue