Flutter自定义组件开发插件DivKit的使用
Flutter自定义组件开发插件DivKit的使用
DivKit
DivKit 🐋 是一个开源的服务器驱动UI(SDUI)框架。它允许你对不同版本的应用程序进行服务器端更新。此外,它还可以用于快速UI原型设计,让你可以一次编写布局,然后在任何地方使用Flutter进行部署。DivKit是开始在项目中使用服务器驱动UI的绝佳选择,因为它可以轻松地集成到应用的任何部分作为一个简单的视图。在开始时,你不需要服务器集成。你可以在客户端包含所有JSON来尝试在实际应用中使用它。
我们还为你提供了一个 沙箱,你可以在这里尝试不同的示例,并查看结果。你可以使用 DivKit网站 查找大量实用的示例和文档,但如果你有任何问题,随时在Telegram社区聊天中询问我们。
如何工作
DivKit从JSON数据构建原生视图。
JSON → DivData → DivKitView
- JSON – 原始数据,包含DivKit格式的模板(参见 DivKit schema)。
- DivData – 从JSON解析的数据对象(参见 生成的DTO)。
- DivKitView – 纯粹的Flutter小部件(你可以直接使用它)。
沙箱应用
由于Flutter客户端不支持在Web上完全启动,因此,为了测试功能,你需要运行当前库的示例。使用 DivKit沙箱应用 浏览布局示例和支持的功能。
主要的示例存储在monorepo中… 在开始之前,从 client/flutter/divkit
调用以下命令以创建软链接:
./tool/get_test_data.sh
支持的功能
Flutter客户端正在开发中,欢迎贡献并帮助社区在该平台上使用DivKit。
支持的组件(可能包含不可用的功能,详情请参阅文档):
- text
- image
- container
- state
- input
- gallery
- pager
- custom
DivKit Flutter. 快速入门
构建应用并绘制你的第一个DivKitView
-
添加依赖项到
pubspec.yaml
:dependencies: divkit: any
-
导入库
import 'package:divkit/divkit.dart';
-
使用DivKitData解析布局:
从JSON:
final data = DefaultDivKitData.fromJson(json); // json is Map<String, dynamic>
或者从卡片和模板:
final data = DefaultDivKitData.fromScheme( card: json['card'], // Map<String, dynamic> templates: json['templates'], // Map<String, dynamic>? );
注意:构建DTO的过程相当昂贵,最好在小部件外部创建它,以避免帧丢失。
构建并预加载数据以确保即时渲染:
await data.build(); // 或者对于小型布局使用同步变体 // data.buildSync(); await data.preload(); // 提供内置在DivKitView中的存储
-
在小部件树中使用DivKitView,通过参数 “data” 传递布局:
DivKitView( data: data, // DivKitData )
你可以选择传递自定义处理器、动作处理器和其他参数来配置DivKitView的行为:
DivKitView( data: data, customHandler: MyCustomHandler(), // DivCustomHandler? actionHandler: MyCustomActionHandler(), // DivActionHandler? variableStorage: MyVariableStorage(), // DivVariableStorage? )
注意:如果你希望使用默认的div动作并使用自己的actionHandler,请不要忘记继承
DefaultDivActionHandler
。
示例代码
以下是 example/lib/main.dart
的示例代码:
import 'package:divkit/divkit.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'src/app.dart';
void main() {
// DivKit日志输出
logger
..keepLog = kDebugMode
..onLog = print;
debugPrintDivKitViewLifecycle = true;
debugPrintDivExpressionResolve = true;
debugPrintDivPerformLayout = false;
runApp(const ProviderScope(child: PlaygroundApp()));
}
希望这些信息对你有所帮助!如果有任何问题或需要进一步的帮助,请随时联系我。
更多关于Flutter自定义组件开发插件DivKit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义组件开发插件DivKit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用自定义组件开发插件DivKit的示例代码。这个示例假定你已经安装了DivKit插件,并且已经在你的Flutter项目中进行了配置。
1. 添加DivKit依赖
首先,确保在你的pubspec.yaml
文件中添加了DivKit的依赖:
dependencies:
flutter:
sdk: flutter
div_kit: ^latest_version # 替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
2. 创建一个自定义组件
接下来,我们可以使用DivKit来创建一个自定义组件。假设我们要创建一个简单的按钮组件。
2.1 创建一个新的Dart文件,例如custom_button.dart
import 'package:flutter/material.dart';
import 'package:div_kit/div_kit.dart'; // 导入DivKit库
// 使用DivKit的[@DivComponent](/user/DivComponent)注解来定义一个自定义组件
[@DivComponent](/user/DivComponent)()
class CustomButton extends StatelessWidget {
final String text;
final VoidCallback onPressed;
CustomButton({required this.text, required this.onPressed});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: Text(text),
);
}
}
2.2 在你的Flutter应用中注册这个组件
在main.dart
或者一个合适的地方,确保你注册了自定义组件:
import 'package:flutter/material.dart';
import 'package:div_kit/div_kit.dart';
import 'custom_button.dart'; // 导入自定义组件
void main() {
// 注册自定义组件
DivKit.registerComponent(CustomButton.tag, (context, attrs) {
String text = attrs['text'] ?? '';
VoidCallback? onPressed = attrs['onPressed'] as VoidCallback?;
return CustomButton(text: text, onPressed: onPressed);
});
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('DivKit Custom Component Example'),
),
body: Div(
children: [
DivElement(
tag: CustomButton.tag,
attributes: {
'text': 'Click Me',
'onPressed': () {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Button Clicked')));
},
},
),
],
),
),
);
}
}
3. 运行你的应用
现在,你可以运行你的Flutter应用,并应该看到一个自定义的按钮。点击按钮时,会显示一个SnackBar提示。
解释
- @DivComponent():这个注解用于标记一个自定义组件。
- DivKit.registerComponent:这个方法用于注册自定义组件,使其能够在DivKit中使用。
- DivElement:这是DivKit中用于定义组件实例的类。你可以通过
tag
属性指定组件类型,并通过attributes
属性传递参数。
这个示例展示了如何在Flutter中使用DivKit来创建和使用自定义组件。你可以根据需要扩展和修改这个示例来适应你的具体需求。