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": "去谷歌"
}
就这样~~