| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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<StatefulWidget> createState() {
- return UnderGuardianViewState();
- }
- }
- class UnderGuardianViewState extends State<UnderGuardianView> {
- var data = <pb.MyPupil>[];
- 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('确定'))
- ],
- ));
- }
- }
|