import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:news_getx/modules/widgets/button.dart'; import 'package:news_getx/modules/widgets/input.dart'; import 'package:news_getx/theme/app_colors.dart'; import 'package:news_getx/theme/app_shadows.dart'; import 'sign_in_controller.dart'; class SignInPage extends GetView { const SignInPage({Key? key}) : super(key: key); // logo Widget _buildLogo() { return Container( width: 110.w, margin: EdgeInsets.only(top: (40 + 44.0).h), child: Column( children: [ Container( width: 76.w, height: 76.w, decoration: BoxDecoration( color: AppColors.primaryBackground, boxShadow: [ AppShadows.primaryShadow, ], // 父容器的50% borderRadius: BorderRadius.circular((76 * 0.5).w), ), child: Image.asset( 'assets/images/logo.png', fit: BoxFit.none, ), ), Container( margin: EdgeInsets.only(top: 15.h), child: Text( 'SECTOR', style: TextStyle( color: AppColors.primaryText, fontFamily: "Montserrat", fontWeight: FontWeight.w600, fontSize: 24.sp, height: 1, ), textAlign: TextAlign.center, ), ), Text( 'news', style: TextStyle( color: AppColors.primaryText, fontFamily: "Avenir", fontWeight: FontWeight.w400, fontSize: 16.sp, height: 1, ), ), ], ), ); } // 登录表单 Widget _buildInputForm() { return Container( width: 295.w, margin: EdgeInsets.only(top: 49.h), child: Column( children: [ // email input InputTextEdit( controller: controller.emailController, keyboardType: TextInputType.emailAddress, hintText: "Email", marginTop: 0, ), // password input InputTextEdit( controller: controller.passwordController, keyboardType: TextInputType.visiblePassword, hintText: "Password", isPassword: true, ), // 注册、登录 横向布局 Container( height: 44.h, margin: EdgeInsets.only(top: 15.h), child: Row( children: [ // 注册 FlatButton( onPressed: controller.handleNavSignUp, title: "Sign up", gbColor: AppColors.thirdElement, ), Spacer(), // 登录 FlatButton( onPressed: controller.handleSignIn, gbColor: AppColors.primaryElement, title: "Sign in", ) ], ), ), // Fogot password Padding( padding: const EdgeInsets.only(top: 8.0), child: TextButton( onPressed: () {}, child: Text( "Fogot password?", textAlign: TextAlign.center, style: TextStyle( color: AppColors.secondaryElementText, fontFamily: "Avenir", fontWeight: FontWeight.w400, fontSize: 16.sp, height: 1, // 设置下行高,否则字体下沉 ), ), ), ) ], ), ); } // 第三方登录 Widget _buildThirdPartyLogin() { return Container( width: 295.w, margin: EdgeInsets.only(top: 40.h), child: Column( children: [ Text( 'Or sign in with social networks', textAlign: TextAlign.center, style: TextStyle( color: AppColors.primaryText, fontFamily: "Avenir", fontWeight: FontWeight.w400, fontSize: 16.sp, ), ), Padding( padding: EdgeInsets.only(top: 20.h), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ IconBorderFlatButton( onPressed: () {}, iconFileName: "twitter", width: 80.w, ), IconBorderFlatButton( onPressed: () {}, iconFileName: "google", width: 80.w, ), IconBorderFlatButton( onPressed: () {}, iconFileName: "facebook", width: 80.w, ) ], ), ) ], ), ); } // 注册按钮 Widget _buildSignupButton() { return Container( margin: EdgeInsets.symmetric(vertical: 20.h), child: FlatButton( width: 295, height: 44, title: "Sign up", onPressed: controller.handleNavSignUp, gbColor: AppColors.secondaryElement, fontColor: AppColors.primaryText, fontWeight: FontWeight.w500, fontSize: 16.sp, ), ); } @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, body: Center( child: Column( children: [ _buildLogo(), _buildInputForm(), Spacer(), _buildThirdPartyLogin(), _buildSignupButton(), ], ), ), ); } }