diff --git a/assets/images/adjuctvec.png b/assets/images/adjuctvec.png new file mode 100644 index 00000000..9d44c18f Binary files /dev/null and b/assets/images/adjuctvec.png differ diff --git a/assets/images/alert1.png b/assets/images/alert1.png new file mode 100644 index 00000000..8b35dc4c Binary files /dev/null and b/assets/images/alert1.png differ diff --git a/assets/images/alert2.png b/assets/images/alert2.png new file mode 100644 index 00000000..b2af59c9 Binary files /dev/null and b/assets/images/alert2.png differ diff --git a/assets/images/alert3.png b/assets/images/alert3.png new file mode 100644 index 00000000..64a21205 Binary files /dev/null and b/assets/images/alert3.png differ diff --git a/assets/images/alert4.png b/assets/images/alert4.png new file mode 100644 index 00000000..5fd900d9 Binary files /dev/null and b/assets/images/alert4.png differ diff --git a/assets/images/alert5.png b/assets/images/alert5.png new file mode 100644 index 00000000..8c920c87 Binary files /dev/null and b/assets/images/alert5.png differ diff --git a/assets/images/check0.png b/assets/images/check0.png new file mode 100644 index 00000000..4d2fcb6b Binary files /dev/null and b/assets/images/check0.png differ diff --git a/assets/images/check1.png b/assets/images/check1.png new file mode 100644 index 00000000..449f770f Binary files /dev/null and b/assets/images/check1.png differ diff --git a/assets/images/check2.png b/assets/images/check2.png new file mode 100644 index 00000000..50124874 Binary files /dev/null and b/assets/images/check2.png differ diff --git a/assets/images/check3.png b/assets/images/check3.png new file mode 100644 index 00000000..f05ca363 Binary files /dev/null and b/assets/images/check3.png differ diff --git a/assets/images/check4.png b/assets/images/check4.png new file mode 100644 index 00000000..3ad9afdd Binary files /dev/null and b/assets/images/check4.png differ diff --git a/assets/images/check5.png b/assets/images/check5.png new file mode 100644 index 00000000..9a3efec0 Binary files /dev/null and b/assets/images/check5.png differ diff --git a/assets/images/check6.png b/assets/images/check6.png new file mode 100644 index 00000000..c69d96df Binary files /dev/null and b/assets/images/check6.png differ diff --git a/assets/images/check7.png b/assets/images/check7.png new file mode 100644 index 00000000..1772b62d Binary files /dev/null and b/assets/images/check7.png differ diff --git a/assets/images/check8.png b/assets/images/check8.png new file mode 100644 index 00000000..d364efd2 Binary files /dev/null and b/assets/images/check8.png differ diff --git a/assets/images/check9.png b/assets/images/check9.png new file mode 100644 index 00000000..30767097 Binary files /dev/null and b/assets/images/check9.png differ diff --git a/assets/images/control.png b/assets/images/control.png new file mode 100644 index 00000000..5d057b59 Binary files /dev/null and b/assets/images/control.png differ diff --git a/assets/images/controlbattery.png b/assets/images/controlbattery.png new file mode 100644 index 00000000..89ffae02 Binary files /dev/null and b/assets/images/controlbattery.png differ diff --git a/assets/images/dipan.png b/assets/images/dipan.png new file mode 100644 index 00000000..e6153418 Binary files /dev/null and b/assets/images/dipan.png differ diff --git a/assets/images/fadongji.png b/assets/images/fadongji.png new file mode 100644 index 00000000..fc1e0d1c Binary files /dev/null and b/assets/images/fadongji.png differ diff --git a/assets/images/modelchange.png b/assets/images/modelchange.png new file mode 100644 index 00000000..ea5819ee Binary files /dev/null and b/assets/images/modelchange.png differ diff --git a/assets/images/operationwalk1.png b/assets/images/operationwalk1.png new file mode 100644 index 00000000..f258174d Binary files /dev/null and b/assets/images/operationwalk1.png differ diff --git a/assets/images/operationwalk2.png b/assets/images/operationwalk2.png new file mode 100644 index 00000000..dc34bc1a Binary files /dev/null and b/assets/images/operationwalk2.png differ diff --git a/assets/images/starpoint1.png b/assets/images/starpoint1.png new file mode 100644 index 00000000..45bf69c6 Binary files /dev/null and b/assets/images/starpoint1.png differ diff --git a/assets/images/starpoint2.png b/assets/images/starpoint2.png new file mode 100644 index 00000000..0fd12796 Binary files /dev/null and b/assets/images/starpoint2.png differ diff --git a/assets/images/startpoint.png b/assets/images/startpoint.png new file mode 100644 index 00000000..5822f2ee Binary files /dev/null and b/assets/images/startpoint.png differ diff --git a/assets/images/stopbutton.png b/assets/images/stopbutton.png new file mode 100644 index 00000000..273b21ac Binary files /dev/null and b/assets/images/stopbutton.png differ diff --git a/lib/core/router/route_paths.dart b/lib/core/router/route_paths.dart index eaa6d448..989fcae3 100644 --- a/lib/core/router/route_paths.dart +++ b/lib/core/router/route_paths.dart @@ -15,6 +15,7 @@ class RoutePaths { static const runningStatus = '/home/running_status'; static const djMap = '/home/dj_map'; static const productDesc = '/home/productDesc'; + static const usage = '/home/usage'; static const machineDetails = '/machine_details/machine_details'; } diff --git a/lib/features/home/presentation/pages/productDesc.dart b/lib/features/home/presentation/pages/productDesc.dart index 630f3b78..fa86d523 100644 --- a/lib/features/home/presentation/pages/productDesc.dart +++ b/lib/features/home/presentation/pages/productDesc.dart @@ -227,9 +227,10 @@ class _ProductPageState extends State { ), ); }), - // 图片(替换为你的资源) - // Image.asset('assets/startpoint.png'), const SizedBox(height: 20), + + // 图片(替换为你的资源) + Image.asset('assets/images/startpoint.png'), ], ), ); @@ -254,7 +255,7 @@ class _ProductPageState extends State { ); }), const SizedBox(height: 16), - // Image.asset('assets/card.png'), + //Image.asset('assets/images/card.png'), ], ), ); @@ -264,19 +265,139 @@ class _ProductPageState extends State { Widget _buildParam() { return SingleChildScrollView( padding: const EdgeInsets.all(10), - child: MarkdownWidget( - data: productParamMd, - config: MarkdownConfig( - configs: [ - TableConfig( - wrapper: (child) => Container(margin: const EdgeInsets.symmetric(vertical: 8), child: child), - ), + child: Container( + width: double.infinity, // 关键:固定容器宽度,避免布局崩溃 + child: Column( + mainAxisSize: MainAxisSize.min, // 限制Column高度为内容高度 + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // 手动渲染Markdown内容,避免内置滚动冲突 + const Text('整车信息', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), + // 整车信息表格(原生Flutter表格,无滚动冲突) + _buildVehicleInfoTable(), + const SizedBox(height: 20), + const Text('控制系统', style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold)), + // 控制系统表格(原生Flutter表格) + _buildControlSystemTable(), ], ), ), ); } + // 整车信息表格(原生Flutter实现,无滚动冲突) + Widget _buildVehicleInfoTable() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, // 仅表格横向滚动 + child: Table( + border: TableBorder.all(color: Colors.grey.shade300, width: 1), + columnWidths: const {0: FixedColumnWidth(200), 1: FixedColumnWidth(80), 2: FixedColumnWidth(150)}, + children: [ + // 表头 + TableRow( + decoration: BoxDecoration(color: Colors.grey.shade100), + children: const [ + Padding( + padding: EdgeInsets.all(8), + child: Text('项目', style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text('单位', style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text('MC700', style: TextStyle(fontWeight: FontWeight.bold)), + ), + ], + ), + // 表格内容 + _buildTableRow('外形尺寸(长×宽×高)', 'mm', '1429×1090×650'), + _buildTableRow('车体重量', 'kg', '320'), + _buildTableRow('工作效率', 'm²/h', '2500¹'), + _buildTableRow('最低离地高度', 'mm', '90'), + _buildTableRow('续航能力(纯电)', 'h', '0.5'), + _buildTableRow('水平运动额定负载', 'kg', '500'), + _buildTableRow('动力源', '', '混合动力'), + _buildTableRow('整机显示信息', '', '电量、电压、温度'), + _buildTableRow('遥控器显示信息', '', '电量、失联报警'), + _buildTableRow('电池品牌', '', '理士'), + _buildTableRow('电芯成分', '', 'SLA(密封铅酸可充电电池)'), + _buildTableRow('电池容量(20小时率)', 'Ah/hr', '23'), + _buildTableRow('低电量报警', '', '显示屏和三色灯'), + _buildTableRow('增程器', '', '自适应'), + _buildTableRow('发电机保护', '', '过滤网'), + _buildTableRow('外放电源', 'V/W', '24/480(直流)'), + _buildTableRow('外放电源接口', '', '点烟器'), + _buildTableRow('按钮', '', '304不锈钢带灯'), + _buildTableRow('箱内电气', '', '防震端子'), + _buildTableRow('箱外电气', '', '车规级线束'), + _buildTableRow('防护等级', '', 'IP55'), + ], + ), + ); + } + + // 控制系统表格(原生Flutter实现) + Widget _buildControlSystemTable() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Table( + border: TableBorder.all(color: Colors.grey.shade300, width: 1), + columnWidths: const {0: FixedColumnWidth(200), 1: FixedColumnWidth(80), 2: FixedColumnWidth(150)}, + children: [ + // 表头 + TableRow( + decoration: BoxDecoration(color: Colors.grey.shade100), + children: const [ + Padding( + padding: EdgeInsets.all(8), + child: Text('项目', style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text('单位', style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text('MC700', style: TextStyle(fontWeight: FontWeight.bold)), + ), + ], + ), + // 表格内容 + _buildTableRow('控制器', '', 'ECU'), + _buildTableRow('遥控器', '', '工业级数显屏'), + _buildTableRow('遥控距离', 'm', '≤500'), + _buildTableRow('遥控信号', 'MHz', '433'), + _buildTableRow('通信频率', 'Hz', '10'), + _buildTableRow('发动机维护提醒', '', '屏幕图标提醒'), + _buildTableRow('自动驻车', 'kg', '有'), + _buildTableRow('坡道辅助起步', '', '有'), + _buildTableRow('车身倾斜检测', '', '有'), + _buildTableRow('车速检测系统', '', '有'), + _buildTableRow('ABS刹车系统', '', '有'), + _buildTableRow('电子防御滚系统', '', '有'), + _buildTableRow('牵引力控制系统', '', '有'), + _buildTableRow('车身稳定系统', '', '有'), + _buildTableRow('抗干扰', '', '百台设备互不干扰'), + _buildTableRow('传感器安装预留', '', 'LIDAR/CPS/RIDAR'), + _buildTableRow('防护等级', '', '车规级ip65'), + ], + ), + ); + } + + // 表格行工具方法 + TableRow _buildTableRow(String item, String unit, String value) { + return TableRow( + children: [ + Padding(padding: EdgeInsets.all(8), child: Text(item)), + Padding(padding: EdgeInsets.all(8), child: Text(unit)), + Padding(padding: EdgeInsets.all(8), child: Text(value)), + ], + ); + } + /// 应用场景 Widget _buildScene() { return GridView.builder( diff --git a/lib/features/home/presentation/pages/usage.dart b/lib/features/home/presentation/pages/usage.dart new file mode 100644 index 00000000..cc3dd773 --- /dev/null +++ b/lib/features/home/presentation/pages/usage.dart @@ -0,0 +1,1012 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_markdown/flutter_markdown.dart'; + +class ManualPage extends StatefulWidget { + const ManualPage({super.key}); + + @override + State createState() => _ManualPageState(); +} + +class _ManualPageState extends State { + int _selectedIndex = 0; + bool showMenu = true; + String currentType = ''; + + // 菜单标题 + final List menuTitles = const ['安全警示及使用注意事项', '机器使用说明', '保养与维修', '故障处置', '本商品搬运的要领', '关于三包与售后服务']; + + // 子菜单 + final List>> subMenus = [ + // 1. 安全警示 + [ + {'title': '特别警告', 'type': 'alert'}, + {'title': '关于本产品的警告标签说明', 'type': 'alertinstruction'}, + {'title': '安全操作须知', 'type': 'safety'}, + {'title': '安全驾驶·安全作业须知', 'type': 'safetywork'}, + ], + // 2. 机器使用 + [ + {'title': '发动前的准备', 'type': 'prepare'}, + {'title': '启动方法', 'type': 'startmethod'}, + {'title': '割草方法', 'type': 'work'}, + {'title': '停车方法', 'type': 'stop'}, + {'title': '遥控器使用', 'type': 'controluse'}, + ], + // 3. 保养与维修 + [ + {'title': '定期检查表', 'type': 'check1'}, + {'title': '行走部分及割草部分的检查', 'type': 'check2'}, + {'title': '加油、加水以及上润滑脂、润滑油一览表', 'type': 'supply'}, + {'title': '消耗零件(更换零件)一览表', 'type': 'check4'}, + {'title': '发动机', 'type': 'check5'}, + {'title': '行走装置', 'type': 'check6'}, + {'title': '使用后的维修', 'type': 'check7'}, + ], + // 4. 故障处置 + [ + {'title': '问题诊断表', 'type': 'breakdown1'}, + ], + // 5. 搬运 + [ + {'title': '搬运要领', 'type': 'starpoint'}, + ], + // 6. 三包售后 + [ + {'title': '关于三包', 'type': 'about1'}, + {'title': '关于售后服务', 'type': 'about2'}, + {'title': '关于零件的补给年限(期间)', 'type': 'supplyyear'}, + ], + ]; + + // 展开状态 —— 修复:使用late初始化,在initState中赋值 + late List expandedList; + + @override + void initState() { + super.initState(); + // 初始化菜单展开状态 + expandedList = List.filled(menuTitles.length, false); + } + + // Markdown 内容映射 + final Map markdownMap = { + 'alert': _alert, + 'alertinstruction': _alertinstruction, + 'safety': _safety, + 'safetywork': _safetywork, + 'prepare': _prepare, + 'startmethod': _startmethod, + 'work': _work, + 'stop': _stop, + 'controluse': _controluse, + 'about1': _about1, + 'about2': _about2, + 'breakdown1': _breakdown1, + 'check1': _check1, + 'check2': _check2, + 'check4': _check4, + 'check5': _check5, + 'check6': _check6, + 'check7': _check7, + 'starpoint': _starpoint, + }; + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + body: Column( + children: [ + _buildHeader(), + Expanded(child: showMenu ? _buildMenu() : _buildContent()), + ], + ), + ); + } + + // 顶部标题栏 + Widget _buildHeader() { + return Container( + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + child: Row( + children: [ + //IconButton( + // onPressed: () { + // if (!showMenu) { + // setState(() => showMenu = true); + // } else { + // Navigator.pop(context); + // } + // }, + // icon: const Icon(Icons.arrow_back_ios, size: 16), + //), + const SizedBox(width: 48), + Expanded( + child: Text( + showMenu ? '使用说明' : _getCurrentTitle(), + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w500), + ), + ), + const SizedBox(width: 48), + ], + ), + ); + } + + // 菜单列表 + Widget _buildMenu() { + return ListView(padding: const EdgeInsets.symmetric(horizontal: 16), children: [for (int i = 0; i < menuTitles.length; i++) _buildMenuItem(i)]); + } + + // 单个菜单项目 + Widget _buildMenuItem(int index) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InkWell( + onTap: () { + setState(() { + expandedList[index] = !expandedList[index]; + }); + }, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 12), + child: Row( + children: [ + const Icon(Icons.description, size: 20, color: Colors.grey), + const SizedBox(width: 8), + Expanded(child: Text(menuTitles[index])), + Icon(expandedList[index] ? Icons.keyboard_arrow_up : Icons.keyboard_arrow_down, color: Colors.grey), + ], + ), + ), + ), + if (expandedList[index]) + Padding( + padding: const EdgeInsets.only(left: 20), + child: Column( + children: subMenus[index].map((item) { + return InkWell( + onTap: () { + setState(() { + showMenu = false; + _selectedIndex = index; + currentType = item['type']; + }); + }, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 10), + child: Row(children: [const SizedBox(width: 8), Text(item['title'])]), + ), + ); + }).toList(), + ), + ), + const Divider(height: 1), + ], + ); + } + + // 内容页面 + Widget _buildContent() { + return SingleChildScrollView(padding: const EdgeInsets.all(16), child: _getContentWidget()); + } + + // 根据类型获取内容组件 + Widget _getContentWidget() { + if (currentType == 'supply') { + return _buildSupplyTable(); + } else if (currentType == 'breakdown1') { + return SingleChildScrollView( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, // 关键:避免Column无限高度 + children: [ + MarkdownBody( + data: _breakdown1, + styleSheet: MarkdownStyleSheet( + p: const TextStyle(fontSize: 15, height: 1.5), + h3: const TextStyle(fontSize: 17, fontWeight: FontWeight.bold), + ), + ), + const SizedBox(height: 12), + // 发动机表格(横向滚动) + SizedBox( + width: double.infinity, + child: SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: SizedBox( + width: MediaQuery.of(context).size.width * 1.8, // 固定表格宽度,避免布局崩溃 + child: _buildDiagnosticTable1(), + ), + ), + ), + const SizedBox(height: 20), + const Text("发电机", style: TextStyle(fontSize: 17, fontWeight: FontWeight.bold)), + const SizedBox(height: 8), + _buildDiagnosticTable2(), + const SizedBox(height: 20), + const Text("行走装置", style: TextStyle(fontSize: 17, fontWeight: FontWeight.bold)), + const SizedBox(height: 8), + _buildDiagnosticTable3(), + const SizedBox(height: 20), + const Text("割草装置", style: TextStyle(fontSize: 17, fontWeight: FontWeight.bold)), + const SizedBox(height: 8), + _buildDiagnosticTable4(), + const SizedBox(height: 30), + ], + ), + ); + } else if (currentType == 'supplyyear') { + return const Padding( + padding: EdgeInsets.all(16.0), + child: Text('本商品单个零件的提供年限为停止生产后三年。', style: TextStyle(fontSize: 16)), + ); + } else if (markdownMap.containsKey(currentType)) { + return SingleChildScrollView( + padding: const EdgeInsets.all(16), + child: MarkdownBody( + data: markdownMap[currentType]!, + styleSheet: MarkdownStyleSheet( + p: const TextStyle(fontSize: 15, height: 1.5), + h2: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + h3: const TextStyle(fontSize: 17, fontWeight: FontWeight.bold), + ), + imageBuilder: (uri, title, alt) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 6), + child: Image.asset("assets/images/$uri", fit: BoxFit.contain, width: double.infinity), + ); + }, + ), + ); + } else { + return const Center(child: Text("暂无内容", style: TextStyle(fontSize: 16))); + } + } + + // 获取当前标题 + String _getCurrentTitle() { + for (var list in subMenus) { + for (var item in list) { + if (item['type'] == currentType) { + return item['title']; + } + } + } + return '详情'; + } + + // 补给表格 + // 补给表格(HTML 转 Flutter 原生表格) + Widget _buildSupplyTable() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text('加油、加水以及上润滑脂、润滑油一览表', style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)), + const SizedBox(height: 12), + // 原生 Flutter 表格 + Table( + border: TableBorder.all(color: Colors.grey.shade300, width: 1), + columnWidths: const {0: FixedColumnWidth(80), 1: FixedColumnWidth(180), 2: FixedColumnWidth(280), 3: FixedColumnWidth(80)}, + children: [ + // 表头 + TableRow( + decoration: BoxDecoration(color: Colors.grey.shade100), + children: const [ + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '项目', + style: TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '补给(交换)的时期', + style: TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '推荐品种', + style: TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ), + ), + TableCell( + child: Padding( + padding: EdgeInsets.all(8.0), + child: Text( + '容量', + style: TextStyle(fontWeight: FontWeight.bold), + textAlign: TextAlign.center, + ), + ), + ), + ], + ), + + // 行1:燃料 + TableRow( + children: const [ + Padding(padding: EdgeInsets.all(8.0), child: Text('燃料')), + Padding(padding: EdgeInsets.all(8.0), child: Text('随时')), + Padding(padding: EdgeInsets.all(8.0), child: Text('汽车用91号以上无铅汽油或乙醇含量不超过10%的无铅汽油(E10)')), + Padding(padding: EdgeInsets.all(8.0), child: Text('10L')), + ], + ), + + // 行2:发动机机油 + TableRow( + children: const [ + Padding(padding: EdgeInsets.all(8.0), child: Text('发动机机油')), + Padding(padding: EdgeInsets.all(8.0), child: Text('每日点检有不足时补给,交换初次:20小时,初次以后:每100小时')), + Padding(padding: EdgeInsets.all(8.0), child: Text('SAE分类 一般用途:10W-30或5W-30')), + Padding(padding: EdgeInsets.all(8.0), child: Text('1.7L')), + ], + ), + + // 行3:行走轴承 + TableRow( + children: const [ + Padding(padding: EdgeInsets.all(8.0), child: Text('行走轴承')), + Padding(padding: EdgeInsets.all(8.0), child: Text('每半年')), + Padding(padding: EdgeInsets.all(8.0), child: Text('车台润滑脂')), + Padding(padding: EdgeInsets.all(8.0), child: Text('-')), + ], + ), + + // 行4:减速机 + TableRow( + children: const [ + Padding(padding: EdgeInsets.all(8.0), child: Text('减速机')), + Padding(padding: EdgeInsets.all(8.0), child: Text('每半年')), + Padding(padding: EdgeInsets.all(8.0), child: Text('美孚XHP222')), + Padding(padding: EdgeInsets.all(8.0), child: Text('-')), + ], + ), + + // 行5:电池 + TableRow( + children: const [ + Padding(padding: EdgeInsets.all(8.0), child: Text('充电或更换电池')), + Padding(padding: EdgeInsets.all(8.0), child: Text('随时,没有电的情况下')), + Padding(padding: EdgeInsets.all(8.0), child: Text('遥控器使用专用充电器;动力电池使用220V充电')), + Padding(padding: EdgeInsets.all(8.0), child: Text('23Ah')), + ], + ), + ], + ), + ], + ), + ); + } + + // ===================== 故障诊断表格 ===================== + // 1. 发动机表格 + Widget _buildDiagnosticTable1() { + return Table( + border: TableBorder.all(color: Colors.grey, width: 1), + columnWidths: const {0: FixedColumnWidth(180), 1: FixedColumnWidth(180), 2: FixedColumnWidth(220)}, + children: [ + _tableHeader(), + _tableRow("发动机无法启动或很难启动", "没有燃料", "补充燃料", isFirst: true), + _tableRow("", "燃料无法抽取", "检查油门开关、油管"), + _tableRow("", "气温过低", "按照启动方法启动3-5次"), + _tableRow("", "火花塞打火不良", "拆卸清扫或更换"), + _tableRow("", "启动电压低", "充满电或者更换启动电池"), + _tableRow("", "喷油嘴或者过滤器堵塞", "清洁或者更换过滤器"), + _tableRow("", "其他", "按【启动方法】再启动,仍无法启动时,请联系销售店"), + _tableRow("中途熄火", "暖机不足", "充分暖机", isFirst: true), + _tableRow("", "割刀打到异物", "移动到平坦位置,检查割刀是否完整后重新发动"), + _tableRow("", "割刀柄缠绕异物", "去除异物,检查割刀是否完整后重新发动"), + _tableRow("发动机突然停止", "没有燃料", "补给", isFirst: true), + _tableRow("", "受到硬物冲击", "挪位置后再尝试启动"), + _tableRow("", "其他", "联系销售店"), + _tableRow("低速空转状态不良(发动机的旋转不稳定)", "空气过滤器的网孔堵塞", "清扫或交换", isFirst: true), + _tableRow("", "风扇处网孔堵塞", "清扫"), + _tableRow("", "其他", "联系销售店"), + _tableRow("输出或加速不足", "燃料不良", "更换", isFirst: true), + _tableRow("", "空气过滤器的网孔堵塞", "清扫或交换"), + _tableRow("", "风扇处网孔堵塞", "清扫"), + _tableRow("", "超负荷", "减荷"), + _tableRow("", "油门开关运行不畅", "清洁转轴或调节拉线钢丝"), + _tableRow("", "其他", "联系销售店"), + _tableRow("发动机附近有异常声音或异常振动", "停机检查升降等部件是否有松动", "联系销售店", isFirst: true), + _tableRow("发动机机油消耗过快", "", "联系销售店或本田售后店", isFirst: true), + _tableRow("发热", "发动机机油不足", "补给", isFirst: true), + _tableRow("燃料消耗过快", "空气过滤器的网孔堵塞", "清扫或更换", isFirst: true), + _tableRow("", "其他", "联系销售店"), + _tableRow("大量黑烟排出(状态不良)", "空气过滤器的网孔堵塞", "更换合适的机油", isFirst: true), + _tableRow("", "风门开合不畅", "清洁转轴或调节拉线钢丝"), + _tableRow("", "其他", "联系销售店"), + _tableRow("大量白烟排出(状态不良)", "燃料不良", "交换", isFirst: true), + _tableRow("", "发动机机油粘度不合适", "更换合适的机油"), + _tableRow("", "机油过多溢出至燃烧室", "燃烧至不冒白烟为止"), + _tableRow("", "其他", "联系销售店"), + ], + ); + } + + // 2. 发电机表格 + Widget _buildDiagnosticTable2() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Table( + border: TableBorder.all(color: Colors.grey, width: 1), + columnWidths: const {0: FixedColumnWidth(180), 1: FixedColumnWidth(180), 2: FixedColumnWidth(220)}, + children: [ + _tableHeader(), + _tableRow("发热量", "网孔堵塞", "清扫", isFirst: true), + _tableRow("", "检查三角带完好度和松紧度", "张紧或更换三角带"), + _tableRow("不发电", "其他", "联系销售店", isFirst: true), + ], + ), + ); + } + + // 3. 行走装置表格(支持横向滚动) + Widget _buildDiagnosticTable3() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Table( + border: TableBorder.all(color: Colors.grey, width: 1), + columnWidths: const {0: FixedColumnWidth(180), 1: FixedColumnWidth(180), 2: FixedColumnWidth(220)}, + children: [ + _tableHeader(), + _tableRow("无法原地转弯或直线行走", "其他", "联系销售店", isFirst: true), + _tableRow("", "电机刹车异常", "联系销售商"), + _tableRow("刹车或停车制动异常", "刹车线路异常", "联系销售商", isFirst: true), + _tableRow("", "发动机转速过低", "调高发动机转速"), + ], + ), + ); + } + + // 4. 割草装置表格(支持横向滚动) + Widget _buildDiagnosticTable4() { + return SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Table( + border: TableBorder.all(color: Colors.grey, width: 1), + columnWidths: const {0: FixedColumnWidth(180), 1: FixedColumnWidth(180), 2: FixedColumnWidth(220)}, + children: [ + _tableHeader(), + _tableRow("割刀不旋转", "安全离合器损坏", "更换安全离合器", isFirst: true), + _tableRow("", "割刀损坏或脱落", "更换"), + _tableRow("作业时异常振动", "转入异物", "清除异物", isFirst: true), + _tableRow("", "草湿度大", "等草干后作业"), + _tableRow("割除的草无法顺利排出", "割草高度过低", "调高割草高度", isFirst: true), + _tableRow("", "发动机转速过低", "调高发动机转速"), + _tableRow("", "作业速度过快", "减慢作业速度"), + _tableRow("", "草过长", "调高割草高度"), + _tableRow("割草有残留", "发动机转速过低", "调高发动机转速", isFirst: true), + _tableRow("", "作业速度过快", "减慢作业速度"), + _tableRow("", "割刀盘护罩内积草过多", "清理积草"), + _tableRow("", "割刀太低", "调高割草高度"), + _tableRow("刀销地面", "地形起伏大", "随地形调整割草高度", isFirst: true), + _tableRow("", "割刀或割刀架弯曲", "更换"), + ], + ), + ); + } + + // ===================== 工具方法 ===================== + TableRow _tableHeader() { + return TableRow( + decoration: BoxDecoration(color: Colors.grey.shade100), + children: const [ + Padding( + padding: EdgeInsets.all(8), + child: Text("问题现象说明", style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text("原因", style: TextStyle(fontWeight: FontWeight.bold)), + ), + Padding( + padding: EdgeInsets.all(8), + child: Text("处理", style: TextStyle(fontWeight: FontWeight.bold)), + ), + ], + ); + } + + TableRow _tableRow(String title, String reason, String solution, {bool isFirst = false}) { + return TableRow( + children: [ + Padding( + padding: const EdgeInsets.all(8), + child: Text(isFirst ? title : "", style: isFirst ? const TextStyle(fontWeight: FontWeight.bold) : null), + ), + Padding(padding: const EdgeInsets.all(8), child: Text(reason)), + Padding(padding: const EdgeInsets.all(8), child: Text(solution)), + ], + ); + } + + // ===================== Markdown 内容 ===================== + static const String _alert = ''' +## 特别警告 +- 本商品为专业割草机,除割草以外,未经允许,严禁用于其它用途。 +- 本商品禁止在公路、国道等道路上行驶,如果因在道路上行驶而发生的交通事故,我公司概不负责。 +- 请勿对本商品进行改造。另外,为避免事故发生,请勿拆卸零部件,尤其是控制箱盖板和整机防护罩等。容易引起事故发生。 +- 使用遥控功能前,请先开启整机电源,开启遥控器时,必须将遥控器急停旋钮顺时针旋转跳起,长按3秒“开启”遥控器按钮。关闭遥控器时,长按3秒“关闭”遥控器按钮。 +- 如果运行过程中,点击遥控器按钮不起作用时,请长按2秒“开启”遥控器按钮,然后操作即可;如果仍然不起作用,请立即停车,重新启动遥控系统。 +- 本机自带遥控保护系统,因室外作业环境复杂,无线信号易受干扰,当遥控信号受干扰严重或超出遥控范围,机器将自动停止行走和割草;移动位置,确定遥控器通信正常后,重新启动遥控器。 +- 本机自带电池电压显示器,电量或电压过低时(电压低于48V),请及时更换电池或给电池充电;如果长时间不用,每月开启一次查看电压,若低于48V,请及时充电,以免发生过度放电现象,导致电芯损坏。 +- 遥控器使用专用充电电池,如果长时间不用,请取出,并及时充电! +'''; + + static const _alertinstruction = ''' +本商品将附下列警告标签。警告标签特别记载了需要注意的安全事项,使用本商品时必须遵守标签的指示,切勿做任何被禁止的事项。 + +**请看清警告标签的内容。** + +![警告标签](alert1.png) +![警告标签](alert2.png) +![警告标签](alert3.png) +![警告标签](alert4.png) +![警告标签](alert5.png) + +**为方便了解警告标签的内容,请保持标签清洁。警告标签损坏、丢失或判断不清时,请更换新品。根据本手册或事物确认并与销售网点联系** +'''; + + static const String _safety = ''' +安全使用本商品,必须注意防毒、防火、防机器事故发生。必须高度重视,提高警惕,万万不可粗心大意。为确保人身安全,应注意以下注意事项: +- 操作本商品前请务必阅读说明书,注意警告标示。 +- 操作本商品前请务必在开阔地带进行熟悉,避免误操误撞。 +- 作业人员必须带安全服装、防护眼镜、手套、耳塞和安全头盔。 +- 作业时,机器周围不要有其他人作业,防止发生意外事故。 +- 本机器动力用汽油作燃料,为易燃品,应注意防火。严禁在汽油机旁边点火和吸烟。严禁拆解电池等配件。 +- 加油后注意将油箱盖旋紧,如有外漏燃油擦干净,将机器移离加油点的地方再起动。 +- 禁止在汽油机工作状态下添加或倒出燃油。 +- 操作本商品时,双手不要触及消音器、汽缸体避免烫伤,发生意外事故。 +- 禁止急起步、急加速、急转弯和急停车。容易造成操作者被挥起或者车辆打滑、翻倒等事故。 +- 在倾斜路面上时,建议低速行驶,避免造成车辆打滑、翻倒等事故。 +- 本商品传动使用的是皮带,工作状态下必须关闭机器外罩,确保人身安全。 +- 存放前应将油箱内、汽油过滤器内、汽化器内的燃油放干净或消耗完,将机器擦干净,存放在通风、远离烟火的地方。 +- 存放时应放在小孩碰不到的地方,避免发生意外。 +- 禁止使用强酸、强碱等特殊工作液。 +- 工作结束后,操作人员需洗净身体暴露部位,并对各类穿戴衣具进行清洗。 +- 禁止下列人员操作本商品: + 精神疾病患者;醉酒的人;无操作知识的人;未成年人或老人; + 孕妇或哺乳期的妇女;过度疲劳者。 +'''; + + static const String _safetywork = ''' +### 驾驶前须知 +### 请穿好安全服装,戴好安全护具 +驾驶作业时,请穿戴适合作业的服装,不要穿戴背心短裤、拖鞋等轻便服装。并穿好防护鞋、戴好防护眼镜、手套等,做好安全准备。 +长时间作业时,为了减少噪音对人体的伤害,建议操作者佩戴耳塞,防止噪音。 +### 作业前的点检 +驾驶作业前,请做好必要的点检工作。发现异常的地方,请马上补修。另外,驾驶作业前,请检查清理车内堆积的杂草。以防火灾发生。 +### 严禁烟火 +加油、提取燃料时,请远离烟火。加油时,请在确认车辆熄火后进行。发动机保养或电池充电时,严禁靠近烟火。 +### 禁止在公路上行驶 +### 禁止乘坐 +本商品禁止人员乘坐。 +### 禁止鲁莽驾驶 +禁止喝酒、身体不良时作业。另外,请不要让不适合驾驶和作业的人员操作。 +### 确保作业安全(禁止入内) +驾驶作业时,本商品周围(特别是儿童),禁止靠近,至少保持5m的距离。必要时,请在作业地点前,摆放看板写明“割草作业中”、“禁止靠近” 等字样。 +驾驶作业前,请确认好机器状况,无异响、零部件松动等情况,确保工作安全。 +### 禁止在通风不良的地点启动行驶 +在发动机启动时,请必须在换气通风的场所进行。以防止排气中毒。 +### 请距离本商品5米后启动 +请必须在距离车辆5米后启动,以防刮伤。 +### 禁止、急加速、急转弯、急停车 +请不要进行急行、急加速、急转弯,急刹车等危险操作。容易造成车体打滑,翻车等事故。 +### 安全速度的遵守 +前进时,请确认好周围安全,驾驶时请确认好路面状况,以安全速度驾驶。 +### 推荐在坡上操作 +机器在斜坡工作的时候,请在斜坡上方操作。 +### 禁止在机器正下方作业 +机器斜坡工作时,在斜坡下操作一定不要站在机器的正下方。 +### 禁止作业时打开割刀罩 +请不要在作业时打开割刀罩。飞出的小石子等杂物会飞散到周围,造成危险。 +### 注意倾斜路面 +在倾斜路面驾驶时,请选择“低速档”行驶或转弯。否则,容易造成车体打滑,翻车等事故发生。 +### 禁止在急坡度路面使用 +### 注意检查并及时清理机器内部集草 +在恶劣环境或草量的地块割草,要注意机器内部碎草造成的堆积,尤其是排烟部、发动机风扇和发电机内部,及时清理。 +注意:碎草堆积会降低发动机和发电机的通风量,长期不清理会降低发动机和发电机使用效果,缩短机器使用寿命。 +### 注意路面湿滑,造成车体打滑 +### 注意地面障碍物,防止碰撞损坏 +### 注意地面颠簸,造成车体扭曲变形 +### 注意塌方 +请不要在路边、沟边作业。特别是在雨后、地震后,容易引起塌方等事故发生。 +### 停车时的安全确认 +停车时,务必关闭机体和遥控器电源。 +### 危险场所禁止停车 +停车时,请选择在平坦路面。不要在危险处停车。另外,请不要在易燃物附近停车。 +### 倾斜路面停车时,要固定车轮 +请不要在倾斜路面停车,如有迫不得已的情况,需停车时,请把车轮固定好。 +### 使用后的清扫 +使用后,请清除掉车下堆积的杂草等杂物。以防止火灾发生。 +#### 保养检查时请熄火 +保养或检查车辆时,必须在关闭电源后进行。 +### 注意烫伤 +发动机熄火后,各个部位都是高温状态,容易烫伤。请待车辆冷却后再进行保养。 +### 本商品禁止在公路、国道等道路上行驶。 +'''; + + static const String _prepare = ''' +### 发动前检查 +发动前必须进行车体检查,如有异常,须马上处理。 +请将车身上的杂草等杂物清洗干净,以免火灾等事故的发生。 +发动机和发电机空气入口和排气口处堆积过多杂草,会导致发动机过热,车体发生异常等情况。作业前,必须认真检查好发动机和发电机空气入口和排气口处有无异物堆积,如有堆积,请及时清理干净。 +### 燃料的检查和加注,电量的检测和充电 +- 加油时务必远离烟火 +- 加油时,务必在发动机停止状态下进行。 +- 加油时,请注意不要超过油面(给油口面过滤底面),注意不要把油漏到加油口外。如有外漏,请马上擦洗干净。 +- 充电时,要使用标准220V电压,不得违规操作。 +- 充电时,检查周围是否有易燃物品,远离危险场所。 +- 充电时,注意通风。 +- 充电处应放在儿童不易触碰的地方,当心潜在危险。 +- 请检查油量、电量是否正常。 +- 请确认电量表,不足或低于48V时,及时充电。 +- 请确认油量,不足或报警时,打开油盖,及时加油,加满后关闭油盖。 +- 检查机器工作总时间,发动机机油状态是否正常,机油浑浊,及时更换。 +### 建议: +- **使用燃料:汽车用91号以上无铅汽油或乙醇含量不超过10%的无铅汽油(E10)。** +- **油箱容量:10L。** +- **机油:加注汽车用四冲程机油到油尺的游标中间位置,标号根据季节更换。** +- **机油容量** +- **不更换机油滤清器:1.7 L,更换机油滤清器:1.9 L。** +'''; + + static const String _startmethod = ''' +## 警告 +- 启动割草机前必须确认周围安全,退至5m外。 +- 启动发动机时必须在通风环境好的场所进行。避免引起排气中毒事故发生。 +- 启动发动机时必须确认周围安全。 +- 启动发动机时,必须确认处于无石块等异物的平整地块,处于停车状态。避免启动时损坏割刀或石块飞出等,导致使用者或第三者受伤。 +### 行走启动 +- 机器急停按钮顺时针旋转,整机解锁复位。 +-点按机器电源按钮,仪表和指示灯亮。 +- 确认电量 +- 长按遥控器电源按钮,电源按钮亮起,,至遥控器上电源显示灯。 +- 拨动方向摇杆,割草机行驶 +- 长距离行走时须将发动机启动,并将割刀转速提升至最高,防止电量消耗过快。 +'''; + + static const String _work = ''' +## 警告 +- 驾驶时不要靠近周围的人。 +- 出发时必须确认周围安全,注意路面坡度等状况,以安全速度运行。 +- 禁止急发进、急加速、急转弯,避免造成机器打滑、翻倒等事故发生。 +- 在倾斜路面上应低速行驶,否则容易造成机器打滑、翻倒等事故发生。 +- 禁止横穿倾斜路面,容易造成机器打滑或翻车。 +- 禁止在倾斜路面上转弯,容易造成车辆逆转、打滑或翻车。 +- 视线不清或狭窄道路、倾斜、起伏等行驶环境差的路上,请遵从诱导者的指示,做好安全确认后再行驶。 +### 割草启动 +- 确认机器前后左右安全。 +- 确认行驶模式。 +- 确认割刀盘升至最高位置。 +- 确认遥控器正常。 +- 当摁下A键时,A键亮起时左摇杆上拨上拨发动机拨叉开关,注意:发动机点火启动后,立即松开该按钮,每次点火时间不得超过3s,时间过长易损坏发动机,冬季冷机点火困难,可以反复3-5次,中间需停顿5s。 +- 割刀正常旋转,机器声音频率均匀正常,即启动成功。 +- 上下拨动切割高度拨叉开关,将割刀盘调整至所需位置。 +- 当摁下A键时,A键亮起时右摇杆上拨割草电机启动将割刀转速调整至所需转速。 +- 割草机行驶,开始割草。 +### 割草停止 +- 下拨发动机停止拨叉开关,发动机熄火。 +- 注意:等待割刀完全停止旋转后,再靠近机器查看。 +'''; + + static const String _stop = ''' +## 警告 +- 禁止急停车,容易造成机器打滑翻倒。 +- 请在平坦坚硬且没有危险的场所停车;勿在倾斜路面停车,有不得已情况的,必须固定车轮。 +- 请不要靠近易燃易爆物品停车。 +### 割草机停车与关闭 +- 长按割草机电源按钮2s及以上,松开电源键,按钮指示灯闪烁至熄灭,割草机关机。 +- 特别紧急情况下,按下遥控器上B按钮,割草机停车,此情况会造成部分数据丢失。 +- 长按遥控器电源开关,直至显示屏熄灭,遥控器关机。 +- 注意:长时间停放车辆时需要选择水平的地面,避免车头向下超过20°。 +- 注意:若长时间不使用,请至少每月一次给割草机充电,间隔不大于30个自然日。 +'''; + + static const String _controluse = ''' +## 警告 +- 非专业人员请勿拆解遥控器。 +- 遥控器长时间不使用,请将电池充满电。 + +### 遥控器 +![这是图片](control.png) +- 1.2.4G 3dB天线 +- 2.USB1/图像输出 +- 3.拨动三档开关E +- 4.拨 轮 C +- 5.拨 轮 C +- 6.电量指示灯① +- 7.按键 A +- 8.开关键 +- 9.按键B +- 10.右摇杆×2、Y2 +- 11.拨 轮 D +- 12.拨动三档开关F +- 13.USB2/充电 +### 遥控器电源 +![这是遥控器电源图片](controlbattery.png) +| 闪灯方式 | |电量 | +| ---- | ---- |---- | +| ●●●● | | 76%~100% | +| ●●●○ | |51%~75% | +| ●●○○ | | 26%~50% | +| ●○○○ | | 1%~25% | + +### 操作割草机行走 +![这是遥控器电源图片](operationwalk1.png) +左摇杆控制割草机前进 +上推前进-下推后退 + +![这是遥控器电源图片](operationwalk2.png) +右摇杆控制机器左右旋转 +左推左转-右推右转 + +### 急停按钮 +![这是遥控器电源图片](stopbutton.png) +当按下B键时B键亮起,机器停止运行,发动机熄火。 +### 底盘升降 +![这是遥控器电源图片](dipan.png) +上拨抬高割刀,下拨降低割刀,中间位置高度保持不变,拨杆需要手动回中。 +### 发动机启停 +![这是遥控器电源图片](fadongji.png) +当摁下A键时,A键亮起时左摇杆上拨发动机点火,下拨发动机熄火,拨杆自动回中。 + +**注:发动机点火启动后,立即松开该按钮,每次点火时间不得超过3s,时间过长易损坏发动机,冬季冷机点火困难,可以反复3-5次,中间需停顿3s** +### 割刀转速调整 +![这是遥控器电源图片](adjuctvec.png) +当摁下A键时,A键亮起时右摇杆上拨提高割刀转速,下拨降低割刀转速,中间位置保持不变,拨杆自动回中。 + +### 模式切换 +![这是遥控器电源图片](modelchange.png) +拨挡在上拨档时为远程遥控模式 +拨挡在中间档时为蓝牙遥控模式 +拨挡在下拨档时为本地遥控模式 + +**操作步骤** +- 上拨“切割高度”抬高割刀至最高处,松开该拨扭。 +- 上拨“发动机”拨杆,点火发动机,点火成功后立即松开。 +- 根据工作需要调节油门大小、割刀高度、方向遥杆等。 +- 工作结束,下拨“发动机”拨杆,发动机熄火,长按“电源按钮”关闭遥控器,所有开关回归零位。 +**注意:遥控有效距离:无干扰情况下200米。** +'''; + + static const String _about1 = ''' +**注意:**对本商品进行维修或零件更换时,请务必使用本公司的正牌零件。如使用非本公司零件,本公司将不对商品进行保修等服务。 +| 项目 | 更换时间| 类型 | 三包期限 | +| ---- | ---- |---- |---- | +| 发动机 | 发现不良时更换 | 关键零部件 | 1年 | +| 发电机 | 发现不良时更换 | 关键零部件 | 1年 | +| 控制器 | 发现不良时更换 | 关键零部件 | 1年 | +| 电机 | 发现不良时更换 | 关键零部件 | 1年 | +| 减速机 | 发现不良时更换 | 关键零部件 | 1年 | +| 驱动器 | 发现不良时更换 | 关键零部件 | 1年 | +| 遥控器 | 发现不良时更换 | 关键零部件 | 1年 | +| V形皮带 | 发现不良时更换 | 易耗橡胶件 | 3个月 | +| 轮胎/履带 | 发现不良时更换 | 易耗橡胶件 | 3个月 | +| 割刀 | 发现不良时更换 | 易耗金属件 | 3个月 | +| 升降导套 | 发现不良时更换 | 易耗尼龙件 | 3个月 | +'''; + + static const String _about2 = ''' +如果在使用过程中发生问题、或者有疑问以及对于售后服务的要求,请直接与销售店或本公司售后服务中心联系。联系时请告知型号标签上的制造号码、发动机品牌及型号等相关商品信息。配置的发动机品牌名称及型号名称,请参照说明书的〖技术参数〗。 +'''; + + static const String _breakdown1 = ''' +**注意** +- 本商品发生问题时,请停止使用。参照下列的问题诊断表来进行适当的处理。若发生下列问题诊断表没有记载的问题,或根据处理方法页没有解决问题的情况下,请直接与销售网点联系。 +- 下列的处理内容中也包括很多专门知识,以及指定的专门工具、仪器等,若顾客无法个人处理,请联系销售网点 + +### 发动机 +'''; + + static const String _check1 = ''' +### 发动机的检查 +#### 日常检查 +- 燃料的检查 +- 发动机机油的检查 +- 各部螺丝松紧的检查 +- 异常振动、异常声音 +- 电控系统的检查 +- 风门、油门开关转轴动作的检查 + +#### 定期检查 +| 项目 | 作业额度 | +| ---- | ---- | +| 空气滤清器检查 | 每日2小时 | +| 空气滤清器的清洁 | 每6个月或100小时 | +| 空气滤清器滤芯的更换 | 每2年或每500小时 | +| 各部的清扫及松紧的检查 | 每日8小时 | +| 发动机油检查、补给 | 每日8小时 | +| 发动机油的交换 | 初次为20小时,以后为每100小时 | +| 火花塞的清扫 | 每 50小时 | +| 燃料过滤器的清扫 | 每200小时 | +| 火花塞间隙的清扫调整 | 每200小时 | +| 燃料管的更换 | 每2年 | +| 发电机检查 | 每日2小时 | +| 发电机的清洁 | 每日8小时 | +| 电池的检查、补给 | 每日8小时 | +| 大修 | 每1000小时 | +'''; + + static const String _check2 = ''' +**注意** +- 涉及拆卸及安装部件时,注意不要弄伤手指。 +- 因检查及作业需要打开或拆卸时,检查结束后必须还原。 +'''; + + static const String _check4 = ''' +**注意** +对本商品进行维修或零件更换时,请勿必使用本公司的正牌零件。如使用非本公司零件,本公司将可能不对商品进行保修等服务。 +| 项目 |更换时间 | 类型 | 三包期 | +| ---- | ---- |---- |---- | +| V形皮带 | 发现不良时更换 | 橡胶件 | 3个月 | +| 轮胎/履带 | 发现不良时更换 | 橡胶件 | 3个月 | +| 割刀 | 发现不良时更换 | 金属件 | 3个月 | +| 升降导套 | 发现不良时更换 | 尼龙件 | 3个月 | + +**建议:** +V形皮带用满100小时后,最好更换新的。 +轮带/履带因外力导致漏气、断裂等不属于保修范围。 +'''; + + static const String _check5 = ''' +**警告** +- 维修,保养时必须停止发动机, +- 发动机停止后一段时间内,发动机各部及机油出于高温状态时,避免烫伤,请冷却后再维修,保养。 + +**发动机机油的检查补给、更换** +- 根据国家法律规定处理废油。 +- 如不及时补油,发动机将会产生故障,因此,请及时补充制定的机油。 + +**建议:** + 请在发动机启动前,或熄火十分钟之后检测油量。因为发动机熄火时,车内各部还残留有机油,无法正常的检测油量。 + + ![这是图片](check1.png) + ![这是图片](check2.png) + +检查: + +1)将车辆停放在平坦的路面。 + +2)取下给油塞(如右图所示)。 + +3)检查机油塞尺。 + +4)机油不足时,补充机油。 + +5)试装机油塞尺,机油位处于塞尺中部。 + +6)装上给油塞。 + +![这是图片](check3.png) +![这是图片](check4.png) +机油更换或更换机油过滤器 + +1)准备装机油的容器。 + +2)把机油排油塞取下,排出机油。 + +3)更换机油过滤器(如右图所示)。 + +4)安装机油排油塞,灌入新机油。 + +5)整机试运行5min。 +![这是图片](check5.png) +![这是图片](check6.png) +![这是图片](check7.png) +**注意:请割草后,每天检查空气过滤器。过滤器过脏,容易引起发动机故障、输出动力不足、寿命降低等情况发生。** + +1)打开空气过滤器外壳卡扣。 + +2)打开外壳,拿出空气过滤器,从滤芯支架上松开两个弹簧片,从支架上拆下泡沫滤芯,拆下纸质滤芯。 + +3)检查两个滤芯,如果损坏则更换。始终按计划的时间间隔更换纸质滤芯。 + +4)如果要重复使用,请清洁滤清器元件。纸质滤芯:在硬质表面上轻敲滤芯数次来清除污垢,或通过滤芯从清洁的面向发动机的一面吹压缩空气 [不超过207 kPa (2.1 kgf/cm2, 30 psi)] 。切勿试图刷掉污垢; 刷洗会迫使污垢进入纤维。 如果纸质滤芯太脏了,请更换。 +泡沫滤芯:用温肥皂水清洗,冲洗干净,彻底干燥。 或用不易燃的溶剂清洗并晾干。将滤芯浸入干净的机油中,然后挤出多余的油。 如果泡沫中残留的油过多,发动机在启动时会冒烟。 + +5)用湿抹布擦去空气滤清器主体和盖子内部的污垢。小心操作以防止灰尘进入化油器的气室。 + +6)重新安装纸质滤芯,将泡沫滤芯放在滤芯支架上,然后重新安装空气滤清器外壳上的滤芯支架。紧紧地钩住两个弹簧片。 + +7)用手牢牢锁定空气滤清器盖锁。 +![这是图片](check8.png) +![这是图片](check9.png) +**注意:向外拔出火花塞时,请握住火花塞盖取下。用力拽线容易扯断软线。松动的火花塞会过热并损坏发动机。过度拧紧火花塞会损坏气缸盖中的螺纹。** + +1)断开火花塞盖,清除火花塞区域周围的污垢。 + +2)用 5/8 英寸火花塞扳手拆下火花塞。 + +3)检查火花塞: 如果损坏、严重结垢、密封垫圈状况不佳,或电极磨损,请更换。 + +4)用线型塞尺测量火花塞电极间隙测量。 如有必要,小心弯曲侧电极来纠正间隙。间隙应为:0.7-0.8 毫米。 + +5)用手小心地安装火花塞,以避免交叉螺纹。 + +6)火花塞装好后,用5/8英寸火花塞拧紧扳手压缩密封垫圈。安装新火花塞时,拧紧1/2圈以压缩垫圈。重新安装原厂火花塞时,拧紧1/8-1/4圈以压缩垫圈。 + +扭矩:18.0 N•m (1.8 kgf•m, 13 Ibf•ft) +推荐火花塞:ZER5F (NGK)或FR2A (NGK) +'''; + + static const String _check6 = ''' +**警告** +- 保养,维修时必须停止发动机并且确认刀盘停转。 +- 发动机停止一段时间内,各部或发动机本身出于高温时,为避免烫伤,请待冷却后再保养维修。 + +因橡胶固有特性,使用一段时间后会松弛,需要注意根据使用情况适当张紧,否则容易出现脱带情况。 +'''; + + static const String _check7 = ''' +**注意** + +- 切勿用水清洗发动机和底盘,避免浸水导致电路故障或生锈。 +- 坚硬的粘着物容易引起故障,请清除干净。 +- 如因坚硬的粘着物而不能运行时,请勿强行操作。 + +**通常使用后的维修及保养** +- 使用后及时清除粘着物的草或泥等杂物。 +- 请在水泥地等坚硬干燥地面驻车。 +- 请在室内存放。 + +**长期的保管方法** + +**警告** + +勿在烟火处保管,避免火灾。 +- 请依照〖停车方法〗的顺序停车。 +- 清除粘着的草和泥等杂物。 +- 对紧固件和已锈蚀的部位应涂黄油,进行防锈处理。 +- 每个月充满电一次,将有助于延长电池的使用寿命。 + +请待发动机冷却后,排空油箱和化油器,整机盖上防水罩,水平存放在阴凉干燥的地方保管。将汽油过滤器处固定卡箍去掉。燃油管路从过滤器处拔出,将燃油箱中的油排空到认可的汽油容器中。如果燃油箱配有阀门,将燃油阀转到OPEN或ON位置以启用排空。排空完成后,可启动发动机至自然熄火以消耗残余的汽油,重新连接燃油管路。松开化油器放油螺钉,将化油器中的油排空到认可的汽油容器中。 排空完成后,拧紧化油器放油螺钉。 + +![这是图片](check0.png) + +- 如果您的发动机在油箱和化油器中存放汽油,那么降低汽油蒸汽着火的风险是非常重要的。选择通风良好的,远离任何带火焰的设备的存储区域,如炉子、热水器或烘干机。还要避开任何产生火花的电动机的区域,或操作电动工具的区域。 +- 如果可能,请避开高湿度的存储区域,因为那样会促进生锈和腐蚀。 +- 除非所有燃料已从燃油箱中排出,否则将燃油阀保持在CLOSED或OFF位置以减少燃油泄漏的可能性。 +- 在发动机和排气系统冷却后,盖上发动机以防止灰尘进入。高温发动机和排气系统会点燃或熔化一些材料。 +- 请勿使用塑料片作为防尘罩。 +- 无孔盖会使机器不易蒸发水分,促进生锈和腐蚀。 +'''; + + static const String _starpoint = ''' +**警告** +- 请把货车停放在平坦路面,必须固定前轮。 +- 作业过程中请不要让人靠近车辆及渡板。 +- 渡板要很强的强度,可承受机械重量和负载的重量。宽度比履带/轮胎宽2倍以上。长要比货车或台面高4倍,并要做好防滑处理。 +- 确定渡板的挂钩挂在货台上台和货台没有断层和错位。 +- 请缓速前进,最好采用MT模式,装车。 +- 请不要在渡板上转弯,容易坠车。 +- 在运输前,确定把车体固定在货车的货台上。 + ![这是遥控器电源图片](starpoint1.png) +![这是遥控器电源图片](starpoint2.png) +- 把货车停放在平坦路面,固定车轮。 +- 确定渡板的挂钩挂在货台上台和货台没有断层和错位 +- 请缓速前进、装车。 +- 根据〖停车方法〗的顺序停车,并用钢丝或绳索将车辆固定在货车货台上。 +'''; +} diff --git a/lib/features/home/presentation/routes/home_routes.dart b/lib/features/home/presentation/routes/home_routes.dart index 487ca2f7..ac36c274 100644 --- a/lib/features/home/presentation/routes/home_routes.dart +++ b/lib/features/home/presentation/routes/home_routes.dart @@ -3,6 +3,7 @@ import 'package:go_router/go_router.dart'; import 'package:maibu_satabot_v2/features/home/presentation/pages/dj_page.dart'; import 'package:maibu_satabot_v2/features/home/presentation/pages/home_page.dart'; import 'package:maibu_satabot_v2/features/home/presentation/pages/productDesc.dart'; +import 'package:maibu_satabot_v2/features/home/presentation/pages/usage.dart'; import '../../../../core/di/injection.dart'; import '../../../../core/router/route_paths.dart'; @@ -26,7 +27,8 @@ class HomeRoutes { ), GoRoute(path: RoutePaths.routePlan, builder: (context, state) => const RoutePlanPage()), GoRoute(path: RoutePaths.djMap, builder: (context, state) => const DjPage()), - GoRoute(path: RoutePaths.productDesc, builder: (context, state) => const ProductPage()), + GoRoute(path: RoutePaths.productDesc, builder: (context, state) => const ManualPage()), + GoRoute(path: RoutePaths.usage, builder: (context, state) => const ProductPage()), GoRoute( path: RoutePaths.runningStatus, // builder: (context, state) => const RunningStatusPage(), diff --git a/lib/features/machine_details/presentation/pages/machine_details_page.dart b/lib/features/machine_details/presentation/pages/machine_details_page.dart index d9b66615..918fa7f2 100644 --- a/lib/features/machine_details/presentation/pages/machine_details_page.dart +++ b/lib/features/machine_details/presentation/pages/machine_details_page.dart @@ -348,7 +348,8 @@ class _MachineDetailsPageState extends State { if (title == "使用说明") { context.go(RoutePaths.productDesc); } else { - ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('暂未开放$title功能'))); + context.go(RoutePaths.usage); + //ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('暂未开放$title功能'))); } }, child: Row( diff --git a/pubspec.lock b/pubspec.lock index e03bc0bc..b2bb7c93 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -397,6 +397,14 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "6.2.1" + flutter_markdown: + dependency: "direct main" + description: + name: flutter_markdown + sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27" + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.7.7+1" flutter_plugin_android_lifecycle: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 72df7f76..61823876 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -122,6 +122,7 @@ dependencies: syncfusion_flutter_gauges: ^32.2.8 markdown_widget: ^2.0.0 # 产品参数用的 markdown 渲染 + flutter_markdown: ^0.7.1 #qr_code_scanner: ^1.0.1 # 用于扫描二维码