Flutter+WebRTC开发点对点加密即时通讯APP--LoginScreen登录界面实现

发布于:2024-05-09 ⋅ 阅读:(21) ⋅ 点赞:(0)

Flutter+WebRTC开发点对点加密即时通讯APP--LoginScreen登录界面实现

开篇

 基于Flutter+WebRTC,开发一款点对点加密、跨端、即时通讯APP,实现文字、音视频通话聊天,同时支持图片、短视频等文件传输功能,计划支持Windows、Android平台。我准备将自己的学习和实践过程记录下来,同时分享给大家,欢迎大家一起研讨交流。这个工程是利用自己的业余时间来实现的,不定时更新。本篇文章实现APP的LoginScreen登录界面。

1.gif

 因为我们要开发的是点对点加密即时通讯APP,所以我们事先肯定要知道对方的IP地址,这样才能建立连接,如果说你有固定的服务器,那么直接写死到APP也是可行的,但这不是我们考虑的情况。

 在我们的APP中,建立连接的双方一方充当服务器,一方作为客户端,开启APP时,服务端输入IP和端口以及自定义的用户名,开启监听,等待客户端的连接。客户端开启时输入服务器的IP和端口,再自定义一个自己的用户名,然后向服务器端发起连接请求,完成连接建立。服务端和客户端都要自定义自己的用户名,作为自己的显示标识。

主背景颜色

 首先设置一下登录界面的背景色,此次开发的APP是粉色系的APP,主要颜色是粉色,毕竟谁能不喜欢粉色呢?我们使用 Stack组件结合粉色的Container组件来给APP打个底,绘制出粉色的背景效果。

 Stack(
      children: [
        Container(
          color: const Color.fromARGB(255, 246, 212, 223), //背景颜色
        ),
    ],
);

2.png

状态栏颜色

 我们可以看到,一整块粉色的背景图已经绘制出来了,但是有点美中不足,就是状态栏部分,还有一层半透明的遮着:

3.png

 那么我们接下来就对状态栏颜色进行设置,让他和背景颜色一致,我们可以通过设置SystemChrome来对状态栏颜色进行自定义绘制,statusBarIconBrightness可以设置状态栏图标颜色,statusBarColor可以设置状态栏颜色。如果需要设置全局的状态栏颜色,那么就将设置代码放到main函数中,如果只需要设置某些界面,那么就将设置代码放置到某个组件的Widget build(BuildContext context) {}函数中。

SystemUiOverlayStyle systemUiOverlayStyle = const SystemUiOverlayStyle(
      statusBarIconBrightness: Brightness.dark, //状态栏图标颜色(Android)
      // statusBarColor: Colors.transparent //状态栏透明
      statusBarColor: Color.fromARGB(255, 246, 212, 223), //状态栏的颜色
    );
SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle); //状态栏设置

4.png

登录界面布局

 登录界面的上半部分放置lottie动画,下半部分放置输入框和登录按钮。下半部分设置为白色背景,并设置圆角。外层使用 Column组件包裹,将动画组件和登录组件竖向放置,在Container组件的decoration中设置圆角和背景颜色。

Column(
     children: [
       Expanded(
         flex: 1,
         child: Lottie.asset('assets/girl.json'), //lottie动画
       ),
       Expanded(
         flex: 1,
         child: Container(
           alignment: Alignment.center,
           decoration: const BoxDecoration(
             //背景圆角形状
             color: Color.fromARGB(255, 250, 250, 250), //背景颜色
             borderRadius: BorderRadius.only(
               //设置圆角
               topLeft: Radius.circular(48),
               topRight: Radius.circular(48),
             ),
           ),
           child: const LoginText(),
       ),
     ),
 ],
),

5.png

输入框

 输入框需要做一些设置,我们想要的效果是有边框的输入框,那么就要设置输入框的边框,enabledBorder和focusedBorder分别对应输入框启用状态和获得焦点状态下的边框样式,设置borderRadius改变边框弧度,设置borderSide改变边框颜色,设置width改变边框粗细。通过labelText设置输入框提示字符,设置filled和fillColor改变输入框背景颜色。

TextField(  
 decoration: InputDecoration(//边框样式
   //启用状态下边框样式
   enabledBorder: OutlineInputBorder(
     //设置边框弧度
     /*borderRadius: BorderRadius.all(
        Radius.circular(10),
     ),*/
     borderSide: BorderSide(
       //设置边框的颜色
       color: Colors.grey.withAlpha(50),
       //设置边框的粗细
       //width: 2.0,
     ),
   ),
   //获得焦点状态下边框样式
   focusedBorder: OutlineInputBorder(
     borderSide: BorderSide(
       color: Colors.grey.withAlpha(50),
     ),
   ),
   labelText: "Server IP",
   labelStyle: TextStyle(
     color: Colors.grey.withAlpha(150),
   ),
   filled: true, //输入框背景颜色
   fillColor: Colors.white.withAlpha(180), //输入框背景颜色
 ),
),

登录按钮

 接下来是登录按钮的实现,我们实现一个粉色渐变的登录按钮,渐变效果由DecoratedBox来实现,渐变颜色需要设置LinearGradient吗,起始颜色为 Color.fromARGB(255, 238, 156, 167),结束颜色为 Color.fromARGB(255, 255, 221, 225),按钮就很简单,直接使用文字按钮TextButton就可以了。

Container(
  padding: const EdgeInsets.fromLTRB(0, 10, 0, 20),
  width: 300,
  child: DecoratedBox(
    //渐变色背景
    decoration: BoxDecoration(
      borderRadius: BorderRadius.circular(14), //圆角
      gradient: const LinearGradient(
        colors: [
          Color.fromARGB(255, 238, 156, 167),
          Color.fromARGB(255, 255, 221, 225),
        ],
      ),
    ),
    child: TextButton(
      child: const Text(
        style: TextStyle(
          color: Colors.white,
          fontSize: 20,
        ),
        "start",
      ),
      onPressed: () {},
    ),
  ),
),

最终效果图

1.gif


网站公告

今日签到

点亮在社区的每一天
去签到