Flutter设置界面UI插件lb_setup_ui的使用
Flutter设置界面UI插件lb_setup_ui的使用
Logbot 设置界面UI插件lb_setup_ui for Flutter
Logbot 设置界面UI插件用于通过蓝牙和WiFi实现Logbot物联网设备的首次设置。此包包含实现整个设置过程所需的全部小部件。还提供了一个示例应用程序来测试设置过程。
为了定制图形以适应您的应用,开发者应该在他们的应用中实现该过程,扩展所有的小部件类并覆盖所需的部分(如build
方法以自定义图形,以及如有必要可以覆盖其他方法以自定义错误消息、日志、翻译等)。
要求
- Dart 2.17 或更新版本
安装与使用
添加依赖项:
dependencies:
lb_setup_ui:
示例代码:
import 'package:lb_setup_ui/lb_setup_ui.dart';
class Example extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("蓝牙设置过程"),
),
// 这里启动默认的设置界面
body: const LbSetupBluetoothPage(),
);
}
}
要通过自定义小部件和图形修改UI,必须扩展所有类,并至少覆盖build
方法:
/// 扩展 LbSetupLanConnectionConfig
class MyCustomLanConfig extends LbSetupLanConnectionConfig {
const MyCustomLanConfig({
Key? key,
required onSuccess,
required onCancel,
}) : super(
key: key,
onSuccess: onSuccess,
onCancel: onCancel,
);
@override
State<MyCustomLanConfig> createState() => _MyCustomLanConfigState();
}
/// 扩展 LbSetupLanConnectionConfigState<MyCustomLanConfig>
class _MyCustomLanConfigState extends LbSetupLanConnectionConfigState<MyCustomLanConfig> {
/// (可选) 还可以覆盖方法来自定义日志、错误消息或添加功能
@override
Future<bool> init() async {
if (!isInitialized) {
MyCustomLogger().log(widget: "LbSetupLanConnectionConfigState", method: "init", message: "初始化调用");
isInitialized = true;
try {
return initApiCall();
} catch(e, s) {
MyCustomLogger().error(widget: "LbSetupLanConnectionConfigState", method: "init", message: e.toString(), stack: s);
return false;
}
}
return true;
}
/// 自定义LAN配置页面的UI
@override
Widget build(BuildContext context) {
return Form(
key: formKey,
child: FutureBuilder(
future: init(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
/// 可以通过翻译等自定义文本
MyCustomText(
text: "首次设置LAN配置".tr(),
align: TextAlign.center,
fontStyle: FontStyle.italic,
),
SizedBox(height: 4.0.h),
/// 可以通过为您的应用设计的小部件自定义字段
MyCustomStringField(
value: formData["ipv4"]["address"],
label: "IP地址".tr(),
placeholder: "192.168.1.100",
onSubmit: (value) {
var result = UtilsManager.validation.validateIp(value);
if (result != null) {
return result;
}
formData["ipv4"]["address"] = value;
},
),
SizedBox(height: 2.0.h),
MyCustomStringField(
value: LogbotSetupUiUtils().prefixToSubnet(formData["ipv4"]["prefix"]) ?? "255.255.255.0",
label: "子网掩码".tr(),
placeholder: "255.255.255.0",
onSubmit: (value) {
var result = UtilsManager.validation.validateIp(value);
if (result != null) {
return result;
}
formData["ipv4"]["prefix"] = LogbotSetupUiUtils().subnetToPrefix(value) ?? 24;
},
),
SizedBox(height: 4.0.h),
/// 可以通过为您的应用设计的小部件自定义按钮
!isLoading ?
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
FillButton(
status: isLoading ? "disabled" : "primary",
size: "small",
text: "后退".tr(),
icon: FontAwesomeIcons.arrowUp,
onTap: widget.onCancel,
),
FillButton(
status: isLoading ? "disabled" : "primary",
size: "small",
text: "下一步".tr(),
icon: FontAwesomeIcons.arrowDown,
onTap: submit,
),
],
) : const Center(child: CircularProgressIndicator.adaptive()),
],
);
} else {
return const Center(
child: CircularProgressIndicator.adaptive(),
);
}
}
),
);
}
}
设置过程
设置过程可以通过WiFi或蓝牙低功耗完成。
-
WiFi连接:用户必须通过WiFi连接到设备生成的访问点,当设备未配置时:
SSID: logbot-wifi-ap 密码: password
-
蓝牙连接:未配置的设备会显示为具有ID
00000000
的蓝牙设备。物联网设备可以在移动应用的设置过程中直接被发现,但对于iOS用户,必须先从设置中将设备配对到手机(设置 > 蓝牙)。如果物联网设备未与手机配对,在尝试启动设置过程时会显示错误消息。
设置过程包括以下8个步骤,这些步骤在连接到设备后开始:
- 许可证设置
- LAN连接配置
- 主连接选择
- 主连接配置
- 次级连接选择(可选)
- 次级连接配置(可选)
- 接入点配置(可选)
- 设置完成及重启
以下是配置设备的各种步骤的流程图,包括基于先前配置连接的所有可选步骤(例如:如果WiFi已作为连接方式使用,则无法配置接入点)。
![设置过程流程图]
配置完成后,会显示一个Bonjour页面并重新启动设备。重新启动后,设备应已完成配置。
Logbot设置界面UI执行了一些额外的步骤以确认设备的正确配置。
- 在设备重新启动后(通常大约一分钟),使用Logbot Discovery扫描本地网络中的设备。如果设备正确配置,设备应可见。
- 如果设备被发现,将执行对设备的Logbot Setup服务的健康检查,以确认服务运行正常。
- 如果这些步骤成功完成,则表示设备配置成功。
- 如果这些步骤未能完成,这并不意味着配置失败。设备可能仍在重启中,或者用户连接到了不同的网络,导致设备无法被发现。如果这些步骤失败了,但许可证激活和重启完成了,则表示配置部分成功,这意味着用户需要手动验证设备是否正确配置并连接到Logbot。
如果用户在进行配置时已登录,并且用户具有编辑者角色,则会执行一些额外的步骤:
- 下载用户拥有的设备列表。
- 如果设备不在列表中,则意味着设备必须注册到Logbot平台。用户会被要求输入设备名称并将其插入到用户的设备集合中。
- 如果设备已经注册,则过程结束。
测试
运行所有测试:
flutter test
更多关于Flutter设置界面UI插件lb_setup_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter设置界面UI插件lb_setup_ui的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,关于在Flutter中使用lb_setup_ui
插件来创建设置界面UI,以下是一个简单的代码示例来展示如何集成和使用这个插件。请注意,lb_setup_ui
可能是一个特定社区或第三方提供的插件,因此确保你已经在pubspec.yaml
文件中添加了相应的依赖项。
首先,在你的pubspec.yaml
文件中添加lb_setup_ui
依赖项(假设它已经在pub.dev上发布,或者你有相应的本地包):
dependencies:
flutter:
sdk: flutter
lb_setup_ui: ^x.y.z # 替换为实际的版本号
然后运行flutter pub get
来安装依赖项。
接下来,在你的Flutter项目中创建一个设置界面。以下是一个示例代码,展示如何使用lb_setup_ui
插件:
import 'package:flutter/material.dart';
import 'package:lb_setup_ui/lb_setup_ui.dart'; // 假设这是插件的导入路径
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Setup UI Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SetupScreen(),
);
}
}
class SetupScreen extends StatefulWidget {
@override
_SetupScreenState createState() => _SetupScreenState();
}
class _SetupScreenState extends State<SetupScreen> {
final List<SetupItem> items = [
SetupItem(
title: '主题',
subTitle: '选择应用主题',
options: [
SetupOption(title: '浅色主题', value: 'light'),
SetupOption(title: '深色主题', value: 'dark'),
],
initialValue: 'light',
onChanged: (value) {
// 处理主题更改
print('Selected theme: $value');
},
),
SetupItem(
title: '语言',
subTitle: '选择应用语言',
options: [
SetupOption(title: '英语', value: 'en'),
SetupOption(title: '中文', value: 'zh'),
],
initialValue: 'en',
onChanged: (value) {
// 处理语言更改
print('Selected language: $value');
},
),
// 可以添加更多设置项
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('设置界面'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: LBSetupUI(
items: items,
),
),
);
}
}
在这个示例中,我们创建了一个简单的设置界面,其中包含两个设置项:主题和语言选择。每个设置项都使用SetupItem
类来表示,并包含标题、子标题、选项列表、初始值以及选项更改时的回调函数。
请注意,由于lb_setup_ui
可能是一个假定的插件名称,实际的插件API可能会有所不同。如果lb_setup_ui
插件的API与上述示例不匹配,请参考插件的官方文档或源代码以获取正确的用法。
此外,如果你没有找到名为lb_setup_ui
的插件,可能需要考虑使用其他类似的Flutter UI插件或自己实现设置界面UI。