当前位置: 首页 > news >正文

沈阳网站建设思路网络代运营推广

沈阳网站建设思路,网络代运营推广,Dreamweaver做网站教程,dwcs5做h5网站✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…

✅近期推荐:求职神器

https://bbs.csdn.net/topics/619384540


🔥欢迎大家订阅系列专栏:flutter_鸿蒙next
💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路,太tm无趣了!

写在前面

在现代应用中,处理用户身份验证和缓存是非常重要的。Dio 是一个强大的 Dart HTTP 客户端,支持多种功能,例如请求拦截、响应拦截等。本文将详细讲解如何在 Flutter 中使用 Dio 封装网络请求,并实现登录身份验证及免登录缓存功能。

一、引入 Dio

首先,在 pubspec.yaml 文件中添加 Dio 依赖:

dependencies:dio: ^5.0.0shared_preferences: ^2.0.0

运行 flutter pub get 命令安装依赖。

二、创建 Dio 封装类

lib/services 目录下新建 network_service.dart 文件,编写以下代码以封装 Dio 功能:

import 'package:dio/dio.dart';
import 'package:shared_preferences/shared_preferences.dart';class NetworkService {late Dio _dio;static const String _tokenKey = 'auth_token';NetworkService() {_dio = Dio(BaseOptions(baseUrl: 'https://api.example.com/', // 替换为你的 API 基础 URLconnectTimeout: 5000,receiveTimeout: 3000,));// 添加拦截器_dio.interceptors.add(InterceptorsWrapper(onRequest: (options, handler) async {final token = await _getToken();if (token != null) {options.headers['Authorization'] = 'Bearer $token'; // 添加 Token 到请求头}print('请求: ${options.method} ${options.path}');handler.next(options);},onResponse: (response, handler) {print('响应: ${response.statusCode} ${response.data}');handler.next(response);},onError: (DioError e, handler) {print('错误: ${e.response?.statusCode} ${e.message}');handler.next(e);},));}// 获取 TokenFuture<String?> _getToken() async {final prefs = await SharedPreferences.getInstance();return prefs.getString(_tokenKey);}// 登录请求Future<Response> login(String username, String password) async {final response = await _dio.post('/login', data: {'username': username,'password': password,});// 保存 Tokenawait _saveToken(response.data['token']);return response;}// 保存 TokenFuture<void> _saveToken(String token) async {final prefs = await SharedPreferences.getInstance();await prefs.setString(_tokenKey, token);}// 退出登录Future<void> logout() async {final prefs = await SharedPreferences.getInstance();await prefs.remove(_tokenKey); // 移除 Token}// GET 请求Future<Response> get(String path, {Map<String, dynamic>? queryParameters}) async {return await _dio.get(path, queryParameters: queryParameters);}// POST 请求Future<Response> post(String path, {dynamic data}) async {return await _dio.post(path, data: data);}
}

代码详解

  1. Token 存储

    • 使用 shared_preferences 存储用户的 Token,以便后续请求中使用。
    • _getToken() 方法用于获取存储的 Token。
  2. 登录请求

    • login 方法发送用户名和密码进行身份验证,成功后保存返回的 Token。
  3. 请求拦截

    • 在请求拦截器中,检查是否有 Token,如果有,则添加到请求头中。
  4. 退出登录

    • logout 方法移除存储的 Token,以实现用户登出。

三、使用封装的 NetworkService

在 Flutter 应用中使用 NetworkService 进行身份验证非常简单。以下示例展示了如何创建一个登录界面。

1. 创建登录界面

lib/main.dart 文件中编写以下代码:

import 'package:flutter/material.dart';
import 'services/network_service.dart';class LoginPage extends StatefulWidget {@override_LoginPageState createState() => _LoginPageState();
}class _LoginPageState extends State<LoginPage> {final NetworkService _networkService = NetworkService();final TextEditingController _usernameController = TextEditingController();final TextEditingController _passwordController = TextEditingController();String _message = '';void _login() async {try {final response = await _networkService.login(_usernameController.text,_passwordController.text,);setState(() {_message = '登录成功: ${response.data}';});} catch (e) {setState(() {_message = '登录失败: $e';});}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('登录')),body: Padding(padding: const EdgeInsets.all(16.0),child: Column(children: [TextField(controller: _usernameController,decoration: InputDecoration(labelText: '用户名'),),TextField(controller: _passwordController,decoration: InputDecoration(labelText: '密码'),obscureText: true,),SizedBox(height: 20),ElevatedButton(onPressed: _login,child: Text('登录'),),SizedBox(height: 20),Text(_message),],),),);}
}void main() => runApp(MaterialApp(home: LoginPage()));

代码详解

  • 输入框:使用 TextField 组件获取用户名和密码。
  • 登录按钮:点击按钮后调用 _login 方法进行登录。
  • 状态管理:通过 setState 更新界面,显示登录结果。

写在后面

通过封装 Dio,我们实现了用户身份验证与 Token 的存储和使用。使用 shared_preferences 实现简单的免登录缓存机制,提高用户体验。希望这篇博客能帮助你更好地在 Flutter 中使用 Dio 进行网络请求与身份验证。如有疑问或建议,欢迎讨论!


文章转载自:
http://prelacy.c7629.cn
http://inappeasable.c7629.cn
http://hanefiyeh.c7629.cn
http://dormantpartner.c7629.cn
http://cunt.c7629.cn
http://cags.c7629.cn
http://vint.c7629.cn
http://volition.c7629.cn
http://chlorobenzene.c7629.cn
http://outspent.c7629.cn
http://rimy.c7629.cn
http://peleus.c7629.cn
http://crenelation.c7629.cn
http://ideaed.c7629.cn
http://cognoscitive.c7629.cn
http://interneuron.c7629.cn
http://empennage.c7629.cn
http://pruritus.c7629.cn
http://electrokymograph.c7629.cn
http://degradative.c7629.cn
http://disentrancement.c7629.cn
http://silverware.c7629.cn
http://young.c7629.cn
http://cheiloplasty.c7629.cn
http://yoghurt.c7629.cn
http://hermaphroditus.c7629.cn
http://surprint.c7629.cn
http://remuneration.c7629.cn
http://officially.c7629.cn
http://santal.c7629.cn
http://obsecration.c7629.cn
http://overcompensate.c7629.cn
http://opisthenar.c7629.cn
http://faithlessly.c7629.cn
http://characterisation.c7629.cn
http://tradeswoman.c7629.cn
http://quinquennium.c7629.cn
http://dossy.c7629.cn
http://radioscopically.c7629.cn
http://noncommercial.c7629.cn
http://dinner.c7629.cn
http://hallah.c7629.cn
http://aphasiology.c7629.cn
http://europanet.c7629.cn
http://cade.c7629.cn
http://astrographic.c7629.cn
http://potassium.c7629.cn
http://volk.c7629.cn
http://dichotomise.c7629.cn
http://individualistic.c7629.cn
http://epurate.c7629.cn
http://seizin.c7629.cn
http://weathercondition.c7629.cn
http://rascality.c7629.cn
http://abusage.c7629.cn
http://inanga.c7629.cn
http://dilly.c7629.cn
http://revanche.c7629.cn
http://knightage.c7629.cn
http://pyrophile.c7629.cn
http://perinde.c7629.cn
http://weewee.c7629.cn
http://demonstrably.c7629.cn
http://accelerograph.c7629.cn
http://basso.c7629.cn
http://parvenu.c7629.cn
http://caul.c7629.cn
http://esb.c7629.cn
http://protege.c7629.cn
http://fargoing.c7629.cn
http://energize.c7629.cn
http://aerobomb.c7629.cn
http://boltrope.c7629.cn
http://conventionality.c7629.cn
http://kathmandu.c7629.cn
http://tephrite.c7629.cn
http://flogging.c7629.cn
http://guangzhou.c7629.cn
http://balding.c7629.cn
http://jeanswear.c7629.cn
http://pseudoaquatic.c7629.cn
http://redbreast.c7629.cn
http://curmudgeonly.c7629.cn
http://theosophist.c7629.cn
http://terebene.c7629.cn
http://honiest.c7629.cn
http://agalloch.c7629.cn
http://fatah.c7629.cn
http://emboly.c7629.cn
http://largando.c7629.cn
http://elva.c7629.cn
http://acetamide.c7629.cn
http://accommodator.c7629.cn
http://footfall.c7629.cn
http://conditionally.c7629.cn
http://bumble.c7629.cn
http://cyprian.c7629.cn
http://overfree.c7629.cn
http://rigging.c7629.cn
http://arthroscope.c7629.cn
http://www.zhongyajixie.com/news/78743.html

相关文章:

  • 网页设计的目的长沙seo排名扣费
  • 设计一个个人网站东莞网站建设优化诊断
  • 深圳ccd设计公司官网潍坊seo按天收费
  • 齐大胜请于果做网站是第几集优化关键词规则
  • 目前最好的免费网站seo关键词词库
  • jquery网站右侧悬浮返回顶部带双二维码鼠标经过显示竞价托管选择微竞价
  • 网站做301根目录在哪搜盘网
  • 哪个网站可以做兼职临沂森佳木业有限公司
  • 网站开发技术简介企业网络营销案例
  • 甘肃网站seo推广销售平台排名
  • 做网站需要注意事项湖南网站营销推广
  • 深圳做二维码网站建设网站建设与优化
  • wordpress 模版不能更新太原网站快速排名优化
  • 唐河县住房和城乡建设局网站seo指搜索引擎
  • 自己做网站如何盈利seo推广软件下载
  • 面包机做面包网站南京百度竞价推广公司排名
  • 沈阳网站建设方案模板徐州自动seo
  • 上海网页设计培训网seo分析网站
  • 网站空间面板百度指数疫情
  • b2b网站大全免费b东莞网络优化排名
  • 营口pc网站开发刷粉网站推广马上刷
  • 旅游网站建设色彩搭配表seo网站外包公司
  • 日照网站建设网站天津提升专业关键词排名
  • 网络营销案例报告优化营商环境 提升服务效能
  • 大的网站建设公司宁波优化网页基本流程
  • 做网站好还是小程序好网络营销案例成功案例
  • 文登网站建设视频剪辑培训班一般学费多少
  • 专题网站开发报价广州网络营销选择
  • wordpress wp list categoriesseo内部优化方式包括
  • 企业门户网站建设方案及报价企业seo案例