【问题标题】:Error method post ( HTTP Request ) Flutter错误方法 post ( HTTP Request ) Flutter
【发布时间】:2020-10-19 20:54:32
【问题描述】:

我是新手。我尝试了很多方法来获取数据并将数据导出到屏幕上。 Response.statusCode = 200 但数据始终为空here

Github:here

我认为来自 Main -> 未来的错误:getPost(url, "OAISJFAOISFJASF") or builder: (context, snapshot) { ... }

主要:

 import 'package:flutter/material.dart';
 import 'package:postapi/post_login.dart';

void main() {
  runApp(new MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        home: Home()
    );
  }
}

class Home extends StatelessWidget{
  String url = "http://13.250.59.224:56321/api/users/login";
  callAPI(){
    Post post = Post();
    createPost(post, url).then((response){
      if(response.statusCode > 200) {
        print(response.body);
      }
      else {
        print(response.statusCode);
      }
    }).catchError((error){
      print('error : $error');
    });
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(),
        body : FutureBuilder<Post>(
            future: getPost(url, "OAISJFAOISFJASF"),
            builder: (context, snapshot) {
              callAPI();
              if(snapshot.connectionState == ConnectionState.done) {
                if(snapshot.hasError){
                  return Text("Error");
                }
                return Text('UserID JSON : ${snapshot.data.userID}');
              }
              else
                return CircularProgressIndicator();
            }
        )
    );
  }

}

Post_Login:

import 'dart:async';
import 'dart:io';
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:http/http.dart' as http;
import 'package:http/http.dart';


Future<Post> getPost(String url, String firebase_token) async{
  Map<String, String> headers = {"Content-type": "application/json"};
  String json = '{"grant_type":"firebase_token","firebase_token":"$firebase_token"}';
  final response = await http.post(
      url, headers: headers,
      body: json);
     return postFromJson(response.body);
}

Future<http.Response> createPost(Post post, String url) async{
  final response = await http.post('$url',
      headers: {
        HttpHeaders.contentTypeHeader: 'application/json',
        HttpHeaders.authorizationHeader : ''
      },
      body: postToJson(post)
  );
  return response;
}

Post postFromJson(String str) {
  final jsonData = json.decode(str);
  return Post.fromJson(jsonData);
}

String postToJson(Post data) {
  final dyn = data.toJson();
  return json.encode(dyn);
}

class Post {
  String userID;
  String access_token;
  String refresh_token;
  String role;

  Post({
    this.userID,
    this.access_token,
    this.refresh_token,
    this.role
  });

  factory Post.fromJson(Map<String, dynamic> json) => new Post(
    userID: json["userID"],
    access_token: json["description"],
    refresh_token: json["refresh_token"],
      role: json["role"],
  );

  Map<String, dynamic> toJson() => {
    "userID": userID,
    "access_token": access_token,
    "refresh_token": refresh_token,
    "role": role,
  };
}

asdaskdasldhjalshfjlashflasdhjlaskjdaks;djaksfhjksbckasdasjdaskjdasjdklasjdlkasjdlkjglashfjklshfsadlfjsklfjsalkfjsalfjs;lfjasl

【问题讨论】:

    标签: http flutter


    【解决方案1】:

    只需查看我根据您的示例创建的示例即可。

    import 'package:flutter/material.dart';
    
    import 'package:sample_list/post_login.dart';
    
    void main() {
      runApp(new MyApp());
    }
    
    class MyApp extends StatelessWidget {
      // This widget is the root of your application.
      @override
      Widget build(BuildContext context) {
        return new MaterialApp(home: Home());
      }
    }
    
    class Home extends StatefulWidget {
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
      String url = "http://13.250.59.224:56321/api/users/login";
      @override
      void initState() {
        super.initState();
        callAPI();
      }
    
      callAPI() {
        Post post = Post();
        createPost(post, url).then((response) {
          if (response.statusCode == 200) {
            print(response.body);
          } else {
            print(response.statusCode);
          }
        }).catchError((error) {
          print('error : $error');
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
            appBar: AppBar(),
            body: FutureBuilder<Post>(
                future: getPost(url, "OAISJFAOISFJASF"),
                builder: (context, snapshot) {
                  //callAPI(); // It will get called every time for every build
                  if (snapshot.connectionState == ConnectionState.done) {
                    if (snapshot.hasError) {
                      return Text("Error");
                    }
                    return Text('UserID JSON : ${snapshot.data.userId}');
                  } else
                    return CircularProgressIndicator();
                }));
      }
    }
    
    

    //这是课后

    import 'dart:async';
    import 'dart:io';
    import 'dart:convert';
    
    import 'package:http/http.dart' as http;
    
    // To parse this JSON data, do
    //
    //     final post = postFromJson(jsonString);
    
    
    Post postFromJson(String str) => Post.fromJson(json.decode(str));
    
    String postToJson(Post data) => json.encode(data.toJson());
    
    //  Nạp và phân tích cú pháp dữ liệu JSON
    Future<Post> getPost(String url, String firebase_token) async {
      Map<String, String> headers = {"Content-type": "application/json"};
      String json =
          '{"grant_type":"firebase_token","firebase_token":"$firebase_token"}';
      final response = await http.post(url, headers: headers, body: json);
      print('string 1');
      print(response.body);
      return postFromJson(response.body);
    }
    
    Future<http.Response> createPost(Post post, String url) async {
      final response = await http.post('$url',
          headers: {
            HttpHeaders.contentTypeHeader: 'application/json',
            HttpHeaders.authorizationHeader: ''
          },
          body: postToJson(post));
      return response;
    }
    
    class Post {
      Post({
        this.userId,
        this.accessToken,
        this.tokenType,
        this.expiresUtc,
        this.issuedUtc,
        this.refreshToken,
        this.roles,
      });
    
      String userId;
      String accessToken;
      String tokenType;
      DateTime expiresUtc;
      DateTime issuedUtc;
      String refreshToken;
      List<String> roles;
    
      factory Post.fromJson(Map<String, dynamic> json) => Post(
            userId: json["user_id"],
            accessToken: json["access_token"],
            tokenType: json["token_type"],
            expiresUtc: DateTime.parse(json["expires_utc"]),
            issuedUtc: DateTime.parse(json["issued_utc"]),
            refreshToken: json["refresh_token"],
            roles: List<String>.from(json["roles"].map((x) => x)),
          );
    
      Map<String, dynamic> toJson() => {
            "user_id": userId,
            "access_token": accessToken,
            "token_type": tokenType,
            "expires_utc": expiresUtc.toIso8601String(),
            "issued_utc": issuedUtc.toIso8601String(),
            "refresh_token": refreshToken,
            "roles": List<dynamic>.from(roles.map((x) => x)),
          };
    }
    
    

    只要让你做出相应的改变。

    让我知道它是否有效。

    【讨论】:

    • 投个赞成票,这样它就会得到解决,并对其他人有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2017-10-16
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多