当前位置:网站首页>flutter showDialog弹窗
flutter showDialog弹窗
2022-07-15 23:42:00 【氤氲息】
使用
showDialog(
context: context,
builder: (context) => BoxDialog(getUserShake.shakeBoxId))
.then((value) => dialogClose(value));
弹窗内容
import 'dart:async';
import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:social_im/common/Global.dart';
import 'package:social_im/common/colors.dart';
import 'package:social_im/generated/l10n.dart';
import 'package:social_im/http/api.dart';
import 'package:social_im/http/net_callback.dart';
import 'package:social_im/http/rxhttp.dart';
import 'package:social_im/http/utils/NetUtils.dart';
import 'package:social_im/im/user_info.dart';
import 'package:social_im/pages/pay/model/extend.dart';
import 'package:social_im/pages/pay/pay_dialog.dart';
import 'package:social_im/pages/widget/myText.dart';
import 'package:social_im/pages/widget/splitLine.dart';
import 'package:social_im/provider/provider_wallet.dart';
import 'package:social_im/utils/image_utile.dart';
import '../../../common/globalEventBus.dart';
import '../../../constant/dimens.dart';
import '../../../http/http_request.dart';
import '../../../utils/loadingUtil.dart';
import '../data/OpenBoxCase.dart';
class BoxDialog extends StatefulWidget {
//宝箱ID
int? shakeBoxId;
BoxDialog(this.shakeBoxId);
@override
BoxDialogState createState() => BoxDialogState();
}
class BoxDialogState extends State<BoxDialog> {
//取屏幕最大宽度和高度
final width = window.physicalSize.width;
final height = window.physicalSize.height;
//该弹窗0显示宝箱,1显示钻石
int isCheck = 0;
//钻石数量
int? dialogAmount = 0;
//钻石亮光
bool _isExpand = false;
//计时器
late Timer? _mTimer = null;
expandListen() {
_mTimer = Timer.periodic(
const Duration(seconds: 1),
(Timer t) => setState(() {
_isExpand = !_isExpand;
}));
}
late StreamSubscription<ShakeCloseDialogEvent> _shakeCloseDialogEvent;
@override
void initState() {
expandListen();
_shakeCloseDialogEvent = EventBusUtil.listen((event) {
if (event.isClose) {
Navigator.pop(context, true);
}
});
super.initState();
}
@override
void dispose() {
if (_mTimer != null) {
_mTimer!.cancel();
_mTimer = null;
}
_shakeCloseDialogEvent.cancel();
super.dispose();
}
//开启宝箱获取砖石数量
void openBoxCase(context, setState) {
LoadingUtil.showLoading();
HttpRequest.intance.postHttpFromBusiness(Api.API_OPEN_BOX, (data) {
LoadingUtil.dismissLoading();
OpenBox openBox = OpenBox.fromJson(data);
setState(() {
dialogAmount = openBox.amount;
isCheck = 1;
});
}, (error) {
LoadingUtil.dismissLoading();
}, onErrorCode: (errorCode) {
if (errorCode == 10041) {
showDiamondInsufficientDialog(context);
}
}, parameters: {
"shake_box_id": widget.shakeBoxId});
}
///钻石不足充值弹窗
showDiamondInsufficientDialog(context) {
LoadingUtil.showLoading();
showPayDialog(context, onSuccess: () {
_getExtendInfo(500);
});
}
///获取金币、钻石等扩展信息
void _getExtendInfo(int delay) {
print('===========获取金币、钻石等扩展信息===========');
Future.delayed(Duration(milliseconds: delay)).then((value) {
LoadingUtil.dismissLoading();
RxHttp<Extend>()
..init()
..setBaseUrl(Api.BUSINESS_BASE_API)
..setPath(Api.API_USER_EXTENDINFO)
..setCacheMode(CacheMode.NO_CACHE)
..setJsonTransFrom(
(p0) => Extend.fromJson(json.decoder.convert(p0)['data']))
..call(NetCallback(onNetFinish: (extend) {
UserInfoUtil().getUsersInfo('${extend.userId}');
Provider.of<WalletProvider>(Global.navigatorKey.currentContext!,
listen: false)
.updateWallet(goldCoin: extend.goldCoin, diamond: extend.diamond);
}), server: Servers.businessServer);
});
}
//监听物理返回键
Future<bool> _requestPop() {
if (Navigator.canPop(context)) {
Navigator.pop(context, false);
}
return Future.value(false);
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: _requestPop,
child: Center(
child: Stack(
children: [
if (isCheck == 0) _boxDialog(context),
if (isCheck == 1) diamondDialog(context),
],
),
),
);
}
//宝箱
Widget _boxDialog(context) {
return GestureDetector(
onTap: () {
//点击背景可以返回
},
child: Material(//用这个,字体正常的
color: Colors.transparent,//设置背景透明
child: Center(
///弹框大小
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
onTap: () {
},
child: Container(
margin: const EdgeInsets.only(left: 50, right: 50, top: 110),
decoration: BoxDecoration(
border:
Border.all(color: const Color(0xFFFEF9E8), width: 1),
borderRadius: BorderRadius.circular(14)),
child: Container(
decoration: BoxDecoration(
color: const Color(0xFFFEF9E8),
border: Border.all(
color: const Color(0xFF2F2B2B), width: 2),
borderRadius: BorderRadius.circular(14)),
child: Column(
children: [
Stack(
alignment: Alignment.topCenter,
children: [
Container(
width: width,
padding: const EdgeInsets.only(bottom: 23),
child: Container(
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(8.0),
),
),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Stack(
alignment: Alignment.topCenter,
children: [
SizedBox(
width: width,
child: ClipRRect(
child: ImageUtile.imageWidget(
"assets/images/icon_game_shake_box.png",
fit: BoxFit.fitWidth),
)),
Container(
margin:
const EdgeInsets.only(top: 11),
child: Text(
S.current.shake_100_reward,
style: const TextStyle(
color: Color(0xFFFF3B30),
fontSize: 16,
fontWeight: FontWeight.bold,
decoration:
TextDecoration.none),
),
),
],
),
],
),
),
),
Positioned(
bottom: -10,
child: Container(
padding: const EdgeInsets.only(bottom: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Stack(
alignment: Alignment.topRight,
children: [
// Container(
// width: 40,
// height: 20,
// alignment: Alignment.center,
// margin: const EdgeInsets.only(
// right: 10, top: 10),
// decoration: BoxDecorationUtil()
// .setFillGradientBoxDecoration(
// CommonColors.getColorFF9D00,
// CommonColors.getColorFF6500,
// 0.0)),
GestureDetector(
onTap: () {
setState(() {
openBoxCase(context, setState);
});
},
child: Container(
margin: const EdgeInsets.only(
top: 10, bottom: 20),
padding: const EdgeInsets.only(
top: 8,
bottom: 7,
left: 85,
right: 85),
decoration: BoxDecoration(
color:
const Color(0xFF25D6BC),
borderRadius:
BorderRadius.circular(19),
border: Border.all(
color: Colors.white,
width: 1)),
child: Text(
S.current.shake_open,
style: const TextStyle(
color: Colors.white,
fontSize:
Dimens.fontSize_18,
decoration:
TextDecoration.none),
),
),
),
Container(
width: 50,
height: 20,
alignment: Alignment.center,
margin: const EdgeInsets.only(),
child: Row(
mainAxisSize:
MainAxisSize.min,
children: [
const Image(
image: AssetImage(
'assets/images/icon_diamond.png'),
gaplessPlayback: true,
width: 10,
height: 10),
Padding(
padding:
const EdgeInsets
.only(left: 2),
child: ContentText(
'${1}',
12.0,
Colors.white))
]),
decoration: BoxDecorationUtil()
.setFillGradientBoxDecoration(
CommonColors
.getColorFF9D00,
CommonColors
.getColorFF6500,
32.0)),
])
],
),
),
),
],
),
],
),
),
),
),
GestureDetector(
onTap: () {
Navigator.pop(context,false);
},
child: Container(
margin: const EdgeInsets.only(top: 25),
child: const Image(
image: AssetImage(
'assets/images/[email protected]2x.png'),
width: 50,
fit: BoxFit.fitWidth),
),
),
],
),
),
),
);
}
//钻石
Widget diamondDialog(context) {
return GestureDetector(
onTap: () {
},
child: Material(
color: Colors.transparent,
child: Center(
///弹框大小
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
onTap: () {
},
child: Stack(
alignment: Alignment.topCenter,
children: [
Container(
margin:
const EdgeInsets.only(left: 50, right: 50, top: 110),
decoration: BoxDecoration(
border: Border.all(
color: const Color(0xFFFEF9E8), width: 1),
borderRadius: BorderRadius.circular(14)),
child: Container(
decoration: BoxDecoration(
color: const Color(0xFFFEF9E8),
border: Border.all(
color: const Color(0xFF2F2B2B), width: 2),
borderRadius: BorderRadius.circular(14)),
child: Column(
children: [
Stack(
alignment: Alignment.bottomCenter,
children: [
Stack(
alignment: Alignment.topCenter,
children: [
Container(
width: width,
margin: const EdgeInsets.only(
top: 19, bottom: 23),
child: Container(
decoration: const ShapeDecoration(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(
Radius.circular(8.0),
),
),
),
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
crossAxisAlignment:
CrossAxisAlignment.center,
children: <Widget>[
Stack(
alignment: Alignment.center,
children: [
if (_isExpand)
SizedBox(
width: width,
child: ClipRRect(
borderRadius:
BorderRadius
.circular(14),
child: ImageUtile
.imageWidget(
"assets/images/icon_game_shake_light.png",
fit: BoxFit
.fitWidth),
)),
if (!_isExpand)
SizedBox(
width: width,
child: Directionality(
textDirection:
TextDirection.rtl,
child: Image.asset(
'assets/images/icon_game_shake_light_rtl.png',
fit: BoxFit.fitWidth,
matchTextDirection:
true,
)),
),
SizedBox(
width: width,
child: ClipRRect(
borderRadius:
BorderRadius.circular(
14),
child: ImageUtile
.imageWidget(
"assets/images/icon_game_shake_dia.png",
),
)),
],
),
],
),
),
),
Positioned(
top: 11,
child: Container(
padding: const EdgeInsets.only(
left: 50, right: 50, top: 10),
child: Text(
S.current.shake_congratulation,
style: const TextStyle(
color: Color(0xFFF43113),
fontSize: 22,
decoration:
TextDecoration.none),
)),
),
],
),
dialogAmount != 0
? Container(
margin: const EdgeInsets.only(
top: 4, bottom: 20),
child: Text(
"X$dialogAmount",
style: const TextStyle(
color: Color(0xFFF43113),
fontSize: 22,
decoration: TextDecoration.none),
),
)
: Container(
margin: const EdgeInsets.only(
top: 4, bottom: 20),
),
],
),
],
),
),
),
],
),
),
GestureDetector(
onTap: () {
Navigator.pop(context,false);
},
child: Container(
margin: const EdgeInsets.only(top: 25),
child: const Image(
image: AssetImage(
'assets/images/[email protected]2x.png'),
width: 50,
fit: BoxFit.fitWidth),
),
),
],
),
),
),
);
}
}
边栏推荐
- Flink (V) status programming
- Digital display of potentiometer based on ADC0832
- Static library and dynamic library
- Flink(五)状态编程
- [step on pit] attaching a row → dataframe
- Autojs script notes
- 深度学习模型参数量以及FLOPs计算工具
- Experiment 5 image segmentation and description
- Wireshark packet capturing debugging (three-way handshake, four-way disconnection)
- 电力系统机组组合(Matlab代码实现)
猜你喜欢

