chatapp3-flutter/lib/ui_kit/widgets/room/invite/invite_room_dialog.dart
2026-04-09 21:32:23 +08:00

139 lines
4.1 KiB
Dart

import 'dart:async';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
import 'package:yumi/app_localizations.dart';
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:yumi/ui_kit/components/sc_compontent.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/shared/tools/sc_room_utils.dart';
import 'package:yumi/shared/data_sources/models/message/sc_floating_message.dart';
import 'package:yumi/main.dart';
class InviteRoomDialog extends StatefulWidget {
SCFloatingMessage msg;
InviteRoomDialog(this.msg);
@override
_InviteRoomDialogState createState() => _InviteRoomDialogState();
}
class _InviteRoomDialogState extends State<InviteRoomDialog> {
Timer? _timer;
int countdown = 10;
@override
void initState() {
super.initState();
_startTimer();
}
/// 启动倒计时
void _startTimer() {
// 计时器(`Timer`)组件的定期(`periodic`)构造函数,创建一个新的重复计时器。
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
if (countdown == 0) {
_cancelTimer();
SmartDialog.dismiss(tag: "showInviteRoom");
return;
}
countdown--;
setState(() {});
});
}
/// 取消倒计时的计时器。
void _cancelTimer() {
// 计时器(`Timer`)组件的取消(`cancel`)方法,取消计时器。
_timer?.cancel();
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Container(
width: ScreenUtil().screenWidth * 0.8,
padding: EdgeInsets.all(15.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.all(Radius.circular(12.w)),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(height: 3.w),
Row(
children: [
Spacer(),
text("$countdown", textColor: Colors.black87, fontSize: 14.sp),
SizedBox(width: 3.w),
GestureDetector(
child: Image.asset(
"sc_images/general/sc_icon_clear_c.png",
width: 18.w,
),
onTap: () {
SmartDialog.dismiss(tag: "showInviteRoom");
},
),
],
),
netImage(
url: widget.msg.userAvatarUrl ?? "",
width: 80.w,
height: 80.w,
shape: BoxShape.circle,
),
SizedBox(height: 10.w),
Row(
children: [
Expanded(
child: text(
SCAppLocalizations.of(context)!.inviteGoRoomTips,
textColor: Colors.black87,
fontSize: 15.sp,
maxLines: 5,
),
),
],
),
SizedBox(height: 10.w),
SCDebounceWidget(
child: Container(
height: 45.w,
margin: EdgeInsets.symmetric(horizontal: 35.w),
alignment: Alignment.center,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("sc_images/room/sc_icon_inv_go_btn.png"),
fit: BoxFit.fill,
),
),
child: text(
SCAppLocalizations.of(context)!.enterTheRoom,
textColor: Colors.white,
fontSize: 16.sp,
fontWeight: FontWeight.w600,
),
),
onTap: () {
SmartDialog.dismiss(tag: "showInviteRoom");
SCRoomUtils.goRoom(widget.msg.roomId ?? "", navigatorKey.currentState!.context);
},
),
],
),
);
}
}
class _timer {}