美文网首页
flutter http 请求客户端

flutter http 请求客户端

作者: 渣渣曦 | 来源:发表于2018-12-28 10:53 被阅读0次

1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/http#-installing-tab-”确认版本号后,将http(0.12.0或更高版本)添加到依赖项列表。

2、在Android Studio的编辑器视图中查看pubspec时,单击右上角的 Packages get,或者在命令行输入“flutter packages get”;这会将依赖包安装到您的项目。

3、运行以下代码
样例一

import 'dart:async';
import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

Future<Post> fetchPost() async {
  final response =
      await http.get('https://jsonplaceholder.typicode.com/posts/1');
  final responseJson = json.decode(response.body);

  return new Post.fromJson(responseJson);
}

class Post {
  final int userId;
  final int id;
  final String title;
  final String body;

  Post({this.userId, this.id, this.title, this.body});

  factory Post.fromJson(Map<String, dynamic> json) {
    return new Post(
      userId: json['userId'],
      id: json['id'],
      title: json['title'],
      body: json['body'],
    );
  }
}

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Fetch Data Example',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new Scaffold(
        appBar: new AppBar(
          title: new Text('Fetch Data Example'),
        ),
        body: new Center(
          child: new FutureBuilder<Post>(
            future: fetchPost(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                return new Text(snapshot.data.title);
              } else if (snapshot.hasError) {
                return new Text("${snapshot.error}");
              }
              // By default, show a loading spinner
              return new CircularProgressIndicator();
            },
          ),
        ),
      ),
    );
  }
}

JSON请求样例片段代码

...
  TextEditingController usernameController = new TextEditingController();
  TextEditingController passwordController = new TextEditingController();
...
  TextField(controller: usernameController),
  TextField(controller: passwordController),
...
  login(usernameController.text,passwordController.text).then((token){
     print(token);
     SharedPreferences.getInstance().then((prefs){
     print(prefs.get("token"));
  });
...
Future<dynamic> login(username,password) async{
  var url = "http://192.168.3.4/login/auth";
//  headers.append('Access-Control-Allow-Headers', 'Content-Type');
  var map = new Map<String, dynamic>();
  map["LoginName"]=username;
  map["Password"]=password;
  var response = await http.post(url,
      headers: {HttpHeaders.contentTypeHeader: 'application/json'},
      body:jsonEncode(map));
  if (response.statusCode == 200) {
    var jsonResponse = jsonDecode(response.body);
    var ok = jsonResponse['ok'];
    if(ok){
      SharedPreferences prefs = await SharedPreferences.getInstance();
      await prefs.setString('token', jsonResponse['token']);
      return jsonResponse['token'];
    }else{
      print(jsonResponse['error']);
    }
  } else {
    print("Request failed with status: ${response.statusCode}.");
  }
}
...

JWT解析代码

Map<String, dynamic> parseJwt(String token) {
  final parts = token.split('.');
  if (parts.length != 3) {
    throw Exception('invalid token');
  }
  final payload = _decodeBase64(parts[1]);
  final payloadMap = json.decode(payload);
  if (payloadMap is! Map<String, dynamic>) {
    throw Exception('invalid payload');
  }
  return payloadMap;
}

String _decodeBase64(String str) {
  String output = str.replaceAll('-', '+').replaceAll('_', '/');
  switch (output.length % 4) {
    case 0:
      break;
    case 2:
      output += '==';
      break;
    case 3:
      output += '=';
      break;
    default:
      throw Exception('Illegal base64url string!"');
  }
  return utf8.decode(base64Url.decode(output));
}

持久化存储
1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspec.yaml中,通过网址“https://pub.dartlang.org/packages/shared_preferences#-installing-tab-”确认版本号后,将shared_preferences(0.5.1+2或更高版本)添加到依赖项列表。

2、在Android Studio的编辑器视图中查看pubspec时,单击右上角的 Packages get,或者在命令行输入“flutter packages get”;这会将依赖包安装到您的项目。

3、 代码片段如下

import 'package:shared_preferences/shared_preferences.dart';
...
//存储token
SharedPreferences prefs = SharedPreferences.getInstance();
prefs.setInt('jwt', token);
...
//读取token
SharedPreferences.getInstance().then((prefs){
      print(prefs.get("token"));
});
...

相关文章

  • flutter http 请求客户端

    1、pubspec文件管理Flutter应用程序的assets(资源,如图片、package等)。 在pubspe...

  • session与cookie之间的关系

    一、客户端与服务端请求响应的关系 USER(客户端) 请求 tomcat(服务器), 属于HTTP请求。http...

  • HTTP

    HTTP是什么 超文本传输协议 http客户端发起请求,创建端口 http服务器在端口监听客户端请求 http服务...

  • node 小记(0418)http

    什么是http及相关知识 http客户端发起请求,创建端口 http服务器在端口监听客户端请求 http服务器向客...

  • IOS 网络请求构建--HTTP简介

    HTTP 介绍 1. HTTP请求与响应 HTTP请求遵循着客户端-服务器范式请求步鄹序列:客户端建立一个到服务器...

  • TCP/HTTP/Socket

    HTTP和Scoket通信的区别。 http是客户端用http协议进行请求,发送请求时候需要封装http请求头,并...

  • Flutter 网络请求 - Http请求

    每个 APP 基本上都离不开网络请求,Flutter 是怎么进行网络请求的?这篇博客简单介绍一下基本的 Http ...

  • 12. HTTP协议二:HTTP请求与响应、常见状态码

    HTTP请求与响应 HTTP请求 HTTP请求是指从客户端到服务器端的请求消息。HTTP请求主要由三部分构成,请求...

  • 计算机网络基础知识

    1.http协议和组成 客户端请求:请求行 请求头 空行 请求体请求行包含请求方法、URI、HTTP版本信息请求头...

  • HTTP协议中的1xx,2xx,3xx,4xx,5xx状态码分别

    HTTP协议状态码,是指在HTTP协议运作中由客户端发出请求连接,服务端建立连接,客户端发出HTTP请求,服务端返...

网友评论

      本文标题:flutter http 请求客户端

      本文链接:https://www.haomeiwen.com/subject/gjkslqtx.html