Rest api flutter get метод работает, а post нет

имеем эту ошибку из ответа сервера имеем эту ошибку из ответа сервера

это модели и api

полный исходный код можно найти здесь https://github.com/alihassan75/project




// To parse this JSON data, do
//
//     final task = taskFromJson(jsonString);
import 'dart:collection';
import 'dart:core';
import 'package:flutter/foundation.dart';
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

//List<Task> taskFromJson(String str) => List<Task>.from(json.decode(str).map((x) => Task.fromJson(x)));

//String taskToJson(List<Task> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class Project {
 Project({
this.id,
required this.project_name,
this.created_at,
// required this.start_date,
//required this.end_date,
required this.user,
 });

  int? id;
 final String? project_name;
  DateTime? created_at;
 // final DateTime? start_date;
  //final DateTime? end_date;
  int user;

 factory Project.fromJson(Map<String, dynamic> json) => Project(
   id: json["id"],
   project_name: json["project_name"],
   created_at: DateTime.parse(json["created_at"]),
   // start_date: DateTime.parse(json["start_date"]),
   //end_date: DateTime.parse(json["end_date"]),
   user: json["user"],
 );

 Map<String, dynamic> toJson() => {
   "id": id,
   "project_name": project_name,
   "created_at": created_at?.toIso8601String(),
   // "start_date": start_date?.toIso8601String(),
    //"end_date": end_date?.toIso8601String(),
   "user": user,
 };
}
class ProjectProvider with ChangeNotifier{
 ProjectProvider(){
   this.fetchProject();
 }


 List<Project> _project = [];
 List<Project> get project {
   return [..._project];
 }

   void addProject(Project project) async {
   final response = await http.post(Uri.parse('http://mostafahamed.pythonanywhere.com/project/api'),
       headers: {"Content-Type": "application/json"}, body: json.encode(project));
   if (response.statusCode == 201) {
     project.id = json.decode(response.body)['id'];
     
     _project.add(project);
     notifyListeners();
   print('sucess');
   }
  else {
    print(response.body);
   throw Exception('Failed to add project');
 }
 }

 void deleteProject(Project project) async {
   final response =
       await http.delete(Uri.parse('http://mostafahamed.pythonanywhere.com/project/api${project.id}/'));
   if (response.statusCode == 204) {
     _project.remove(project);
     notifyListeners();
      print('sucess');
   }
  else {
  
   throw Exception('Failed to load tasks');
 }
 
 }



   fetchProject() async{
    final response = await http
     .get(Uri.parse('http://mostafahamed.pythonanywhere.com/project/api?format=json'));
   if (response.statusCode==200){
     var data = json.decode(response.body)as List;
     _project=data.map<Project>((json) => Project.fromJson(json)).toList();
    
     notifyListeners();
      print('sucess');
   }
  else {
   // If the server did not return a 200 OK response,
   // then throw an exception.
   throw Exception('Failed to load projects');
 }
 }
}



здесь я вызываю обратно метод post с функцией добавления данных

это приложение сделано для входа пользователей и просмотра проектов и добавления проектов как todo app на сервере django я могу добавлять проекты и просматривать проекты regstring с почтой администратора с сервера python backend ... в этом приложении я могу только просматривать проекты но не могу добавить новый проект это мой проект для окончания университета так что моя жизнь зависит от этого :D полный исходный код https://github.com/alihassan75/project

Вы не получаете данные "user", потому что вы не сохраняете "user" после входа в систему.

Вам необходимо сохранить пользователя в любом локальном хранилище. Для демонстрационной цели я сохраню его в HIVE

.
  1. Импортируйте пакет hive в pubspec.yaml hive: ^2.1.0
  2. В главной функции (перед запуском приложения) инициализируем и открываем ящик "user"
await Hive.initFlutter();
await Hive.openBox('User');
  1. Вы можете нажать на поле пользователя в функции входа в систему следующим образом.
box = Hive.box('User');
int userId = responseJson['user']['id'];
box.put('user_id', userId);
  1. Вы можете читать пользователя, когда захотите, вот так.
 late Box box;
 late int userid;
 box = Hive.box('User');
 super.initState();
 final data = box.get('user_id');
  1. Теперь вы можете передать данные в http api вызов.

Спасибо

Вернуться на верх