Shark Flutter (官方)

一个 Flutter 服务器渲染框架

它是什么

Shark 是一个服务器渲染框架,一个服务器驱动的 UI 框架。

Shark 的简单用例

假设您有一个 `text` 小部件,您在服务器上将其指定为 JSON 返回给客户端,
客户端使用 Shark 接收文本小部件并成功显示 UI。

过了一段时间,您想将文本小部件更改为 `button`,而不是在客户端代码中修改并经过所有移动应用商店更新流程,
您只需要在服务器上将文本小部件修改为按钮小部件,Shark 客户端接收到后即可显示最新的 UI。

项目图

如何使用

首先,在您的应用程序的 `main` 方法中 `init` Shark 库

  void main() {
    WidgetsFlutterBinding.ensureInitialized();
    await Shark.init(hostUrl: 'http://yourhost.com');

    runApp(MyApp());
  }

其次,设置 UI 小部件

  • 需要注意的是,所有与小部件相关的内容都由 `SharkController` 控制
  • `get` 方法是发送请求的地方
  late final SharkController _controller;

  /// init the shark controller
  @override
  void initState() {
    _controller = SharkController.fromUrl(path: '/container',)..get();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return SharkWidget(controller: _controller);
  }

要重定向到另一页,请调用 `redirect`

_controller.redirect('/your_new_path');

要刷新当前页面,请调用 `refresh`

_controller.refresh();

如果您想创建自己的解析器

class MyCustomParser extends SharkParser {}

路由

`shark` 会自动处理您的页面路由,如果您不想要它,请将 `handleClickEvent` 设置为 `false`

 _sharkController = SharkController('/your_path', handleClickEvent: false);

点击事件

通过点击事件触发的路由,您可以在 JSON 小部件文件中这样设置。

示例事件 JSON 格式

    {
        "type": "container",
        "click_event": "route://your_path?xxx=xxx"
    }

schema: xxx://

path: 您的路径

argument: 前缀 '?' 之后是参数字段。
xxx=xxx,用 `&` 分隔

示例

"click_event": "route://second_page?name=hello&place=world"  

schema 代表路由操作

目前有 4 种路由操作

route: 前缀为 `route://`,内部会调用 `Navigator.pushName('new_path', args)`

将新路由推送到 `Navigator`

** 请记住在您的路由映射中指定 `route path`

否则,导航器将抛出错误
然后 SharkController 将尝试导航到一个新的默认 shark 小部件,路径如下:

pop: 前缀为 `pop://`,内部会调用 `Navigator.pop(result)`

redirect: 前缀为 `redirect://`,用以下路径重定向当前页面

link: 内部使用 `url_launcher` 在浏览器中打开一个 URL,请访问 url_launcher 查看每个平台的详细配置要求

缓存

Shark 使用 dio_cache_interceptor 进行缓存。

初始化 shark 库时,您可以传递一个 `cacheStrategy` 参数来配置您的缓存设置。

解析

请注意,Shark 使用 dynamic_widget 进行小部件解析,

如果您想创建自己的解析器

class MyCustomParser extends SharkParser {}

然后将这个新的解析器添加到 shark 小部件中

_sharkController.addParser(MyCustomParser());

要查看 JSON 格式,请访问 dynamic_widget 上的 [文档](https://github.com/dengyin2000/dynamic_widget/blob/master/WIDGETS.md)。

本地化

shark 使用 easy_localization 进行本地化,请遵循 说明 进行设置。

设置 easy_localization 包后,接下来需要做的是向 shark 小部件添加一个 `TranslatedTextParser`

TranslatedTextParser 会为您处理所有本地化工作

_sharkController.addParse(TranslatedTextParser());

在您的服务器 JSON 文件中,将 `text` 标签修改为 `translatedText`

{
    "type": "Text",
    "data": "Redirect To next page"
}

{
    "type": "TranslatedText",
    "data": "Redirect To next page"
}

data 值应该是与您的翻译 JSON 文件中的 `key` 对应的字符串

示例翻译文件 `zh.json`

{
  "Navigate To next page":"push路由,转入下一页",
  "Redirect To next page": "转换至另一页",
  "To goog.gl": "去谷歌"
}

就这样~~

GitHub

https://github.com/lau1944/shark