Вы можете использовать поток для этого.Вы можете зарегистрировать ответ websocket, а когда он вернется, вы можете добавить его в поток, а затем на своем экране вы используете StreamBuilder, чтобы подписаться на поток и перемещаться, когда это необходимо.Примерно так:
import 'package:flutter/material.dart';
import 'package:rxdart/rxdart.dart';
// Create a stream to receive the values
var webSocketStream = new BehaviorSubject<String>();
onMessageReceived(data) {
print("new message: " + data + " !");
data = jsonDecode(data);
data.forEach((key, value) {
switch (key) {
case "state":
// Write to the stream
webSocketStream.add(value);
break;
}
});
}
class CheckWebSocket extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: StreamBuilder<String>(
// Subscribe to the stream
stream: webSocketStream,
builder: (context, snapshot) {
// When the stream changes navigate
if (snapshot.hasData && snapshot.data == "start") {
Navigator.pushNamed(context, "/path");
} else {
return Container();
}
}),
);
}
}
Я использовал для этого rxdart, потому что это упрощает работу с потоками.Я также рекомендую вам извлечь код, который читает веб-сокет, в отдельный класс, я поместил все в один файл, чтобы было проще понять.