2

I'm new to flutter and I'm developing a flutter app where I have to show in a listView the data on the database.

I get the data in JSON format.

{
    "data": [
        {
            "id": “1”,
            "testo": "Fare la spesa",
            "stato": "1"
        },
        {
            "id": “2”,
            "testo": "Portare fuori il cane",
            "stato": "1"
        },
        {
            "id": “3”,
            "testo": “jhon”,
            "stato": "0"
        }
    ]
}

The problem is that I don't load the data, I can't understand how to do it.

I should read 'Data' with an array but I don't know how to do it.

Can anyone help me figure out how to do it?

Thanks for your help.

PS. I tried this tutorial

Main.dart

Future<Post> fetchPost() async {
  final response =
  await http.get('http://simone.fabriziolerose.it/index.php/Hello/dispdataflutter');

  if (response.statusCode == 200) {
    // If the call to the server was successful, parse the JSON.
    return Post.fromJson(json.decode(response.body));
  } else {
    // If that call was not successful, throw an error.
    throw Exception('Failed to load post');
  }
}

class Post {
  final int id;
  final String title;
  final String body;

  Post({ this.id, this.title, this.body});

  factory Post.fromJson(Map<String, dynamic> json) {
    return Post(

      id: json['id'],
      title: json['testo'],
      body: json['stato'],
    );
  }
}

void main() => runApp(MyApp(post: fetchPost()));

class MyApp extends StatelessWidget {
  final Future<Post> post;

  MyApp({Key key, this.post}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Fetch Data Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Fetch Data Example'),
        ),
        body: Center(
          child: FutureBuilder<Post>(
            future: post,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return Text(snapshot.data.title);
              } else if (snapshot.hasError) {
                return Text("${snapshot.error}");
              }

              // By default, show a loading spinner.
              return CircularProgressIndicator();
            },
          ),
        ),
      ),
    );
  }
}

1 Answer 1

1

I'd rather return List of Post from fetchPost(), like below :

Future<List<Post>> fetchPost() async {
  final response = await http.get('http://simone.fabriziolerose.it/index.php/Hello/dispdataflutter');

  if (response.statusCode == 200) {
  List responseList = json.decode(response.body);
  return responseList.map((data)=>Post.fromJson(data)).toList();
  } else {
  // If that call was not successful, throw an error.
  throw Exception('Failed to load post');
  }
}

and use ListView.builder instead like this

List<Post> post;

child: ListView.builder(
  itemCount: post.length,
  physics: BouncingScrollPhysics(),
  padding: EdgeInsets.all(0),
  itemBuilder: (context, index){
    return ListAdapter(
       id: post[index].id,
       title: post[index].title,
       body: post[index].body
       );
    },
  )
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.