我目前正在構建一個從 Api 獲取資料的 Flutter 應用程式,但是當我運行該應用程式時,我收到錯誤 Flutter 'List' is not a subtype of type 'Map<String, dynamic>' 。這是我的代碼
class NewsData with ChangeNotifier
{
Map<String,dynamic> _map = {};
bool _error = false;
String _errorMessage = '';
Map<String,dynamic> get map => _map;
bool get error => _error;
String get errorMessage => _errorMessage;
Future<void> get fetchdata async {
final response = await get(Uri.parse('https://script.google.com/macros/s/AKfycbz3ZmaMiTgR-y70MEE1v9VPz2QtmNzwnnnnnnn/exec'),);
if (response.statusCode == 200)
{
try
{
_map = jsonDecode(response.body);
_error = false;
}
catch(e) {
_error = true;
_errorMessage = e.toString();
_map = {};
}
}
else
{
_error = true;
_errorMessage = 'Error :it could be your internet connection ';
_map = {};
}
notifyListeners();
}
void initialValues()
{
_map = {};
_error = false;
_errorMessage = '';
notifyListeners();
}
}
stories.dart
class Storiespage extends StatelessWidget {
const Storiespage({ Key? key }) : super(key: key);
@override
Widget build(BuildContext context) {
context.read<NewsData>().fetchdata;
return Scaffold(
appBar: AppBar(
actions: [
IconButton(
icon: Icon(Icons.refresh),
onPressed:() {
context.read<NewsData>().initialValues();
context.read<NewsData>().fetchdata;
},
)
],
title: Text('ggg'),
),
body: RefreshIndicator(
onRefresh: () async {
await context.read<NewsData>().fetchdata;
},
child: Center(
child: Consumer<NewsData>(
builder: (context, value, child) {
return value.map.length == 0 && !value.error
? CircularProgressIndicator()
: value.error ? Text('oops,something went wrong ${value.errorMessage}'
,textAlign: TextAlign.center,) :
ListView.builder(
itemCount: value.map['feedback'].length,
itemBuilder: (context,index) {
return Newscard(map: value.map['feedback'][index]);
},
);
},
),
),
),
);
}
}
class Newscard extends StatelessWidget {
const Newscard({ Key? key,required this.map }) : super(key: key);
final Map<String,dynamic> map;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Card(
elevation:10 ,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.network('${map['image']}'),
SizedBox(
height: 10,
),
Text('${map['heading']}'
),
SizedBox(
height: 10,
),
Text('${map['story']}'
),
],
),
),
),
);
}
}
和 json 檔案 [ {"heading":"admire","story":2021,"date":" WORLD ","image":"01/A0000/06"},{"heading":"admire"," story":2021,"date":"WORLD","image":"01/A0000/06"},{"heading":"heading","story":"story","date":"date" "影像":"影像"}]
uj5u.com熱心網友回復:
發生錯誤是因為您的 API 回傳 aList您可以在 json 檔案中看到。使用后你jsonDecode的解碼型別是List<dynamic>. 要解決您的問題,您必須將typeof更改_map為List<dynamic>。如果您想擁有該型別List<Map<String, dynamic>>,您可以執行以下操作。
List<Map<String, dynamic>> map = [];
...
_map = List<Map<String, dynamic>>.from(jsonDecode(response.body));
uj5u.com熱心網友回復:
_map 是一個 Map 變數,這意味著它可以用于存盤單個地圖元素。但是回應的 jsonDecode 的結果將是一個 Map 串列。所以將_map的宣告改為
List<Map<String,dynamic>> _map; 或者簡單地列出_map;
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432084.html
