wifi_item.dart 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter_screenutil/flutter_screenutil.dart';
  3. import 'package:smartledz_wifi_test/models/wifi_model.dart';
  4. class WifiItem extends StatefulWidget {
  5. final WifiModel wifiModel; // wifi模型
  6. final bool active; // 是否选中
  7. final Function(WifiModel wifiModel)? onTap; // 是否选中
  8. const WifiItem({
  9. super.key,
  10. required this.wifiModel,
  11. this.active = false,
  12. this.onTap,
  13. });
  14. @override
  15. State<WifiItem> createState() => _WifiItemState();
  16. }
  17. class _WifiItemState extends State<WifiItem> {
  18. // 测试结果与颜色的对应关系
  19. final Map<String, Color> resultAsColor = {
  20. "未测试": Colors.grey,
  21. "正在测试": Colors.blue,
  22. "测试通过": Colors.green,
  23. "未通过": Colors.red,
  24. };
  25. @override
  26. Widget build(BuildContext context) {
  27. Color resultColor = Colors.grey;
  28. if(resultAsColor.containsKey(widget.wifiModel.result)){
  29. resultColor = resultAsColor[widget.wifiModel.result]!;
  30. }
  31. return GestureDetector(
  32. onTap: ()=>widget.onTap?.call(widget.wifiModel),
  33. child: Container(
  34. height: 40.sp,
  35. decoration: BoxDecoration(
  36. color: widget.active? Colors.pink.shade100: null,
  37. border: Border(
  38. bottom: BorderSide(color: Colors.grey, width: .5.sp)
  39. )
  40. ),
  41. child: Row(
  42. children: [
  43. Expanded(
  44. child: Container(
  45. alignment: Alignment.centerLeft,
  46. padding: EdgeInsets.symmetric(horizontal: 5.sp),
  47. child: Text(widget.wifiModel.ssid, style: TextStyle(fontSize: 16.sp)),
  48. ),
  49. ),
  50. Container(
  51. alignment: Alignment.center,
  52. width: 50.w,
  53. decoration: BoxDecoration(
  54. border: Border.symmetric(vertical: BorderSide(color: Colors.grey, width: .5.sp))
  55. ),
  56. child: Text(widget.wifiModel.rssi.toString(), style: TextStyle(fontSize: 14.sp, color: Colors.green)),
  57. ),
  58. Container(
  59. alignment: Alignment.center,
  60. width: 80.w,
  61. child: Text(widget.wifiModel.result, style: TextStyle(fontSize: 14.sp, color: resultColor)),
  62. ),
  63. ],
  64. ),
  65. ),
  66. );
  67. }
  68. }