Files
plan_flutter/lib/page/system/login/widget/widget.dart
zhutao 0231dcfe1a 1
2025-09-04 17:57:35 +08:00

170 lines
3.8 KiB
Dart

import 'package:flutter/material.dart';
///登陆Box
class LogoBox extends StatelessWidget {
const LogoBox({super.key});
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(bottom: 40),
child: Column(
children: [
ClipRRect(
borderRadius: BorderRadius.circular(5),
child: Image.asset(
"assets/image/logo.png",
width: 43,
),
),
Text(
"PlanCura",
style: Theme.of(context).textTheme.titleSmall,
),
],
),
);
}
}
///头部文案
class PageHeader extends StatelessWidget {
const PageHeader({super.key});
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(bottom: 30),
child: Column(
children: [
Text(
"Create an account",
style: TextStyle(fontWeight: FontWeight.w700),
),
Text(
"Use your email to get started",
style: Theme.of(context).textTheme.bodySmall,
),
],
),
);
}
}
///输入框
class InputBox extends StatelessWidget {
final bool obscureText;
final String hintText;
final TextEditingController controller;
final Widget? suffix;
const InputBox({
super.key,
this.obscureText = false,
required this.hintText,
required this.controller,
this.suffix,
});
@override
Widget build(BuildContext context) {
//边框
var inputBorder = OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color: Theme.of(context).colorScheme.surfaceContainer,
),
);
return TextField(
controller: controller,
maxLength: 100,
obscureText: obscureText,
style: Theme.of(context).textTheme.bodyMedium,
decoration: InputDecoration(
hintText: hintText,
hintStyle: Theme.of(context).textTheme.labelMedium,
counterText: '',
border: inputBorder,
enabledBorder: inputBorder,
suffix: suffix,
suffixIconConstraints: BoxConstraints(
minWidth: 0,
minHeight: 0,
),
),
);
}
}
///分割线
class LoginDivider extends StatelessWidget {
const LoginDivider({super.key});
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(top: 20, bottom: 20),
child: Row(
spacing: 8,
children: [
Expanded(
child: Container(
height: 1,
color: Theme.of(context).colorScheme.surfaceContainer,
),
),
Text(
"or",
style: Theme.of(context).textTheme.labelMedium,
),
Expanded(
child: Container(
height: 1,
color: Theme.of(context).colorScheme.surfaceContainer,
),
),
],
),
);
}
}
///其他登陆按钮
class OtherButton extends StatelessWidget {
final Function() onTap;
final String title;
final String icon;
const OtherButton({
super.key,
required this.onTap,
required this.title,
required this.icon,
});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTap,
child: Container(
padding: EdgeInsets.all(15),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).colorScheme.surfaceContainer,
),
child: Row(
spacing: 10,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(icon, width: 20),
Text(
title,
style: Theme.of(context).textTheme.bodySmall,
),
],
),
),
);
}
}