GET and POST requests let your app talk to the internet. GET asks for data, POST sends data.
GET and POST requests in Flutter
import 'package:http/http.dart' as http; // GET request var response = await http.get(Uri.parse('https://example.com/data')); // POST request var response = await http.post( Uri.parse('https://example.com/submit'), body: {'key': 'value'}, );
Use http.get to fetch data without changing anything on the server.
Use http.post to send data to the server, like submitting a form.
var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));var response = await http.post( Uri.parse('https://jsonplaceholder.typicode.com/posts'), body: {'title': 'Hello', 'body': 'World'}, );
This Flutter app has two buttons. One button fetches data from the internet using a GET request and shows the title of a post. The other button sends data using a POST request and shows a success or failure message.
import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; void main() => runApp(MyApp()); class MyApp extends StatefulWidget { @override State<MyApp> createState() => _MyAppState(); } class _MyAppState extends State<MyApp> { String _data = 'Press button to load data'; Future<void> fetchData() async { final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1')); if (response.statusCode == 200) { final jsonData = json.decode(response.body); setState(() { _data = jsonData['title']; }); } else { setState(() { _data = 'Failed to load data'; }); } } Future<void> sendData() async { final response = await http.post( Uri.parse('https://jsonplaceholder.typicode.com/posts'), body: json.encode({'title': 'Flutter', 'body': 'POST request example'}), headers: {'Content-Type': 'application/json; charset=UTF-8'}, ); if (response.statusCode == 201) { setState(() { _data = 'Data sent successfully!'; }); } else { setState(() { _data = 'Failed to send data'; }); } } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('GET and POST Requests')), body: Padding( padding: const EdgeInsets.all(16), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(_data, textAlign: TextAlign.center), SizedBox(height: 20), ElevatedButton( onPressed: fetchData, child: Text('GET Data'), ), SizedBox(height: 10), ElevatedButton( onPressed: sendData, child: Text('POST Data'), ), ], ), ), ), ); } }
Always check the response status code to know if the request worked.
Use Uri.parse to convert the URL string to a Uri object.
Network calls are asynchronous, so use await inside async functions.
GET requests fetch data from a server without changing it.
POST requests send data to a server to create or update something.
Use the http package in Flutter to make these requests easily.
Practice
http package?Solution
Step 1: Understand GET request purpose
GET requests are used to retrieve or fetch data from a server without modifying it.Step 2: Compare with other request types
POST requests send data to create or update, DELETE removes data, and authentication is separate.Final Answer:
To fetch data from a server without changing it -> Option CQuick Check:
GET = fetch data [OK]
- Confusing GET with POST requests
- Thinking GET modifies server data
- Mixing GET with DELETE or authentication
http package in Flutter?Solution
Step 1: Identify correct method and parameters
Thehttp.postmethod requires a Uri object and an optional body map for data.Step 2: Check syntax correctness
http.post(Uri.parse(url), body: {"key": "value"}); usesUri.parse(url)and passes body correctly. Others use wrong methods or parameters.Final Answer:
http.post(Uri.parse(url), body: {"key": "value"}); -> Option AQuick Check:
POST syntax = http.post(Uri.parse(url), body) [OK]
- Passing URL as string instead of Uri
- Using http.get instead of http.post for POST
- Wrong method name like sendPost
http package?
var response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));
print(response.statusCode);
print(response.body.contains('userId'));Solution
Step 1: Understand the GET request URL
The URL points to a valid post resource, so the server should respond with status 200 (OK).Step 2: Check response body content
The JSON response includes a 'userId' field, soresponse.body.contains('userId')returns true.Final Answer:
200 and true -> Option DQuick Check:
Status 200 and body contains 'userId' = true [OK]
- Assuming 404 for valid URL
- Not checking response body content
- Confusing status codes
var response = await http.post('https://example.com/api', body: {"name": "John"});
print(response.statusCode);Solution
Step 1: Check URL parameter type
Thehttp.postmethod requires the URL as a Uri object, not a plain string.Step 2: Confirm correct usage
Wrapping the URL string withUri.parse()fixes the error. Other options are not mandatory errors here.Final Answer:
URL should be wrapped with Uri.parse() -> Option BQuick Check:
URL must be Uri.parse(string) [OK]
- Passing URL as plain string
- Assuming body must be JSON string always
- Forgetting to await async calls
http package?Solution
Step 1: Set headers and encode body correctly
To send JSON data, set header "Content-Type" to "application/json" and encode body withjsonEncode.Step 2: Parse JSON response properly
UsejsonDecodeonresponse.bodyto convert JSON string to Dart object.Step 3: Check URL parameter type
URL must be wrapped withUri.parse()for correct request.Final Answer:
Use http.post with Uri.parse, headers, jsonEncode body, and jsonDecode response -> Option AQuick Check:
POST JSON = headers + jsonEncode + jsonDecode [OK]
- Not setting Content-Type header
- Passing body as map without encoding
- Using http.get instead of post for sending data
- Passing URL as string without Uri.parse
Ready to prove it?
Pass the test and this pattern moves unknown
