123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import 'package:flutter/material.dart';
- import 'package:flutter_screenutil/flutter_screenutil.dart';
- import 'package:smartledz_wifi_test/models/wifi_model.dart';
- class WifiItem extends StatefulWidget {
- final WifiModel wifiModel; // wifi模型
- final bool active; // 是否选中
- final Function(WifiModel wifiModel)? onTap; // 是否选中
- const WifiItem({
- super.key,
- required this.wifiModel,
- this.active = false,
- this.onTap,
- });
- @override
- State<WifiItem> createState() => _WifiItemState();
- }
- class _WifiItemState extends State<WifiItem> {
- // 测试结果与颜色的对应关系
- final Map<String, Color> resultAsColor = {
- "未测试": Colors.grey,
- "正在测试": Colors.blue,
- "测试通过": Colors.green,
- "未通过": Colors.red,
- "连接失败": Colors.red,
- };
- @override
- Widget build(BuildContext context) {
- double borderWidth = .7.sp; // 边框宽度
- Color resultColor = Colors.grey; // 测试结果文本颜色
- if(resultAsColor.containsKey(widget.wifiModel.result)){
- resultColor = resultAsColor[widget.wifiModel.result]!;
- }
- return GestureDetector(
- onTap: ()=>widget.onTap?.call(widget.wifiModel),
- child: Container(
- height: 50.sp,
- decoration: BoxDecoration(
- color: widget.active? Colors.pink.shade100: null,
- border: Border(
- bottom: BorderSide(color: Colors.grey, width: borderWidth)
- )
- ),
- child: Row(
- children: [
- Expanded(
- child: Container(
- alignment: Alignment.centerLeft,
- padding: EdgeInsets.symmetric(horizontal: 5.sp),
- child: Text(widget.wifiModel.ssid, style: TextStyle(fontSize: 18.sp)),
- ),
- ),
- Container(
- alignment: Alignment.center,
- width: 50.w,
- decoration: BoxDecoration(
- border: Border.symmetric(vertical: BorderSide(color: Colors.grey, width: borderWidth))
- ),
- child: Text(widget.wifiModel.rssi.toString(), style: TextStyle(fontSize: 14.sp, color: Colors.green)),
- ),
- Container(
- alignment: Alignment.center,
- width: 80.w,
- child: Text(widget.wifiModel.result, style: TextStyle(fontSize: 14.sp, color: resultColor)),
- ),
- ],
- ),
- ),
- );
- }
- }
|