Codeworks 5 questions per day (average 1500) - day 16

Sword finger offer 55 - ii balanced binary tree

Double thread guessing numbers

曲伟海:坚持选择不放弃 是实现初心的法宝

How does the trend of banking situation in London come into being

MQTT.fx和EMQX的连接、测试、抓包

【JVM】垃圾收集器

Reading the pointpillar code of openpcdet -- Part 1: data enhancement and data processing

Flink(三)处理函数

解密静态路由,一文分析静态路由优缺点!
随机推荐
Flink(一)概述
Experiment 4 image restoration and geometric correction
Context object instance
Quweihai: insisting on choosing and not giving up is the magic weapon to realize the original intention
Experiment 2 image enhancement
Ultrasonic ranging OLED display
TCmalloc学习
Flink (VI) fault tolerance mechanism
Burning firmware of Hongmeng openharmony system for rk3568 development board
Flink(五)状态编程
Pytoch distributed training
Xunwei domestic development board three development boards worth starting with
npm ERR! CB () never called processing method
Flink (I) overview
Envoy monitoring management
【漫步刷题路】- 逆序字符串II
Some thoughts on thread switching
静态库和动态库
曲伟海:坚持选择不放弃 是实现初心的法宝
没有sudo权限的情况下,如何在Ubuntu安装sqlite