MarsCarController/lib/pages/home_page.dart
2025-07-02 15:22:56 +08:00

101 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:marscar_controller/main.dart';
import 'package:marscar_controller/pages/player_page.dart';
import 'package:provider/provider.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
TextEditingController cameraIpController = TextEditingController();
TextEditingController carIpController = TextEditingController();
bool _isValidIp(String ip) {
if (ip.isEmpty) {
return false;
}
final ipRegex = RegExp(
r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$');
return ipRegex.hasMatch(ip);
}
void _showErrorSnackBar(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(message),
backgroundColor: Colors.red,
),
);
}
@override
Widget build(BuildContext context) {
carIpController.text = '192.168.137.122';
cameraIpController.text = '192.168.137.138';
GlobalSettingState globalSettingState = context.watch<GlobalSettingState>();
return Scaffold(
body: globalSettingState.cameraIP != '' && globalSettingState.carIP != '' ?
PlayerPage() : Center(
child: SafeArea(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: carIpController,
decoration: const InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10))
),
hintText: '火星车 IP'
),
),
SizedBox(height: 8.0,),
Row(
children: [
Expanded(
child: TextField(
controller: cameraIpController,
decoration: const InputDecoration(
border: OutlineInputBorder(
borderRadius: BorderRadius.all(Radius.circular(10))
),
hintText: '相机 IP'
),
),
),
SizedBox(width: 8.0,),
ElevatedButton(
onPressed: () {
final carIp = carIpController.text;
final cameraIp = cameraIpController.text;
if (!_isValidIp(carIp)) {
_showErrorSnackBar('无效的火星车 IP 地址');
return;
}
if (!_isValidIp(cameraIp)) {
_showErrorSnackBar('无效的相机 IP 地址');
return;
}
globalSettingState.setCameraIP(cameraIp);
globalSettingState.setCarIP(carIp);
},
child: const Text('连接')
),
],
)
],
),
),
)
)
);
}
}