gpt4 book ai didi

dart - 在本地获取并存储 json

转载 作者:IT王子 更新时间:2023-10-29 07:13:47 28 4
gpt4 key购买 nike

我问了这个问题here以前,仍然没有取得太大进展。我正在尝试从一个端点获取一个 json 格式的列表并将其分配给一个实例,然后我将逐步执行该实例。

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:async';
import 'dart:convert';

import '../utils/quiz.dart';
import '../utils/question.dart';

Quiz quiz1 = Quiz([
Question(
question: 'What is 1x1',
option1: '2',
option2: '3',
option3: '4',
option4: '1',
answer: '1'),
Question(
question: 'What is 1x2',
option1: '2',
option2: '3',
option3: '4',
option4: '1',
answer: '1'),
Question(
question: 'What is 1x3',
option1: '2',
option2: '3',
option3: '4',
option4: '1',
answer: '1'),
Question(
question: 'What is 1x4',
option1: '2',
option2: '3',
option3: '4',
option4: '1',
answer: '1'),
Question(
question: 'What is 1x5',
option1: '5',
option2: '3',
option3: '4',
option4: '1',
answer: '1')
]);



class QuestionScreen extends StatefulWidget {
@override
_QuestionScreenState createState() => new _QuestionScreenState();
}

class _QuestionScreenState extends State<QuestionScreen> {
Quiz quiz;
Question currentQuestion;
String questionText;
int questionNumber;
bool isCorrect;
String option1;
String option2;
String option3;
String option4;
String answer;
int index;
int counter = 0;

int _selected;
String url = 'http://www.cloudace.io/questions';

void onChanged(int value) {
setState(() {
_selected = value;
});
}


List<Question> parseQuestions(String responseBody) {
final parsed = json.decode(responseBody).cast<Map<String, dynamic>>();

return parsed.map<Question>((json) => Question.fromJson(json)).toList();
}

Future<List<Question>> fetchQuestion(http.Client client) async {
final response = await client.get('http://www.cloudace.io/questions');

return parseQuestions(response.body);//return compute(parseQuestions, response.body);
}

Future assignQuiz() async {
quiz = Quiz(await fetchQuestion(http.Client()));
}

@override
void initState() {
super.initState();
assignQuiz();
print(quiz.toString());
}

@override
Widget build(BuildContext context) {
if (quiz != null) {
return Scaffold(
appBar: AppBar(
title: Text('Quiz'),
),
body: Container(
child: Column(
children: <Widget>[
Text(quiz.questions[counter].question),
RadioListTile(
value: 0,
groupValue: _selected,
onChanged: (int value) {
onChanged(value);
},
activeColor: Colors.red,
subtitle: Text(
quiz.questions[counter].option1,
)),
RadioListTile(
value: 1,
groupValue: _selected,
onChanged: (int value) {
onChanged(value);
},
activeColor: Colors.red,
subtitle: Text(
quiz.questions[counter].option2,
)),
RadioListTile(
value: 2,
groupValue: _selected,
onChanged: (int value) {
onChanged(value);
},
activeColor: Colors.red,
subtitle: Text(
quiz.questions[counter].option3,
)),
RadioListTile(
value: 3,
groupValue: _selected,
onChanged: (int value) {
onChanged(value);
},
activeColor: Colors.red,
subtitle: Text(
quiz.questions[counter].option4,
)),
RaisedButton(
child: Text('Press Me'),
onPressed: () {
print('counter is: $counter \n_selected is: $_selected');
setState(() {
onChanged(null);
if (counter < 5) {
counter++;
} else {
counter = 0;
}
});
})
],
),
),
);
} return Center(child: CircularProgressIndicator());}
}

如果我设置 quiz=quiz1,我会得到所需的行为,但使用 future 会返回 null,如何在构建小部件之前从 json 端点填充测验?使用 initState 似乎没有什么不同。

最佳答案

将分配给 quiz 的内容包装在 setState 中。

assignQuiz() async {
Quiz newQuiz = Quiz(await fetchQuestion(http.Client()));
setState(() {
quiz = newQuiz;
});
}

关于dart - 在本地获取并存储 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51138919/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com