Я пытаюсь понять, как Flutter и Dart используют мыльные веб-сервисы asmx.Для этого я создал очень простой проект и использовал для тестирования онлайн-мыло WebService asmx.
Использование http://www.dneonline.com/calculator.asmx?op=Add Я успешно построил конверт во Флаттере.
В тесте я использую SOAP 1.1 part.
Сначала мне не удалось запустить приложение, но, к счастью, я обнаружил ошибку в " Content-Length: length».Таким образом, я удаляю это и все работало очень хорошо.
Основные функции калькулятора (добавить).Во-первых, я не знаю, как добавить целое число в конверт, поэтому я использую статические жестко закодированные значения.
В теле ответа я нашел строку 9 , котораяесть мой ответ от мыльного звонка.
Второе (это мой вопрос) Я получаю ответное тело, но я не знаю, как получить значение из тела.
Какполучить значение из вызова asmx веб-служб Flutter / Dart Soap?
Это мой полный код Flutter.
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _firstInteger = 5;
int _secondInteger = 4;
var envelope =
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soap:Body> <Add xmlns=\"http://tempuri.org/\"> <intA>5</intA> <intB>4</intB></Add></soap:Body></soap:Envelope>";
var _testValue = "";
bool _add = true;
@override
void initState() {
// TODO: implement initState
super.initState();
_add = true;
}
Future _getCalculator() async {
http.Response response =
await http.post('http://www.dneonline.com/calculator.asmx',
headers: {
"Content-Type": "text/xml; charset=utf-8",
"SOAPAction": "http://tempuri.org/Add",
"Host": "www.dneonline.com"
},
body: envelope);
setState(() {
_testValue = response.body;
_add = true;
});
print(response.body);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_add == true
? new Text(
"Answer: $_testValue",
style: new TextStyle(
fontSize: 18.0,
fontWeight: FontWeight.bold,
color: Colors.red[800]),
)
: new CircularProgressIndicator(),
new RaisedButton(
onPressed: () {
setState(() {
_add = false;
});
_getCalculator();
},
child: new Text("Calculate"),
)
],
)),
);
}
}
И это ответ.объем кузова:
I/flutter ( 6414): <?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><AddResponse xmlns="http://tempuri.org/"><AddResult>9</AddResult></AddResponse></soap:Body></soap:Envelope>