【13】flutter进行了短视频模块开发-增加网络库基础部分网络请求库-状态管理库-表单验证库-增加网络请求控制台日志开关-针对用户中心-以及api接口建立基础部分|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex

章节内容【12】

【13】增加网络库基础部分网络请求库-状态管理库-表单验证库-增加网络请求控制台日志开关-针对用户中心-以及api接口建立基础部分

开发背景

由于甲方时间闹掰原因,那边总说这个简单,那个简单,说我们半天没出来,他们去找别人了,那这个时候我们代码部分肯定不能完全开源了,然后就让他去试试到底“简单”不“简单”,如果等我们产品完善后,甲方ok那么我们前端代码再次开源。

实战开始

增加网络请求控制台日志开关

在前端开发中,“增加网络请求控制台日志开关” 指的是为项目添加一个控制网络请求日志输出的功能,通过这个开关,开发者可以灵活地决定是否在浏览器控制台输出网络请求的相关信息,如请求的 URL、请求参数、响应状态码、响应数据等。这在开发和调试阶段非常有用,方便开发者快速定位和解决网络请求相关的问题,而在生产环境中关闭日志输出则可以避免泄露敏感信息和减少不必要的性能开销。

增加

class AppConstant {
  static String baseUrl = 'https://stqingtingapi.youyacao.com/api/v1';

  /// 网络请求控制台日志开关,true - 详细打印,false - 简单打印,null - 不打印
  static bool? logRequest = true;
  static bool enableProxyDebug = false;
}

增加对用户中心的控制

import 'dart:convert';

import 'package:ff_flutter/model/user_info.dart';
import 'package:ff_flutter/utils/network_utils/api.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';

class UserCenterController extends GetxController {
  static UserCenterController get instance => Get.find<UserCenterController>();

  bool get isLogin => token.isNotEmpty && userInfo != null;

  String token = '';
  UserInfoModel? userInfo;

  @override
  void onInit() {
    super.onInit();
    _readUserInfo();
  }

  /// 获取验证码
  Future<bool> getVerifyCode(String phone) async {
    EasyLoading.show();
    final response = await Api.getVerifyCode(phone);
    if (response == null || response.code != 200) {
      EasyLoading.dismiss();
      return false;
    }
    EasyLoading.dismiss();
    return true;
  }

  /// 用户名密码登录
  Future<bool> login({
    String? username,
    String? password,
    String? phone,
    String? code,
  }) async {
    EasyLoading.show();
    final response = await Api.login(
      username: username,
      password: password,
      phone: phone,
      code: code,
    );
    if (response == null || response.code != 200) {
      EasyLoading.dismiss();
      return false;
    }
    final String token = response.data?['token'] ?? '';
    if (token.isEmpty) {
      EasyLoading.dismiss();
      return false;
    }
    this.token = token;

    final userInfo = await updateUserInfo();
    if (userInfo != null) {
      this.userInfo = userInfo;
      _cacheUserInfo(token, userInfo);
      EasyLoading.dismiss();
      return true;
    } else {
      this.token = '';
      EasyLoading.dismiss();
      return false;
    }
  }

  /// 注册
  Future<bool> register({
    String? username,
    String? password,
    String? phone,
    String? code,
  }) async {
    EasyLoading.show();
    final response = await Api.register(
      username: username,
      password: password,
      phone: phone,
      code: code,
    );
    if (response == null || response.code != 0) {
      EasyLoading.dismiss();
      return false;
    }
    EasyLoading.dismiss();
    return true;
  }

  /// 退出登录
  Future<void> logout() async {
    EasyLoading.show();
    final response = await Api.logout();
    if (response == null || response.code != 0) {
      EasyLoading.dismiss();
      return;
    }
    EasyLoading.dismiss();
  }

  /// 获取用户信息
  Future<UserInfoModel?> updateUserInfo() async {
    EasyLoading.show();
    final response = await Api.getUserInfo();
    if (response == null || response.code != 200 || response.data == null) {
      EasyLoading.dismiss();
      return null;
    }
    try {
      EasyLoading.dismiss();
      return UserInfoModel.fromJson(response.data!);
      ;
    } catch (e) {
      EasyLoading.dismiss();
      return null;
    }
  }

  Future<void> _cacheUserInfo(String token, UserInfoModel userInfo) async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('token', token);
    prefs.setString('userInfo', jsonEncode(userInfo.toJson()));
  }

  Future<void> _readUserInfo() async {
    final SharedPreferences prefs = await SharedPreferences.getInstance();
    try {
      final token = prefs.getString('token') ?? '';
      final userInfoString = prefs.getString('userInfo') ?? '';
      final userInfoJson = jsonDecode(userInfoString);
      final userInfo = UserInfoModel.fromJson(userInfoJson);
      if (token.isNotEmpty) {
        this.token = token;
        this.userInfo = userInfo;
      }
    } catch (e) {}
  }
}

明天继续,要休息了 11点 57了

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