SteamCloudGame/lib/tools/me/bt_game_pad_page.dart
2025-01-07 19:40:39 +08:00

264 lines
8.3 KiB
Dart

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import '../../common/EventBusUtil.dart';
import '../../common/Global.dart';
import '../../common/func.dart';
import '../../dialog/bt_description_dialog.dart';
import '../../network/NetworkConfig.dart';
class BtGamePadPage extends StatefulWidget {
const BtGamePadPage({super.key});
@override
State<BtGamePadPage> createState() => _BtGamePadPageState();
}
class _BtGamePadPageState extends State<BtGamePadPage> {
late StreamSubscription<RefreshBtState> _refreshBtStateEvent;
int currentBtIndex = -1;
@override
void initState() {
// TODO: implement initState
super.initState();
///刷新用户信息
_refreshBtStateEvent = EventBusUtil.listen((event) {
setState(() {});
});
//蓝牙已打开,获取蓝牙设备列表
if (NetworkConfig.isBtOpen) {
Map<String, dynamic> gameMap = {
"getBtListDevices": "getBtListDevices",
};
///传值初始化游戏token
invokeNativeMethod("getBtListDevices", gameMap);
}
}
@override
void dispose() {
// TODO: implement dispose
super.dispose();
_refreshBtStateEvent.cancel();
}
@override
Widget build(BuildContext context) {
final size = MediaQuery.of(context).size;
final h50 = size.width / 7.2;
final s16 = size.width / 22.5;
final l14 = size.width / 25.71428571428571;
final w19 = size.width / 18.94736842105263;
final h26 = size.width / 13.84615384615385;
final w33 = size.width / 10.909090909090;
final h18 = size.width / 20;
final t20 = size.width / 18;
final s13 = size.width / 27.692307692307;
final w223 = size.width / 1.6143497757847;
final h44 = size.width / 8.1818181818181;
final w40 = size.width / 9;
return Scaffold(
backgroundColor: const Color(0xFF17181A),
body: Column(
children: [
Container(
width: size.width,
height: h50,
margin: EdgeInsets.only(top: MediaQuery.of(context).padding.top),
child: Stack(
alignment: Alignment.center,
children: [
Text(
"蓝牙手柄",
style: TextStyle(fontSize: s16, color: Color(0xFFD6D6D7)),
),
Positioned(
left: l14,
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Image(
width: w19,
height: h26,
image: const AssetImage('assets/images/btn_fanhui.png'),
),
),
),
Positioned(
right: l14,
child: GestureDetector(
onTap: () {
FunctionUtil.popDialog(context, BtDescriptionDialog());
},
child: Image(
width: w19,
height: h26,
image: const AssetImage('assets/images/ic_describe.png'),
),
),
),
],
),
),
Container(
margin: EdgeInsets.only(left: l14, right: l14, top: l14),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"开启蓝牙",
style: TextStyle(fontSize: l14, color: Color(0xFFD6D6D7)),
),
GestureDetector(
onTap: () {
//蓝牙开关
Map<String, dynamic> gameMap = {
"setBtState": !NetworkConfig.isBtOpen,
};
invokeNativeMethod("setBt", gameMap);
},
child: Image(
width: w33,
height: h18,
image: AssetImage(NetworkConfig.isBtOpen ? 'assets/images/ic_bt_on.png' : 'assets/images/ic_bt_off.png'),
),
)
],
),
),
Container(
margin: EdgeInsets.only(left: l14, right: l14, top: t20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"连接状态",
style: TextStyle(fontSize: l14, color: Color(0xFFD6D6D7)),
),
Text(
NetworkConfig.connectionStatus == 0
? "未连接"
: NetworkConfig.connectionStatus == 1
? "连接中"
: NetworkConfig.connectionStatus == 2
? "已连接"
: "正在断开连接",
style: TextStyle(fontSize: l14, color: NetworkConfig.connectionStatus == 2 ? Colors.green : Color(0xFFD6D6D7)),
),
],
),
),
GestureDetector(
onTap: () {
if (NetworkConfig.connectionStatus == 2) {
//进入手柄界面
Map<String, dynamic> map = {
"enterGamePad": "enterGamePad",
};
invokeNativeMethod("enterGamePad", map);
} else {
EasyLoading.showToast("请先连接设备");
}
},
child: Container(
width: w223,
height: h44,
margin: EdgeInsets.only(top: t20),
alignment: Alignment.center,
decoration: BoxDecoration(color: Color(0xFF074CE7), borderRadius: BorderRadius.all(Radius.circular(22))),
child: Text(
"进入蓝牙手柄",
style: TextStyle(fontSize: l14, color: Colors.white),
),
),
),
Container(
margin: EdgeInsets.only(left: l14, right: l14, top: l14),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
"可用设备",
style: TextStyle(fontSize: l14, color: Color(0xFFD6D6D7)),
),
Image(
width: w33,
height: w33,
image: AssetImage('assets/images/ic_bt_refresh.png'),
)
],
),
),
Expanded(
child: Container(
margin: EdgeInsets.only(left: l14, right: l14, top: l14),
child: ListView.builder(
padding: EdgeInsets.all(0),
itemCount: NetworkConfig.btDevices.length,
itemBuilder: (context, index) {
return _btItem(index, w40);
}),
))
],
),
);
}
_btItem(index, w40) {
return GestureDetector(
onTap: () {
NetworkConfig.connectionStatus = 0;
currentBtIndex = index;
//点击连接设备
Map<String, dynamic> gameMap = {
"deviceIndex": index,
};
invokeNativeMethod("connectedDevice", gameMap);
setState(() {});
},
child: Container(
margin: EdgeInsets.only(bottom: 10),
padding: EdgeInsets.all(5),
decoration: BoxDecoration(
color: currentBtIndex == index ? Color(0xFF202530) : Color(0x00FFFFFF),
borderRadius: BorderRadius.all(Radius.circular(5)),
),
child: Row(
children: [
Image(
width: w40,
height: w40,
image: AssetImage('assets/images/ic_bt_device.png'),
),
Container(
margin: EdgeInsets.only(left: 17),
child: Text(
"${NetworkConfig.btDevices[index]}",
style: TextStyle(color: Color(0xFFD6D6D7)),
),
),
],
),
),
);
}
// 获取原生的值
invokeNativeMethod(String method, Map<String, dynamic> map) async {
dynamic args;
try {
args = await Global.method.invokeMethod(method, map);
} on PlatformException catch (e) {}
}
}