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 createState() => _HomePageState(); } class _HomePageState extends State { 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.34'; cameraIpController.text = '192.168.137.121'; GlobalSettingState globalSettingState = context.watch(); 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('连接') ), ], ) ], ), ), ) ) ); } }