import 'dart:async'; import 'package:app/utils/time.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'content_view.dart'; import '../viewmodel/tch_room_vm.dart'; class StatusView extends StatefulWidget { const StatusView({super.key}); @override State createState() => _StatusViewState(); } class _StatusViewState extends State { ///房间状态 RoomStatus status = RoomStatus.loading; ///剩余秒 int _seconds = 0; Timer? _timer; @override void initState() { super.initState(); _init(); final vm = context.read(); vm.addListener(openRoom); } @override void dispose() { super.dispose(); _timer?.cancel(); _timer = null; } void _init() { final vm = context.read(); //如果房间到点可以开始 if (vm.canEnterRoom) { status = RoomStatus.start; // openRoom(); } else { status = RoomStatus.waiting; startCountDown(); } } ///开始倒计时 void startCountDown() { final vm = context.read(); //当前时间 DateTime now = DateTime.now(); //远端时间 setState(() { _seconds = parseTime(vm.roomInfo.startTime).difference(now).inSeconds; }); _timer = Timer.periodic(Duration(seconds: 1), (timer) { setState(() { _seconds--; }); if (_seconds <= 0) { _timer?.cancel(); _timer = null; setState(() { status = RoomStatus.start; }); } }); } ///开启自习室 void openRoom() { final vm = context.read(); vm.toggleRoom(isOpen: true); vm.removeListener(openRoom); } @override Widget build(BuildContext context) { if (status == RoomStatus.waiting) { return Align( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "未到开播时间,到点后自动开播", style: TextStyle(color: Colors.white), ), Container( margin: EdgeInsets.symmetric(vertical: 10), child: Text( formatSeconds(_seconds), style: TextStyle( color: Colors.white, fontSize: 26, fontWeight: FontWeight.bold, ), ), ), ], ), ); } else if (status == RoomStatus.start) { return ContentView(); } return SizedBox(); } } enum RoomStatus { loading, // 加载中 waiting, //房间倒计时等待中 start, //房间开始中 }