在這里,我試圖將animedetailjson內部Future<void> getJsonanimedetail()回傳,Container以便我可以在(也許)一個小部件上顯示資料,但問題是,即使內部正常作業,它FutureBuilder也會回傳。我已經閱讀了一些關于這個問題的類似主題,但是我很難理解其他人的代碼,我對編程真的很陌生,所以我很抱歉提出同樣的問題(但使用我自己的代碼??)nullprintFuture<void> getJsonanimedetail()
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
class detailscreen extends StatefulWidget {
detailscreen({Key? key}) : super(key: key);
@override
State<detailscreen> createState() => _detailscreenState();
}
class _detailscreenState extends State<detailscreen> {
_detailscreenState();
@override
Future<void> getJsonanimedetail() async {
final animedetailresponse = await http.get(
Uri.parse('https://api.jikan.moe/v4/anime/5114/full'),
headers: {"Accept": "application/json"});
if (animedetailresponse.statusCode == 200) {
print('Anime Details FOUND');
} else
(print('Anime Details ERROR'));
if (mounted) {
setState(
() {
var animedetailjson = jsonDecode(animedetailresponse.body)['data'];
print(animedetailjson['title']);
},
);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: FutureBuilder(
future: getJsonanimedetail(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
print(snapshot.data);
return CircularProgressIndicator();
}
return Center(child: Text(snapshot.data.toString()));
},
),
),
);
}
}
順便說一句,這是我的第一個訓練營專案,但不幸的是,我選擇了錯誤的訓練營,他們太不專業了,聊天中的很多問題都沒有得到任何答復,即使問題很清楚,培訓師也經常跳到下一條訊息就在他回復的訊息上面,他竟然睡著了,雖然之前他說要開始在線直播??
uj5u.com熱心網友回復:
您需要遵循 FutureBuilder 結構,您可以查看評論鏈接。您當前的未來方法不回傳任何內容(void),這就是您得到 null 的原因
import 'dart:developer';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;
class detailscreen extends StatefulWidget {
detailscreen({Key? key}) : super(key: key);
@override
State<detailscreen> createState() => _detailscreenState();
}
class _detailscreenState extends State<detailscreen> {
Future<Map<String, dynamic>?> getJsonanimedetail() async {
final animedetailresponse = await http.get(
Uri.parse('https://api.jikan.moe/v4/anime/5114/full'),
headers: {"Accept": "application/json"});
if (animedetailresponse.statusCode == 200) {
log('Anime Details FOUND');
var animedetail =
jsonDecode(animedetailresponse.body)['data'] as Map<String, dynamic>;
return animedetail; // better return list
} else {
log('Anime Details ERROR');
}
}
late final future = getJsonanimedetail();
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
child: FutureBuilder(
future: future,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text("empty Data");
}
if (snapshot.hasData) {
return Center(child: Text("${snapshot.data?["title"]}"));
}
if (snapshot.hasError) {
return Text("got Error");
}
return CircularProgressIndicator();
},
),
),
);
}
}
更多關于FutureBuilder
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/512881.html
標籤:扑镖
