Skip to content

RouteRegistry / 路由 ​

cpp
class RouteRegistry : public NonCopyable;
using WidgetBuilder = std::function<std::shared_ptr<Widget>(BuildContext&)>;

将路由名字符串映射到 widget 工厂的单例。Application 维护导航栈;推入一个路由名即构建 对应 widget 并置于栈顶。

类名是 RouteRegistry,不是 Router

不存在名为 Router 的类。注册用 RouteRegistry,运行时导航用 Application::PushRoute / Application::PopRoute。

头文件 ​

cpp
#include <neoflux/widgets/route_registry.h>

方法 ​

方法签名说明
Instancestatic RouteRegistry& Instance()单例访问器。
RegisterRoutevoid RegisterRoute(std::string_view name, WidgetBuilder builder)注册/覆盖路由。
BuildRoutestd::shared_ptr<Widget> BuildRoute(std::string_view name, BuildContext& ctx) const构建路由对应的 widget;未知路由返回 nullptr。
HasRoutebool HasRoute(std::string_view name) const是否存在该路由。
GetRouteCountstd::size_t GetRouteCount() const noexcept已注册路由数。
Clearvoid Clear()清空所有路由(测试用)。

示例 ​

cpp
#include <neoflux/widgets/route_registry.h>

RouteRegistry::Instance().RegisterRoute("/home", [](BuildContext& ctx) {
    return std::make_shared<Container>()
        ->SetBackgroundColor({255, 255, 255, 255})
        .child(std::make_shared<Text>("Home")->build())
        .build();
});

// 在 widget 内部导航:
//   context.PushRoute("/home");
//   context.PopRoute();

讨论

Released under the GPL-3.0 License.