HTTP帖子带模型类
我正在尝试将数据存储在数据库中。我的后端开发人员只为我提供了API和一些参数,这些参数如下:
- property_title
- property_type
- property_subtype
- location_city
- location_area properaty_area
- property_price
- property_description_description
- contact_number
api: https://arz-e-nafees.nafeessolutions.com/api/store
这是我的完整代码:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
Future<Album> createAlbum(String title, type, subtype, city, area, price,
description, contact) async {
final response = await http.post(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, dynamic>{
'property_title': title,
'property_type': type,
'property_subtype': subtype,
'location_city': city,
'location_area': area,
'property_price': price,
'property_description': description,
'contact_number': contact
}),
);
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;
final String type;
final String subtype;
final String city;
final String area;
final String price;
final String description;
final String contact;
const Album(
{required this.id,
required this.title,
required this.area,
required this.city,
required this.contact,
required this.description,
required this.price,
required this.subtype,
required this.type});
factory Album.fromJson(Map<String, dynamic> json) {
return Album(
id: json['id'],
title: json['property_title'],
area: json['location_area'],
city: json['location_city'],
contact: json['contact_number'],
description: json['property_description'],
price: json['property_price'],
subtype: json['property_subtype'],
type: json['property_type']);
}
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
final TextEditingController _controller = TextEditingController();
final TextEditingController _controller1 = TextEditingController();
final TextEditingController _controller2 = TextEditingController();
final TextEditingController _controller3 = TextEditingController();
final TextEditingController _controller4 = TextEditingController();
final TextEditingController _controller5 = TextEditingController();
final TextEditingController _controller6 = TextEditingController();
final TextEditingController _controller7 = 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: const 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: const InputDecoration(hintText: 'Enter Title'),
),
TextField(
controller: _controller1,
decoration: const InputDecoration(hintText: 'Enter Type'),
),
TextField(
controller: _controller2,
decoration: const InputDecoration(hintText: 'Enter subtype'),
),
TextField(
controller: _controller3,
decoration: const InputDecoration(hintText: 'Enter city'),
),
TextField(
controller: _controller4,
decoration: const InputDecoration(hintText: 'Enter area'),
),
TextField(
controller: _controller5,
decoration: const InputDecoration(hintText: 'Enter price'),
),
TextField(
controller: _controller6,
decoration: const InputDecoration(hintText: 'Enter description'),
),
TextField(
controller: _controller7,
decoration: const InputDecoration(hintText: 'Enter number'),
),
ElevatedButton(
onPressed: () {
setState(() {
_futureAlbum = createAlbum(
_controller.text,
_controller1.text,
_controller2.text,
_controller3.text,
_controller4.text,
_controller5.text,
_controller6.text,
_controller7.text);
});
},
child: const 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 const CircularProgressIndicator();
},
);
}
}
问题是我正在获得302个状态代码,并且我的数据没有保存在数据库中。请帮助,这是我第一次实施发布请求。
我不知道问题是模型,HTTP请求,标题还是API本身
I am trying to store my data in database. my backend developer provided me just the api and some parameters which are following:
- property_title
- property_type
- property_subtype
- location_city
- location_area
- property_price
- property_description
- contact_number
API: https://arz-e-nafees.nafeessolutions.com/api/store
This is my complete code:
import 'dart:async';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
Future<Album> createAlbum(String title, type, subtype, city, area, price,
description, contact) async {
final response = await http.post(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, dynamic>{
'property_title': title,
'property_type': type,
'property_subtype': subtype,
'location_city': city,
'location_area': area,
'property_price': price,
'property_description': description,
'contact_number': contact
}),
);
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;
final String type;
final String subtype;
final String city;
final String area;
final String price;
final String description;
final String contact;
const Album(
{required this.id,
required this.title,
required this.area,
required this.city,
required this.contact,
required this.description,
required this.price,
required this.subtype,
required this.type});
factory Album.fromJson(Map<String, dynamic> json) {
return Album(
id: json['id'],
title: json['property_title'],
area: json['location_area'],
city: json['location_city'],
contact: json['contact_number'],
description: json['property_description'],
price: json['property_price'],
subtype: json['property_subtype'],
type: json['property_type']);
}
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() {
return _MyAppState();
}
}
class _MyAppState extends State<MyApp> {
final TextEditingController _controller = TextEditingController();
final TextEditingController _controller1 = TextEditingController();
final TextEditingController _controller2 = TextEditingController();
final TextEditingController _controller3 = TextEditingController();
final TextEditingController _controller4 = TextEditingController();
final TextEditingController _controller5 = TextEditingController();
final TextEditingController _controller6 = TextEditingController();
final TextEditingController _controller7 = 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: const 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: const InputDecoration(hintText: 'Enter Title'),
),
TextField(
controller: _controller1,
decoration: const InputDecoration(hintText: 'Enter Type'),
),
TextField(
controller: _controller2,
decoration: const InputDecoration(hintText: 'Enter subtype'),
),
TextField(
controller: _controller3,
decoration: const InputDecoration(hintText: 'Enter city'),
),
TextField(
controller: _controller4,
decoration: const InputDecoration(hintText: 'Enter area'),
),
TextField(
controller: _controller5,
decoration: const InputDecoration(hintText: 'Enter price'),
),
TextField(
controller: _controller6,
decoration: const InputDecoration(hintText: 'Enter description'),
),
TextField(
controller: _controller7,
decoration: const InputDecoration(hintText: 'Enter number'),
),
ElevatedButton(
onPressed: () {
setState(() {
_futureAlbum = createAlbum(
_controller.text,
_controller1.text,
_controller2.text,
_controller3.text,
_controller4.text,
_controller5.text,
_controller6.text,
_controller7.text);
});
},
child: const 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 const CircularProgressIndicator();
},
);
}
}
The problem is I am getting 302 status code and my data is not saving in database. Please help, this is my first time to implement post request.
I don't know that whether the problem is with model, http request, headers or with api itself
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
更改帖子以获取应该解决您的问题。
更改为
Changing post to get should solve your problem I guess.
Change to