我寫了一個無效函式,允許我擁有一個nodejs服務器的套接字的資料,就像這樣的
。 Future<void> getCoordinate() async{
//call socket。
GeocoordinateModel geocoordinateObject;
Map<String,dynamic> geocoordinateMap;
IO.Socket socket = IO.io(url,OptionBuilder().setTransports(['websocket']).build())。)
socket.on("connect", (data) => {
socket.on('geocoordinateData',(message)=>{
if(message){
geocoordinateMap = Map<String,dynamic>.from(message['payload'])。
geocoordinateObject = GeocoordinateModel.fromMap(geocoordinateMap)。
print(geocoordinateObject)。
}
}),
});
//return geocoordinateObject;.
現在,我想回傳函式的varibla geocoordinateObject。 我嘗試了這個代碼,但它沒有作業
import 'package:hooks_riverpod/hooks_riverpod.dart'/span>。
import 'package:real_chat/data/model/geocoordinate_model.dart';
import 'package:socket_io_client/socket_io_client.dart' as IO。
import 'package:socket_io_client/socket_io_client.dart'。
class GeocoordinateApi{
static const String url = 'https://xxx.herokuapp.com/';
Future<GeocoordinateModel?> getCoordinate() async{
//call socket。
GeocoordinateModel? geocoordinateObject;
Map<String,dynamic> geocoordinateMap。
IO.Socket socket = IO.io(url,OptionBuilder().setTransports(['websocket']).build())。)
socket.on("connect", (data) => {
socket.on('geocoordinateData',(message)=>{
if(message){
geocoordinateMap = Map<String,dynamic>.from(message['payload'])。
geocoordinateObject = GeocoordinateModel.fromMap(geocoordinateMap)。
print(geocoordinateObject)。
}
}),
});
return geocoordinateObject;
}
}
但是它回傳null
uj5u.com熱心網友回復:使用完成器來創建自己的未來。
操作步驟
創建一個完成者。final completer = Completer<GeocoordinateModel?>()。
- 完成完成器
completer.complete(geocoordinateObject);
- 回傳未來 。
return completer.future。
代碼
Future<GeocoordinateModel?> getCoordinate() async {
GeocoordinateModel? geocoordinateObject;
Map<String, dynamic> geocoordinateMap。
IO.Socket socket =
IO.io(url, OptionBuilder().setTransports(['websocket']).build())。
// [NEW CODE]: 添加一個完成器
final completer = Completer<GeocoordinateModel?>()。
//你不需要監聽'connect'。
socket.on(
'geocoordinateData'/span>,
(message) => {
// if(message)沒有檢查是否為空。它應該是if(message != null)。
//如果這是null安全的代碼,你不需要檢查null。
geocoordinateMap = Map<String, dynamic>.from(message['payload']) 。
geocoordinateObject = GeocoordinateModel.fromMap(geocoordinateMap)。
// [NEW CODE]: 發送你的物件給完成者。
completer.complete(geocoordinateObject)。
},
);
//回傳未來。
return completer.future。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/311832.html
標籤:
