首页 > 其他分享 >flutter 结合 springBoot 完成登录 注册 功能

flutter 结合 springBoot 完成登录 注册 功能

时间:2024-04-22 23:11:06浏览次数:18  
标签:username const springBoot 登录 Text user context flutter String

后端接口

 前端调用接口代码

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

import '../page/login.dart';


//注册功能
Future<void> register(
    BuildContext context,
    String username,
    String password,
    String username2,
    String phoneNumber,
    String email)
async {
  try {
    Dio dio = Dio();
    String checkUrl = "http://192.168.95.241:9090/user/checkUserNameExistence?userName=$username";
    Response checkResponse = await dio.get(checkUrl);

    if (checkResponse.data) {
      // 用户名已存在,提示用户无法注册
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('注册失败'),
            content: Text('用户名已存在,请选择其他用户名'),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop(); // 关闭对话框
                },
                child: Text('确定'),
              ),
            ],
          );
        },
      );
      return;
    }

    // 用户名不存在,可以进行注册
    String registerUrl = "http://192.168.95.241:9090/user";
    Map<String, dynamic> data = {
      "user_name": username,
      "user_password": password,
      "user_name2": username2,
      "user_phone": phoneNumber,
      "user_email": email
    };
    Response response = await dio.post(registerUrl, data: data);

    if (response.statusCode == 200) {
      // 注册成功
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('注册成功'),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop(); // 关闭对话框
                  Navigator.of(context).pushReplacement( // 替换当前页面为登录页面
                    MaterialPageRoute(builder: (context) => LoginPage(key: UniqueKey())),
                  );
                },
                child: Text('确定'),
              ),
            ],
          );
        },
      );
    } else {
      // 注册失败
      showDialog(
        context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            title: Text('注册失败'),
            content: Text('错误码: ${response.statusCode}'),
            actions: <Widget>[
              TextButton(
                onPressed: () {
                  Navigator.of(context).pop();
                },
                child: Text('确定'),
              ),
            ],
          );
        },
      );
    }
  } catch (e) {
    // 请求过程中出现错误
    showDialog(
      context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          title: Text('请求错误'),
          content: Text('$e'),
          actions: <Widget>[
            TextButton(
              onPressed: () {
                Navigator.of(context).pop();
              },
              child: Text('确定'),
            ),
          ],
        );
      },
    );
  }
}


//登录功能

Future<void> login(
    BuildContext context,
    String username,
    String password)
async {

    Dio dio = Dio();
    String checkUrl = "http://192.168.95.241:9090/user/checkCredentials";

    Map<String, dynamic> data = {
      "user_name": username,
      "user_password": password,

    };
    Response response = await dio.post(checkUrl, data: data);

    if (response.statusCode == 200) {
      bool isAuthenticated = response.data;

      if (isAuthenticated) {
        // 显示登录成功对话框
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('登录成功'),
              content: Text('欢迎回来!'),
              actions: [
                TextButton(
                  onPressed: () {
                    Navigator.of(context).pop(); // 关闭对话框
                  },
                  child: Text('确定'),
                ),
              ],
            );
          },
        );
      } else {
        // 身份验证失败,显示错误消息或采取相应的操作
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text('登录失败'),
              content: Text('用户名或密码不正确'),
              actions: [
                TextButton(
                  onPressed: () {
                    Navigator.of(context).pop(); // 关闭对话框
                  },
                  child: Text('确定'),
                ),
              ],
            );
          },
        );
      }
    }
}





import 'dart:async';

import 'package:dio/dio.dart';
import 'package:flutter/material.dart';

// 导入获取用户信息的方法
import '../Do/UserDao.dart';
import '../component/container.dart';
import '../component/drawer.dart';
import 'Home1.dart';
import 'login.dart';

class MyApp2 extends StatelessWidget {
  final String username;

  const MyApp2({Key? key, required this.username}) : super(key: key); // 调用父类构造函数

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '心语航标',
      theme: ThemeData(
        primarySwatch: Colors.purple,
      ),
      home: MyHome2(username: username),
    );
  }
}

class MyHome2 extends StatefulWidget {
  final String username;

  const MyHome2({Key? key, required this.username}) : super(key: key);

  @override
  _MyHome2State createState() => _MyHome2State();
}

class _MyHome2State extends State<MyHome2> {
  Map<String, dynamic> userInfo = {}; // 初始化userInfo

  @override
  void initState() {
    super.initState();
    getUserInfo(widget.username); // 调用获取用户信息的方法
  }

