(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:flutter/material.dart';
|
||||||
import 'package:client/screens/mainMenu.dart';
|
import 'package:client/screens/mainMenu.dart';
|
||||||
import 'package:client/theme.dart';
|
import 'package:client/theme.dart';
|
||||||
|
import 'package:client/screens/networkDebug.dart';
|
||||||
|
|
||||||
Widget currentScreen = MainMenu();
|
Widget currentScreen = NetworkDebug();
|
||||||
void main() {
|
void main() {
|
||||||
|
|
||||||
runApp(const MyApp());
|
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.
|
# The following adds the Cupertino Icons font to your application.
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
cupertino_icons: ^1.0.8
|
cupertino_icons: ^1.0.8
|
||||||
|
http: ^1.6.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
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) {
|
// Подключаем нашу модель (путь зависит от того, как назван твой пакет shared в pubspec)
|
||||||
print('Hello world: ${server.calculate()}!');
|
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.
|
# Add regular dependencies here.
|
||||||
dependencies:
|
dependencies:
|
||||||
path: ^1.9.0
|
path: ^1.9.0
|
||||||
potato_messenger_shared:
|
shared:
|
||||||
path: ../shared
|
path: ../shared
|
||||||
|
shelf_router: ^1.1.4
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
lints: ^6.0.0
|
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