(WIP) Add network test
- Network tested - Some UI updates
This commit is contained in:
@@ -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());
|
||||
|
||||
34
client/lib/networkManager.dart
Normal file
34
client/lib/networkManager.dart
Normal 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');
|
||||
}
|
||||
}
|
||||
}
|
||||
30
client/lib/screens/networkDebug.dart
Normal file
30
client/lib/screens/networkDebug.dart
Normal 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'))
|
||||
],
|
||||
),
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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}');
|
||||
}
|
||||
@@ -9,8 +9,9 @@ environment:
|
||||
# Add regular dependencies here.
|
||||
dependencies:
|
||||
path: ^1.9.0
|
||||
potato_messenger_shared:
|
||||
path: ../shared
|
||||
shared:
|
||||
path: ../shared
|
||||
shelf_router: ^1.1.4
|
||||
|
||||
dev_dependencies:
|
||||
lints: ^6.0.0
|
||||
|
||||
29
shared/lib/models/message.dart
Normal file
29
shared/lib/models/message.dart
Normal 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));
|
||||
}
|
||||
Reference in New Issue
Block a user