  //登录查询用户信息
  Future<void> getUserInfo(String username) async {
    Dio dio = Dio();
    String apiUrl = "http://192.168.95.241:9090/user/findAll?user_name=$username";

    try {
      Response response = await dio.get(apiUrl);
      print(response);
      if (response.statusCode == 200) {
        setState(() {
          userInfo = response.data; // 更新userInfo
        });
      } else {
        setState(() {
          userInfo = {}; // 请求失败时将userInfo清空
        });
      }
    } catch (e) {
      print("Error fetching user info: $e");
      setState(() {
        userInfo = {}; // 发生异常时将userInfo清空
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 4,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('心语航标'),
          centerTitle: true,
          actions: <Widget>[
            IconButton(
              icon: const Icon(Icons.search),
              onPressed: () {
                // 搜索操作
              },
            ),
          ],
        ),
        drawer: buildCustomDrawer(
          accountEmail: userInfo['user_email'] ?? '未知邮箱',
          accountName: userInfo['user_name2'] ?? '未登录',
          currentAccountPictureAsset: 'assets/阿尼亚.jpg',
          drawerBackgroundAsset: 'assets/可可爱爱阿尼亚.jpg',
          drawerItems: [
            DrawerItem(title: '用户反馈', icon: Icons.feedback),
            DrawerItem(title: '系统设置', icon: Icons.settings),
            DrawerItem(title: '我要发布', icon: Icons.send),
            DrawerItem(title: '注销', icon: Icons.exit_to_app),
          ],
          onLoginPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (context) => LoginPage(key: UniqueKey()),
              ),
            );
          },
        ),
        bottomNavigationBar: buildCustomBottomNavigationBar(
          tabs: [
            const Tab(icon: Icon(Icons.home), text: '首页'),
            const Tab(icon: Icon(Icons.article), text: '专栏'),
            const Tab(icon: Icon(Icons.chat_bubble), text: 'AI咨询'),
            const Tab(icon: Icon(Icons.notifications), text: '消息'),
          ],
          backgroundColor: Colors.black,
          height: 60.0,
          labelStyle: const TextStyle(height: 0, fontSize: 12),
        ),
        body: TabBarView(
          children: <Widget>[
            home1(mt: 'in_teher', key: GlobalKey()),
            const Text('data2'),
            const Text('data3'),
            const Text('data4'),
          ],
        ),
      ),
    );
  }
}

  

标签:username,const,springBoot,登录,Text,user,context,flutter,String
From: https://www.cnblogs.com/youxiandechilun/p/18151791

相关文章

  • 一次奇妙的任意用户登录实战
    刚刚进行了微信sessionkey的学习,正准备实战一下,就发现了这个神奇的网站,预知后事如何。请继续向下看去1.目标2.开局一个登录框3.首先,直接弱口令走起来,万一留有测试的账号呢尝试,1311111111,13333333333.13888888888,未果测试多了还有验证码防止爆破,也就不再继续尝试爆破了......
  • sh002基于springboot的网上团购系统
    介绍网上团购系统管理员功能主要包括:个人中心、用户管理、商品列表管理、团购商品管理、订单管理、系统管理等功能由于本系统的功能模块设计比较全面,所以使得整个网上团购系统信息管理的过程得以实现。获取方式:联系QQ422149197软件架构推荐使用:谷歌浏览器后台地址http://lo......
  • sh003基于springboot的汽车租赁系统
    sh003基于springboot的汽车租赁系统 介绍汽车租赁系统管理员功能主要包括:系统设置管理、用户管理、留言板管理、公告类型管理、公告管理等功能由于本系统的功能模块设计比较全面,所以使得整个汽车租赁系统信息管理的过程得以实现。软件架构推荐使用:谷歌浏览器前台登录页......
  • sh001基于springboot+vue的线上医院挂号系统[带LW文档]
    介绍线上医院挂号系统管理员功能主要包括:个人信息管理、用户管理、论坛管理、医生管理、医生留言管理、单页数据管理、个人中心基础数据管理、医生挂号订单管理、轮播图设置等功能由于本系统的功能模块设计比较全面,所以使得整个线上医院挂号系统信息管理的过程得以实现。获取......
  • 自定义登录和登出页面
    自定义登录在默认的情况下,SpringSecurity为我们生成的登录登出页面如下:我们可以自定义登录和登出页面,我们使用thymeleaf来编写登录页面,代码如下:<!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:th="https://www.thymeleaf.org"><head><title>Pleas......
  • linux下springboot项目nohup日志或tomcat日志切割处理方案
    https://juejin.cn/post/7081890486453010469通常情况下,我们的springboot项目部署到linux服务器中,通过nohupjava-jarxxx.jar&指令来进行后台运行我们的springboot项目。这种方式针对中小型项目来说,还是比较简单方便的。通过nohup运行springboot项目,默认日志输出到当前目......
  • SpringBoot模块集成mqtt代码实现
    1//引入pom2<!--mqtt-->3<dependency>4<groupId>org.springframework.boot</groupId>5<artifactId>spring-boot-starter-integration</artifactId>6</dependency>......
  • springboot 嵌入式的web容器的的选择
    springboot默认内置tomcat可以替换undertow、jetty、nettytomcattomcat默认200最大线程完整实现了JEE容器和serlet规范tomcat6以后支持Jdk1.4的NIO用于完整支持了javaee因此比较笨重和重量级很多高并发会替换成undertowundertow这个是红帽2012开源出来的一个......
  • flutter 移动应用程序中打开URL
    url_launcher:^6.2.5 在Flutter中,url_launcher库是用于在移动应用程序中打开URL的常用工具。它允许你通过调用系统的浏览器或其他应用程序来打开指定的URL,比如网页链接、电子邮件链接、电话号码等。这个库提供了一种简单的方法来实现在应用中跳转到外部链接的功能,增强了应用的......
  • 【PLM踩坑记】新建SpringBoot项目,无法使用Java8
    概述今天开始学SpringBoot,需要使用IDEA新建SpringBoot项目。公司使用的Java版本为jdk1.8,这里我选择了这个版本的jdk之后,下面的Java选项不提供Java8。解决方法如下:首先将jdk版本选择为较新的jdk22,然后下面的Java版本随便选择一个。在正式进入项目之后,修改IDEA中的项目设置。点......