Так далеко от json, который вы предоставили, я создал и пример для вас в формате listview, просто проверьте его.
следующий json, который вы предоставили:
{
"first_name": "First Name",
"batch_name": "Batch 1",
"enrolled_subjects": [
"Subject 4",
"Subject 5"
],
"batch_timetable": {
"Mon": {
"Subject 4": [
"6:00 PM - 7:00 PM"
],
"Subject 5": [
"5:00 PM - 6:00 PM",
"7:00 PM - 8:00 PM"
],
"Subject 6": [
"8:00 PM - 9:00 PM"
]
},
"Tue": {
"Subject 4": [
"6:00 PM - 7:00 PM"
],
"Subject 5": [
"7:00 PM - 8:00 PM"
],
"Subject 6": [
"8:00 PM - 9:00 PM"
]
}
}
}
На основе json я создал пользовательский интерфейс
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _isLoading = false;
List<Timings> timingsList = List();
Future<String> loadFromAssets() async {
return await rootBundle.loadString('json/parse.json');
}
@override
void initState() {
super.initState();
dataLoadFunction();
}
dataLoadFunction() async {
setState(() {
_isLoading = true;
});
String jsonString = await loadFromAssets();
Map newStringMap = json.decode(jsonString);
//print(newStringMap['batch_timetable']);
newStringMap['batch_timetable'].forEach((key, value) {
List<Subjects> subjectsList = List();
print(key);
// print(value);
value.forEach((key, value) {
print(key);
print(value);
List<dynamic> timingValue = List();
timingValue.add(value);
Subjects subjects = Subjects(subjectName: key, timings: timingValue);
subjectsList.add(subjects);
});
Timings sampleObject = Timings(
day: key,
subjectList: subjectsList,
);
timingsList.add(sampleObject);
});
print(timingsList.length);
setState(() {
_isLoading = false;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: _isLoading
? CircularProgressIndicator()
: ListView.builder(
itemCount: timingsList.length,
shrinkWrap: true,
itemBuilder: (BuildContext context, int index) {
return Card(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top:10,left:15),
child: Row(
children: <Widget>[
Text('Day :'),
Text(timingsList[index].day),
],
),
),
Divider(color: Colors.grey,),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(' Day wise Subjects are :'),
ListView.builder(
itemCount: timingsList[index].subjectList.length,
shrinkWrap: true,
itemBuilder: (BuildContext context, int i) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(timingsList[index]
.subjectList[i]
.subjectName),
for (int j = 0;
j <
timingsList[index]
.subjectList[i]
.timings
.length;
j++)
Text(timingsList[index]
.subjectList[i]
.timings[j]
.toString()),
],
);
},
)
],
)
],
),
);
},
),
),
);
}
}
class Timings {
final String day;
final List<Subjects> subjectList;
Timings({
this.day,
this.subjectList,
});
}
class Subjects {
final String subjectName;
final List<dynamic> timings;
Subjects({this.subjectName, this.timings});
}
Я только что добавил данные, вы можете украсить его в соответствии с желаемым пользовательским интерфейсом:
Чего я достиг в этот код
1) Данные будут извлекаться динамически, так что даже если json изменится, они будут адаптироваться соответствующим образом.
2) Добавил их в формат представления списка, вы можете делать то, что вы хотите.
Предоставлен образец пользовательского интерфейса, который я сделал
Сообщите мне, работает ли он.