import 'dart:async'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:trackoffical_app/logger.dart'; import 'package:trackoffical_app/model/m_net_image.dart'; import 'package:trackoffical_app/screen.dart'; import 'package:trackoffical_app/service/api.dart'; import 'package:trackoffical_app/view/ingame/in_game_loading.dart'; import 'package:trackoffical_app/widget/app_top_bar.dart'; import 'package:trackoffical_app/pb.dart' as pb; import '../../widget/app_net_image.dart'; import '../../widget/circle_head.dart'; class UnderGuardianView extends StatefulWidget { const UnderGuardianView({super.key}); @override State createState() { return UnderGuardianViewState(); } } class UnderGuardianViewState extends State { var data = []; var phone = ''; final api = ApiService.to; Timer? _flushTimer; var lastData = ''; @override void initState() { super.initState(); api.underGuardianList().then((value) { setState(() { data = value; }); }); _flushTimer = Timer.periodic(2.seconds, (timer) { if(Get.currentRoute!= '/UnderGuardianView'){ return; } api.underGuardianList().then((value) { final valueStr = value.toString(); if(valueStr!= lastData){ lastData=valueStr; setState(() { data = value; }); } }); }); } @override void dispose() { super.dispose(); _flushTimer?.cancel(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppTopBar( title: const Text('被监护人'), automaticallyImplyLeading: true, // actions: [ // IconButton(onPressed: onAdd, icon: const Icon(Icons.add)), // ], ), body: Padding( padding: const EdgeInsets.all(12), child: ListView.builder( itemCount: data.length, itemBuilder: (context, i) { return elem(data[i]); })), ); } Widget elem(pb.MyPupil info) { return GestureDetector( onTap: ()=>onWatch(info), child:Card( surfaceTintColor: Colors.white, color: Colors.white, child: Container( height: 18.9.wp, alignment: Alignment.center, child: ListTile( leading: CircleHead( diameter: 11.7.wp, child: AppNetImage(netImage: info.image.toModel()), ), title: Text(info.name, style: TextStyle(fontSize: 4.4.wp),), trailing: Row( mainAxisSize: MainAxisSize.min, children: [ Text(info.isInGame? info.actName: '未参加活动', style: TextStyle(fontSize: 3.89.wp, color: Colors.grey),), const Icon(Icons.arrow_forward_ios_rounded, color: Colors.grey,) ], ), ), ), ) ); } onWatch(pb.MyPupil info)async{ if(info.isInGame){ InGameLoadingView.toGuardian(info.id); } } onAdd() async { await Get.dialog(AlertDialog( title: const Text('添加被监护人'), content: TextField( onChanged: (v) { phone = v; }, keyboardType: TextInputType.phone, ), actions: [ TextButton(onPressed: () => Get.back(), child: const Text('取消')), FilledButton( onPressed: () async { if (phone.isEmpty) { Get.snackbar('添加失败', '不能为空'); return; } // await api.guardianAdd(phone); final newList = await api.underGuardianList(); setState(() { data = newList; }); Get.back(); }, child: const Text('确定')) ], )); } }