Created
May 26, 2021 16:48
-
-
Save siumhossain/f936af34ea4dd5a64f31ea5a57493341 to your computer and use it in GitHub Desktop.
Post request by flutter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import 'dart:async'; | |
| import 'dart:convert'; | |
| import 'package:flutter/material.dart'; | |
| import 'package:http/http.dart' as http; | |
| Future<Album> createAlbum(String title) async { | |
| final response = await http.post( | |
| Uri.parse('https://jsonplaceholder.typicode.com/albums'), | |
| headers: <String, String>{ | |
| 'Content-Type': 'application/json; charset=UTF-8', | |
| }, | |
| body: jsonEncode(<String, String>{ | |
| 'title': title, | |
| }), | |
| ); | |
| if (response.statusCode == 201) { | |
| // If the server did return a 201 CREATED response, | |
| // then parse the JSON. | |
| return Album.fromJson(jsonDecode(response.body)); | |
| } else { | |
| // If the server did not return a 201 CREATED response, | |
| // then throw an exception. | |
| throw Exception('Failed to create album.'); | |
| } | |
| } | |
| class Album { | |
| final int id; | |
| final String title; | |
| Album({required this.id, required this.title}); | |
| factory Album.fromJson(Map<String, dynamic> json) { | |
| return Album( | |
| id: json['id'], | |
| title: json['title'], | |
| ); | |
| } | |
| } | |
| void main() { | |
| runApp(MyApp()); | |
| } | |
| class MyApp extends StatefulWidget { | |
| MyApp({Key? key}) : super(key: key); | |
| @override | |
| _MyAppState createState() { | |
| return _MyAppState(); | |
| } | |
| } | |
| class _MyAppState extends State<MyApp> { | |
| final TextEditingController _controller = TextEditingController(); | |
| Future<Album>? _futureAlbum; | |
| @override | |
| Widget build(BuildContext context) { | |
| return MaterialApp( | |
| title: 'Create Data Example', | |
| theme: ThemeData( | |
| primarySwatch: Colors.blue, | |
| ), | |
| home: Scaffold( | |
| appBar: AppBar( | |
| title: Text('Create Data Example'), | |
| ), | |
| body: Container( | |
| alignment: Alignment.center, | |
| padding: const EdgeInsets.all(8.0), | |
| child: (_futureAlbum == null) ? buildColumn() : buildFutureBuilder(), | |
| ), | |
| ), | |
| ); | |
| } | |
| Column buildColumn() { | |
| return Column( | |
| mainAxisAlignment: MainAxisAlignment.center, | |
| children: <Widget>[ | |
| TextField( | |
| controller: _controller, | |
| decoration: InputDecoration(hintText: 'Enter Title'), | |
| ), | |
| ElevatedButton( | |
| onPressed: () { | |
| setState(() { | |
| _futureAlbum = createAlbum(_controller.text); | |
| }); | |
| }, | |
| child: Text('Create Data'), | |
| ), | |
| ], | |
| ); | |
| } | |
| FutureBuilder<Album> buildFutureBuilder() { | |
| return FutureBuilder<Album>( | |
| future: _futureAlbum, | |
| builder: (context, snapshot) { | |
| if (snapshot.hasData) { | |
| return Text(snapshot.data!.title); | |
| } else if (snapshot.hasError) { | |
| return Text('${snapshot.error}'); | |
| } | |
| return CircularProgressIndicator(); | |
| }, | |
| ); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment