(WIP) Add network test

- Network tested
 - Some UI updates
This commit is contained in:
2026-04-13 20:00:38 +03:00
parent 210b59f8ed
commit c375eca7b8
7 changed files with 137 additions and 7 deletions

View File

@@ -1,8 +1,9 @@
import 'package:flutter/material.dart';
import 'package:client/screens/mainMenu.dart';
import 'package:client/theme.dart';
import 'package:client/screens/networkDebug.dart';
Widget currentScreen = MainMenu();
Widget currentScreen = NetworkDebug();
void main() {
runApp(const MyApp());

View File

@@ -0,0 +1,34 @@
import 'package:http/http.dart' as http;
import 'package:shared/models/message.dart';
class NetworkManager {
final String baseUrl = "https://msg.mr-potato.ru";
Future<void> send(Message message) async {
final url = Uri.parse('$baseUrl/send');
print('Отправка запроса на $url...');
try {
final response = await http.post(
url,
headers: {
'Content-Type': 'application/json',
},
body: message.toJson(),
);
if (response.statusCode == 200) {
print('Сообщение успешно доставлено!');
print('Ответ сервера: ${response.body}');
} else {
print('Ошибка сервера. Код: ${response.statusCode}');
}
} catch (e) {
print('Ошибка сети: $e');
}
}
}

View File

@@ -0,0 +1,30 @@
import 'package:client/networkManager.dart';
import 'package:client/widgets/chatFoloders.dart';
import 'package:client/widgets/chatItem.dart';
import 'package:flutter/material.dart';
import 'package:shared/models/message.dart';
class NetworkDebug extends StatelessWidget{
NetworkDebug({Key ?key});
NetworkManager net = NetworkManager();
String message = 'NONE';
@override
Widget build(BuildContext context) {
final colors = Theme.of(context).colorScheme;
return Scaffold(
backgroundColor: colors.surface,
body: Column(
children: [
TextField(decoration: InputDecoration(label: Text('Message')), onChanged: (value) => (message = value),),
TextButton(onPressed: () => net.send(Message(chatId: '123abc', msg: message)), child: Text('Send'))
],
),
);
}
}

View File

@@ -36,6 +36,7 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.8
http: ^1.6.0
dev_dependencies:
flutter_test:

View File

@@ -1,5 +1,39 @@
import 'package:server/server.dart' as server;
// server/bin/server.dart
import 'dart:convert';
import 'dart:io';
import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_router/shelf_router.dart';
void main(List<String> arguments) {
print('Hello world: ${server.calculate()}!');
// Подключаем нашу модель (путь зависит от того, как назван твой пакет shared в pubspec)
import 'package:shared/models/message.dart';
void main() async {
final router = Router();
// Настраиваем обработчик POST-запроса на адрес /send
router.post('/send', (Request request) async {
// Читаем тело запроса (в виде строки)
final payload = await request.readAsString();
// Превращаем строку JSON обратно в объект Message
final message = Message.fromJson(payload);
print('📩 Получено новое сообщение!');
print('--> Чат: ${message.chatId}');
print('--> Текст: ${message.msg}');
// Возвращаем ответ клиенту (Статус 200 OK)
return Response.ok(
jsonEncode({'status': 'ok'}),
headers: {'Content-Type': 'application/json'},
);
});
// Pipeline добавляет удобное логирование каждого запроса в консоль
final handler = Pipeline().addMiddleware(logRequests()).addHandler(router.call);
// Запускаем сервер на всех интерфейсах (0.0.0.0) и порту 6432
final server = await io.serve(handler, '0.0.0.0', 6432);
print('🚀 Сервер запущен на http://${server.address.host}:${server.port}');
}

View File

@@ -9,8 +9,9 @@ environment:
# Add regular dependencies here.
dependencies:
path: ^1.9.0
potato_messenger_shared:
shared:
path: ../shared
shelf_router: ^1.1.4
dev_dependencies:
lints: ^6.0.0

View File

@@ -0,0 +1,29 @@
// shared/lib/models/message.dart
import 'dart:convert';
class Message {
final String chatId;
final String msg;
Message({required this.chatId, required this.msg});
Map<String, dynamic> toMap() {
return {
'chat_id': chatId,
'msg': msg,
};
}
factory Message.fromMap(Map<String, dynamic> map) {
return Message(
chatId: map['chat_id'] ?? '',
msg: map['msg'] ?? '',
);
}
String toJson() => json.encode(toMap());
factory Message.fromJson(String source) => Message.fromMap(json.decode(source));
}