14 个版本
新版本 0.8.0 | 2024 年 8 月 12 日 |
---|---|
0.6.0 | 2022 年 1 月 15 日 |
0.5.0 | 2021 年 3 月 3 日 |
0.4.0 | 2020 年 7 月 2 日 |
0.2.0 | 2019 年 10 月 5 日 |
#2 in #loading
203 个月下载量
在 3 crates 中使用
510KB
891 行
欢迎使用 cursive-async-view 👋
本项目为 gyscos/cursive 视图提供带有加载界面的包装视图。加载界面将在包装视图完全加载后消失。这对于显示可能需要很长时间构建或依赖于网络等的视图非常有用。
它看起来是什么样子? demo
展开查看
用法
只需将其添加到您的 Cargo.toml
[dependencies]
cursive-async-view = "^0"
不带进度信息的异步视图加载
如果您无法在视图数据长时间准备期间显示进度,您可以将该视图的创建包装在 AsyncView
中。这将显示加载动画,直到内部视图准备好绘制。
use std::time::{Instant, Duration};
use cursive::{views::TextView, Cursive, CursiveExt};
use cursive_async_view::{AsyncView, AsyncState};
let mut siv = Cursive::default();
let instant = Instant::now();
let async_view = AsyncView::new(&mut siv, move || {
if instant.elapsed() > Duration::from_secs(10) {
AsyncState::Available(
TextView::new("Yay!\n\nThe content has loaded!")
)
} else {
AsyncState::Pending
}
});
siv.add_layer(async_view);
// siv.run();
有关详细说明,请参阅 AsyncView
结构级别的文档,或查阅源代码存储库中的 simple
示例。
如果您需要在子视图构建期间执行阻塞操作,您可以查看备选的 new_with_bg_task
构造函数。
use std::thread;
use std::time::Duration;
use cursive::views::TextView;
use cursive::{Cursive, CursiveExt};
use cursive_async_view::AsyncView;
let mut siv = Cursive::default();
let async_view = AsyncView::new_with_bg_creator(&mut siv, move || {
// this function is executed in a background thread, so we can block
// here as long as we like
thread::sleep(Duration::from_secs(10));
// enough blocking, let's show the content
Ok("Yeet! It worked 🖖")
}, TextView::new); // create a text view from the string
siv.add_layer(async_view);
// siv.run();
有关详细说明,请参阅 AsyncView
结构级别的文档,或查阅源代码存储库中的 bg_task
示例。
带有进度条的异步视图加载
如果您有关长时间视图创建进度的信息,您可以将创建包装在 AsyncProgressView
中。这将显示进度条,直到内部视图准备好绘制。
use cursive::{views::TextView, Cursive, CursiveExt};
use cursive_async_view::{AsyncProgressView, AsyncProgressState};
let mut siv = Cursive::default();
let start = std::time::Instant::now();
let async_view = AsyncProgressView::new(&mut siv, move || {
if start.elapsed().as_secs() < 3 {
AsyncProgressState::Pending(start.elapsed().as_secs() as f32 / 3f32)
} else {
AsyncProgressState::Available(TextView::new("Finally it loaded!"))
}
});
siv.add_layer(async_view);
// siv.run();
变更日志
变更日志位于一个 单独的文件 中,包含即将推出的版本的更改和迁移提示。
故障排除
如果您发现任何错误/意外的行为,或者您对未来的更改有建议,请创建一个问题描述当前行为和您的期望。
开发
待定
运行测试
只需运行
$ cargo test
即可执行所有可用的测试。
shields.io 端点
shields.io 端点生成在 ./target/shields
文件夹内。它们被用于本 README 文件。
作者
Fin Christensen
:octocat:
@fin-ger
🐘@fin_ger@weirder.earth
🐦@fin_ger_github
Johannes Wünsche
:octocat:
@jwuensche
🐘@fredowald@mastodon.social
🐦@Fredowald
显示您的支持
如果这个项目对您有帮助,请给一个 ⭐ 吧!
依赖
~6–12MB
~133K SLoC