HTTP帖子带模型类

发布于 2025-02-03 07:41:23 字数 6071 浏览 1 评论 0原文

我正在尝试将数据存储在数据库中。我的后端开发人员只为我提供了API和一些参数,这些参数如下:

  1. property_title
  2. property_type
  3. property_subtype
  4. location_city
  5. location_area properaty_area
  6. property_price
  7. property_description_description
  8. 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:

  1. property_title
  2. property_type
  3. property_subtype
  4. location_city
  5. location_area
  6. property_price
  7. property_description
  8. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

香橙ぽ 2025-02-10 07:41:23

更改帖子以获取应该解决您的问题。

final response = await http.post(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),

更改为

final response = await http.get(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),

Changing post to get should solve your problem I guess.

final response = await http.post(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),

Change to

final response = await http.get(
Uri.parse('https://arz-e-nafees.nafeessolutions.com/api/store'),
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文