我試圖從一個API("https://api.exchangerate.host/latest")獲取貨幣轉換資料。
標題中的上述錯誤在螢屏上顯示為一個文本。
我試圖獲得這個資訊作為輸出。
我試圖獲得這個訊息作為輸出。
"msg": "如果你或你的公司使用這個專案或喜歡我們所做的,請考慮支持我們,這樣我們就可以繼續維護和發展這個專案。"
后來單個貨幣的使用情況被顯示出來。
后面是各個貨幣的匯率。
import 'dart:async'/span>;
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
Future<Album> fetchAlbum() async {
final response = await http.get(Uri.parse)。
if (response.statusCode == 200) {
//如果服務器確實回傳了一個200 OK的回應,
//然后決議JSON.。
return Album.fromJson(jsonDecode(response.body))。
} else {
//如果服務器沒有回傳一個200 OK的回應,
//然后拋出一個例外。
拋出 Exception('Failed to load album')。
}
}
class Album{
final String msg;
相冊({
required this.msg,
});
factory Album.fromJson(Map<String, dynamic> json) {
return Album(
msg: json['msg']。
);
}
}
class CurrencyPage extends StatefulWidget{
const CurrencyPage({Key? key}) : super(key: key);
@override
_CurrencyPageState createState() => _CurrencyPageState()。
}
class _CurrencyPageState extends State< CurrencyPage> {
late Future<Album> futureAlbum;
@override
void initState() {
super.initState()。
futureAlbum = fetchAlbum();
}
@overridereturn MaterialApp(
標題。'Fetch Data Example'。
主題。ThemeData(
primarySwatch: Colors.blue,
),
首頁。腳手架(
appBar: AppBar(
標題。const Text('Fetch Data Example') 。
),
身體。中心(
孩子。FutureBuilder<Album>(
future: futureAlbum,
構建者。(context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!.msg) 。
} else if (snapshot.hasError) {
return Text('${snapshot.error}') 。
}
///默認情況下,顯示一個加載旋鈕。
return const CircularProgressIndicator();
},
),
),
),
);
}
}
如果有任何幫助,我們將不勝感激!
。uj5u.com熱心網友回復:
你對模型的使用是不正確的。
將return Album.fromJson(jsonDecode(response.body));改為return jsonDecode(response.body);并獲得回應資料,如snapshot.data!['motd']
代碼:
Future<dynamic> fetchAlbum() async {
final response = await http.get(Uri.parse('https://api.exchangerate.host/latest'/span>) )。)
if (response.statusCode == 200) {
//如果服務器確實回傳了一個200 OK的回應,
//然后決議JSON.。
print(jsonDecode(response.body))。
return jsonDecode(response.body)。
} else {
//如果服務器沒有回傳200 OK回應,
//然后拋出一個例外。
拋出 Exception('Failed to load album')。
}
}
class Album{
final String msg;
相冊({
required this.msg,
});
factory Album.fromJson(Map<String, dynamic> json) {
return Album(
msg: json['msg']。
);
}
}
class CurrencyPage extends StatefulWidget{
const CurrencyPage({Key? key}) : super(key: key);
@override
_CurrencyPageState createState() => _CurrencyPageState()。
}
class _CurrencyPageState extends State< CurrencyPage> {
late dynamic futureAlbum;
@override
void initState() {
super.initState()。
futureAlbum = fetchAlbum()。
}
@overridereturn Scaffold(
appBar: AppBar(
標題。const Text('Fetch Data Example'),
),
身體。中心(
孩子。FutureBuilder<dynamic>(
future: futureAlbum,
建設者。(context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!['motd']['msg']) 。
} else if (snapshot.hasError) {
return Text('${snapshot.error}'/span>)。
}
///默認情況下,顯示一個加載旋鈕。
return const CircularProgressIndicator();
},
),
),
);
}
}
uj5u.com熱心網友回復:
msg鍵在回應中的motd物件內。因此,將fetchAlbum改為:
Future<Album> fetchAlbum() async {
final response = await http.get(Uri.parse)。
if (response.statusCode == 200) {
//如果服務器確實回傳了一個200 OK的回應,
//然后決議JSON.。
var body = jsonDecode(response.body)。
return Album.fromJson(body["motd"/span>])。
} else {
//如果服務器沒有回傳200 OK回應,
//然后拋出一個例外。
拋出 Exception('Failed to load album')。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326620.html
標籤:
