Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

can you please help with parsing this json ? #8

Open
basharbachir opened this issue Oct 20, 2020 · 0 comments
Open

can you please help with parsing this json ? #8

basharbachir opened this issue Oct 20, 2020 · 0 comments

Comments

@basharbachir
Copy link

basharbachir commented Oct 20, 2020

hi, may i ask you to help me please to parse this json in this url ,

http://opml.radiotime.com/Browse.ashx?render=json&c=podcast

my code is here, so what i did wrong please ?

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
Future<List<Children>> fetchsprodcasts(http.Client client) async {
  final response =
  await client.get("http://opml.radiotime.com/Browse.ashx?render=json&c=podcast", headers: {'Content-Type': 'application/json; charset=utf-8'});
  return compute(parseProdcasts,utf8.decode(response.bodyBytes));
}
List<Children> parseProdcasts(String responseBody) {
  final parsed = jsonDecode(responseBody)['body'].map((item)=> item['children']).toList().expand((x) => x).toList();
  return parsed.map((m) => new Children.fromJson(m)).toList();
}
class Prodcasts {
  Head head;
  List<Body> body;

  Prodcasts({this.head, this.body});

  Prodcasts.fromJson(Map<String, dynamic> json) {
    head = json['head'] != null ? new Head.fromJson(json['head']) : null;
    if (json['body'] != null) {
      body = new List<Body>();
      json['body'].forEach((v) {
        body.add(new Body.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.head != null) {
      data['head'] = this.head.toJson();
    }
    if (this.body != null) {
      data['body'] = this.body.map((v) => v.toJson()).toList();
    }
    return data;
  }
}
class Head {
  String title;
  String status;

  Head({this.title, this.status});

  Head.fromJson(Map<String, dynamic> json) {
    title = json['title'];
    status = json['status'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['title'] = this.title;
    data['status'] = this.status;
    return data;
  }
}
class Body {
  String element;
  String text;
  List<Children> children;

  Body({this.element, this.text, this.children});

  Body.fromJson(Map<String, dynamic> json) {
    element = json['element'];
    text = json['text'];
    if (json['children'] != null) {
      children = new List<Children>();
      json['children'].forEach((v) {
        children.add(new Children.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['element'] = this.element;
    data['text'] = this.text;
    if (this.children != null) {
      data['children'] = this.children.map((v) => v.toJson()).toList();
    }
    return data;
  }
}
class Children {
  String element;
  String type;
  String text;
  String uRL;
  String guideId;

  Children({this.element, this.type, this.text, this.uRL, this.guideId});

  Children.fromJson(Map<String, dynamic> json) {
    element = json['element'];
    type = json['type'];
    text = json['text'];
    uRL = json['URL'];
    guideId = json['guide_id'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['element'] = this.element;
    data['type'] = this.type;
    data['text'] = this.text;
    data['URL'] = this.uRL;
    data['guide_id'] = this.guideId;
    return data;
  }
}
void main() {
  runApp(ParseProdcastss());
}
class ParseProdcastss extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return  ParseProdcasts();
  }
}
class ParseProdcasts extends StatelessWidget {
  ParseProdcasts({Key key}) : super(key: key);
  @override
  Widget build(BuildContext context) {
    return  FutureBuilder<List<Children>>(
      future: fetchsprodcasts(http.Client()),
      builder: (context, snapshot) {
        if (snapshot.hasError) print(snapshot.error);
        return snapshot.hasData
            ? ProdcastsList(childrenList: snapshot.data) :Container(
          color: Colors.white,
              child: Center(child: new CircularProgressIndicator(
          backgroundColor: Color(0xff193451),
          valueColor: AlwaysStoppedAnimation<Color>(Colors.blueGrey),
        )),
            );
      },
    );
  }
}
class ProdcastsList extends StatefulWidget {
  List<Children> childrenList = []; // We assume that you filled this list with children.
  ProdcastsList({Key key, this.childrenList}) : super(key: key);
  @override
  _ProdcastsListState createState() => _ProdcastsListState();
}
class _ProdcastsListState extends State<ProdcastsList> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.blueGrey,
        body: Container(
          color: Colors.blueGrey,
          child: Column(
            children: [
              Expanded(
                child: ListView.builder(
                  physics: ClampingScrollPhysics(),
                  shrinkWrap: true,
                  itemCount: widget.childrenList.length,
                  itemBuilder: (context, index) {
                    return ExpansionTile(
                      backgroundColor: Colors.grey.shade200,
                      children: <Widget>[
                      ],
                      title: Text('${widget.childrenList[index].text}',style: TextStyle(fontSize: 12, color: Colors.blueGrey),),
                      subtitle: Text(''),
                    );
                  },
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant