JSON.DECODE返回零值Flutter



我正在尝试创建一个quizapp,我在其中创建卡片,就像当用户点击特定的卡片时,它将被重定向到该quizpage。

这是我试图获取json文件数据的地方,这些数据是测试问题

class getjson extends StatelessWidget {

@override
Widget build(BuildContext context) {

return FutureBuilder(
future:DefaultAssetBundle.of(context).loadString("assets/questions/generalQ.json"),
builder: (context, snapshot) {
List mydata = json.decode(snapshot.data.toString());
print(mydata);
if (mydata == null) {
return Scaffold(
body: Center(
child: Text(
"Loading",
),
),
);
} else {
return quizpage();
}
},
);
}
}

class quizpage extends StatefulWidget {
@override
_quizpageState createState() => _quizpageState();
}
class _quizpageState extends State<quizpage> {
@override
Widget build(BuildContext context) {
return Container(

);
}
}

在这里我创建了卡片小部件

Widget customcard(String langname, String image, String des){
return Padding(
padding: EdgeInsets.symmetric(
vertical: 20.0,
horizontal: 30.0,
),
child: InkWell(
onTap: (){
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=>getjson(),));
},

我在onTap上调用getjson类。

当我运行应用程序点击卡时,它显示我";加载";,它在"0"上返回null;mydata";的getjson类。

如何修复?为什么它在mydata上返回null?请帮忙!

JSON文件:

[
{
"1": "What is the world's most populated country?",
"2": "Each year World Red Cross and Red Crescent Day is celebrated on",
"3": "The ozone layer restricts"
},
{
"1": {
"a": "Russia",
"b": "China",
"c": "USA"
},
"2": {
"a": "May 8",
"b": "May 18",
"c": "April 28"

},
"3": {
"a": "Visible light",
"b": "Ultraviolet radiation",
"c": "Infrared radiation"
}
}
]

实际上很简单,你说你的列表=一个未来。当你做json.decode(snapshot.data(时,你的futureBuilder的Future还没有完成,所以当时的mydata是snapshot.datanull。你应该写:

if(snapshot.ConnectionState == ConnectionState.done){
List mydata = json.decode(snapshot.data.toString());
return quizpage();
}else{
return Scaffold(
body: Center(
child: Text(
"Loading",
),
),
);
}

最新更新