Flutter文档处理插件bizdoc的使用
Flutter文档处理插件bizdoc的使用
特性
通过BizDoc工作流引擎创建表单驱动的移动应用程序。
功能
- 身份验证: Okta、Entra或DirectoryServices。
- 在线消息和通知。
- 分析图表。
- 仪表板小部件。
- 从相机捕获并附加文件。
- 位置敏感表单。
- 地理定位服务。
开始使用
在pubspec.yaml
文件中添加插件:
flutter pub add bizdoc
如果需要访问自有的服务器API,还需安装dio
插件:
flutter pub add dio provider
BizDoc移动应用依赖于Firebase消息推送。为了充分利用BizDocApp,你需要创建一个Firebase项目,并将其设置提供给BizDoc。
使用示例
将BizDocApp
添加到main.dart
中:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return BizDocApp(
serverAddress: 'https://bizdoc-server-here',
authentication: FormIdentity(),
);
}
}
BizDocApp
可以配置证书、Firebase通信设置和标题。
设置身份验证
根据服务器配置选择合适的身份验证方法。
提供程序 | 用途 |
---|---|
Okta | Okta开发者 |
FormIdentity | 用户名密码认证 |
DirectoryServices | Windows |
Entra | Azure Active Directory |
声明组件
BizDoc组件是可以访问应用状态和服务的小部件。Flutter支持三种类型的BizDoc组件:表单(form)、操作(action)和小部件(widget)。
首先声明一个有状态的小部件:
class MyComponent extends StatefulWidget {
[@override](/user/override)
_MyComponentState createState() => _MyComponentState();
}
class _MyComponentState extends State<MyComponent> {
}
注册组件
在main.dart
中注册组件:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return BizDocApp(
routes: {
'my-component': (context) => MyComponent(),
},
);
}
}
表单
表单
是一种组件类型,允许用户填写一系列输入。
声明模型
class MyModel {
final Map<String, dynamic> _json;
MyModel(this._json);
String? get subject => _json['subject'];
set subject(String? val) => _json['subject'] = val;
num? get price => _json['price'];
set price(num? val) => _json['price'] = val;
}
注意:这里我们为每个属性使用getter和setter。也可以通过
fromJson()
模式反序列化JSON。
管理状态
使用BizDocFormState
访问表单状态:
class _MyComponentState extends State<MyComponent> {
late BizDocFormState _state;
late MyModel _model;
[@override](/user/override)
void initState() {
_state = Provider.of<BizDocFormState>(context, listen: false);
_model = MyModel(_state.data);
super.initState();
}
}
更新状态以响应输入变化:
TextFormField(
keyboardType: TextInputType.text,
controller: new TextEditingController(text: _model.subject),
onChanged: (value) {
_model.subject = value;
_state.setDirty(); // 设置表单为脏状态
},
validator: (value) {
if (value != null && value != '') _state.setInvalid(); // 设置表单无效
else if (_model.isValid) _state.setValid(); // 设置表单有效
},
),
控制小部件
嵌入BizDoc控件以简化API的使用。
名称 | 用法 |
---|---|
CombinationPicker | 组合输入 |
CombinationPool | 组合输入 |
SelectTypeField | 数据类型选择器 |
AutocompleteTypeField | 自动完成数据类型选择器 |
AddressField | 自动完成地址输入 |
DateFormField | 日期选择器 |
DateRangeField | 日期范围选择器 |
设置GoogleMapsSettings
属性在BizDocApp
中:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) => BizDocApp(
firebaseSettings: FirebaseSettings(
apiKey: '...',
projectId: '...',
senderId: '...',
vapidKey: '...',
appId: '...'),
googleMapsSettings: GoogleMapsSettings(apiKey: '...'),
);
}
集成API
使用扩展或单例访问BizDoc服务。
可用的服务:
名称 | 用法 |
---|---|
DataSource | 获取BizDoc数据类型值 |
Geo | 地理位置服务 |
Session | 当前会话状态 |
示例代码:
extension MyModel on Session {
Future<Iterable<VendorInfo>> vendors(String? name) async {
final response = await dio.get('/vendors/', queryParameters: {'name': name});
return response.data.map((e) => VendorInfo(e));
}
}
class VendorInfo {
final Map<String, dynamic> _json;
VendorInfo(this._json);
String? get name => _json['name'];
}
注意:使用
dio
属性向服务器发送HTTP请求。
在小部件中使用:
let vendors = await dataSource.vendors();
仪表板小部件
使用BizDocWidgetState
获取远程数据。
class CubeAnalysisWidget extends StatefulWidget implements IDashboardWidget {
const CubeAnalysisWidget({Key? key}) : super(key: key);
[@override](/user/override)
_CubeAnalysisWidgetState createState() => _CubeAnalysisWidgetState();
}
class _CubeAnalysisWidgetState extends State<CubeAnalysisWidget> {
[@override](/user/override)
Widget build(BuildContext context) {
return Consumer<BizDocWidgetState>(
builder: (context, value, child) {
if (value.hasData) {
for (var item in value.data!) {
// 处理数据
}
}
return Container();
},
);
}
}
注册组件在BizDocApp
解析中。
设置
要充分利用BizDoc应用,添加消息传递和API设置。
推送消息
在main.dart
中添加Firebase设置:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) => BizDocApp(
firebaseSettings: FirebaseSettings(
apiKey: '...',
projectId: '...',
senderId: '...',
vapidKey: '...',
appId: '...'),
);
}
地理位置服务
在main.dart
中添加Google Maps设置:
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) => BizDocApp(
googleMapsSettings: GoogleMapsSettings(apiKey: '...'),
);
}
更多关于Flutter文档处理插件bizdoc的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter文档处理插件bizdoc的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
bizdoc
是一个用于处理文档的 Flutter 插件,通常用于生成、编辑和管理文档。它可能提供了一些功能,如文档模板的生成、PDF 的创建、文档的编辑和导出等。以下是如何在 Flutter 项目中使用 bizdoc
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 bizdoc
插件的依赖。
dependencies:
flutter:
sdk: flutter
bizdoc: ^latest_version # 请替换为最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在你的 Dart 文件中导入 bizdoc
插件。
import 'package:bizdoc/bizdoc.dart';
3. 初始化插件
在使用 bizdoc
之前,你可能需要初始化插件。这通常涉及到设置一些配置或密钥。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await BizDoc.initialize(apiKey: 'YOUR_API_KEY');
runApp(MyApp());
}
4. 使用插件功能
bizdoc
插件可能提供了多种功能,以下是一些常见的使用示例:
生成文档
void generateDocument() async {
var document = await BizDoc.generateDocument(templateId: 'TEMPLATE_ID', data: {
'field1': 'value1',
'field2': 'value2',
});
print('Document generated: ${document.url}');
}
编辑文档
void editDocument() async {
var editedDocument = await BizDoc.editDocument(documentId: 'DOCUMENT_ID', changes: {
'field1': 'new_value1',
'field2': 'new_value2',
});
print('Document edited: ${editedDocument.url}');
}
导出为 PDF
void exportToPdf() async {
var pdfFile = await BizDoc.exportToPdf(documentId: 'DOCUMENT_ID');
print('PDF exported: ${pdfFile.path}');
}
5. 处理错误
在使用 bizdoc
插件时,可能会遇到一些错误。你可以使用 try-catch
块来捕获并处理这些错误。
void generateDocument() async {
try {
var document = await BizDoc.generateDocument(templateId: 'TEMPLATE_ID', data: {
'field1': 'value1',
'field2': 'value2',
});
print('Document generated: ${document.url}');
} catch (e) {
print('Error generating document: $e');
}
}
6. 示例应用
以下是一个简单的 Flutter 应用示例,展示了如何使用 bizdoc
插件生成文档。
import 'package:flutter/material.dart';
import 'package:bizdoc/bizdoc.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await BizDoc.initialize(apiKey: 'YOUR_API_KEY');
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('BizDoc Example'),
),
body: Center(
child: ElevatedButton(
onPressed: generateDocument,
child: Text('Generate Document'),
),
),
),
);
}
void generateDocument() async {
try {
var document = await BizDoc.generateDocument(templateId: 'TEMPLATE_ID', data: {
'field1': 'value1',
'field2': 'value2',
});
print('Document generated: ${document.url}');
} catch (e) {
print('Error generating document: $e');
}
}
}