2014-05-22 4 views
1

Я хотел бы сделать ниже функциональность синхронной. «OnDataLoaded» нужно вызвать, как только поток будет полностью прочитан. Пожалуйста, представьте, какие изменения необходимо сделать.Dart HTTPClient Ответ запрос

String JsonContent=""; 

new HttpClient().getUrl(Uri.parse(uri)) 
    .then((HttpClientRequest request) 
    { 
     request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING);   
     return request.close(); 
    }) 
    .then((HttpClientResponse response) 
    { 
     response.transform(UTF8.decoder).listen((contents) { 
     JsonContent = contents.toString(); 
     print(JsonContent); 
     //onDataLoaded(JsonContent); 
     });   
    }); 

ответ

2

это должно работать

import 'dart:io'; 
import 'dart:convert' show UTF8; 

void main(args) { 
String JsonContent=""; 

new HttpClient().getUrl(Uri.parse(uri)) 
    .then((HttpClientRequest request) 
    { 
     request.headers.removeAll(HttpHeaders.ACCEPT_ENCODING); 
     return request.close(); 
    }) 
    .then((HttpClientResponse response) 
    { 
     response.transform(UTF8.decoder).listen((contents) { 
     JsonContent = contents.toString(); 
     print(JsonContent); 
     //onDataLoaded(JsonContent); 
     }, onDone:() => onDataLoaded(JsonContent)); 
    }); 

} 

void onDataLoaded(String jsonContent) { 
    print(jsonContent); 
} 
+0

Есть ли способ, чтобы выполнить onDataLoaded первым перед завершением из основного (арга). – Sudhi

+0

Я видел это в вашем вопросе, но не был уверен, действительно ли вы это понимали, потому что в другой части говорилось, что вы хотите вызвать 'onDataLoaded', когда выполняется восстановление. Нет, я не нашел версию синхронизации для getUrl для сервера. Клиент имеет 'request.open (« GET », url, async: false);' См. Также http://stackoverflow.com/questions/18404489 –

+0

Пробовал этот фрагмент кода перед отправкой моего запроса. То же поведение - main() завершается, а затем печатается контент. – Sudhi

Смежные вопросы