Explorar el Código

[fit]限制名字个数,日期选择增加吸附效果,首页名字过长自动缩小

云天逵 hace 7 meses
padre
commit
17400d1cde

+ 3 - 0
lib/module/change/nickname/change_nickname_controller.dart

@@ -33,6 +33,9 @@ class ChangeNicknameController extends BaseController {
     if (nickname.value.isEmpty) {
       ToastUtil.show("请输入昵称");
       return;
+    }if (nickname.value.length > 5) {
+      ToastUtil.show("昵称最多5个字~");
+      return;
     }
     Get.back(result: nickname.value);
   }

+ 6 - 0
lib/module/intro/intro_controller.dart

@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:keyboard/base/base_controller.dart';
 import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:keyboard/data/repository/account_repository.dart';
+import 'package:keyboard/utils/toast_util.dart';
 import '../../data/consts/constants.dart';
 import '../../resource/assets.gen.dart';
 import '../../dialog/login/login_dialog.dart';
@@ -105,6 +107,10 @@ class IntroController extends BaseController {
 
   void clickLogin() {
     Timer(const Duration(milliseconds: 500), () {
+      if (AccountRepository.getInstance().isLogin.value) {
+        ToastUtil.show("已登录登录");
+        return;
+      }
       LoginDialog.show();
     });
   }

+ 25 - 19
lib/module/keyboard/keyboard_view.dart

@@ -1,3 +1,4 @@
+import 'package:auto_size_text/auto_size_text.dart';
 import 'package:cached_network_image/cached_network_image.dart';
 import 'package:flutter/cupertino.dart';
 import 'package:flutter/material.dart';
@@ -290,29 +291,34 @@ class KeyBoardView extends BaseView<KeyBoardController> {
               ),
               Container(
                 padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 4.w),
+                constraints: BoxConstraints(
+                  maxWidth: 76.w,
+                ),
                 decoration: BoxDecoration(
                   color: Colors.white,
                   borderRadius: BorderRadius.circular(22.r),
                 ),
-                child:
-                    isUser
-                        ? Text(
-                          controller.homeInfo?.name ??
-                              StringName.keyboardNoLogin,
-                          style: Styles.getTextStyleBlack204W400(14.sp),
-                        )
-                        : Text(
-                          controller.homeInfo?.targetName ??
-                              StringName.keyboardAdd,
-                          style:
-                              controller.homeInfo?.targetName != null
-                                  ? Styles.getTextStyleBlack204W400(14.sp)
-                                  : TextStyle(
-                                    color: const Color(0xFF8651FF),
-                                    fontSize: 14.sp,
-                                    fontWeight: FontWeight.w400,
-                                  ),
-                        ),
+                child: isUser
+                    ? AutoSizeText(
+                  controller.homeInfo?.name ?? StringName.keyboardNoLogin,
+                  style: Styles.getTextStyleBlack204W400(14.sp),
+                  maxLines: 1,
+                  minFontSize: 10,
+                  overflow: TextOverflow.clip,
+                )
+                    : AutoSizeText(
+                  controller.homeInfo?.targetName ?? StringName.keyboardAdd,
+                  style: controller.homeInfo?.targetName != null
+                      ? Styles.getTextStyleBlack204W400(14.sp)
+                      : TextStyle(
+                    color: const Color(0xFF8651FF),
+                    fontSize: 14.sp,
+                    fontWeight: FontWeight.w400,
+                  ),
+                  maxLines: 1,
+                  minFontSize: 10,
+                  overflow: TextOverflow.ellipsis,
+                ),
               ),
             ],
           ),

+ 2 - 0
lib/module/new_user/new_user_controller.dart

@@ -142,6 +142,8 @@ class NewUserController extends BaseController
         return currentBirthday == null ? "请选择生日" : null;
       case 3:
         if (nickname.trim().isEmpty) return "请输入昵称";
+        if (nickname.value.length > 5) return "昵称最多5个字";
+
         if (nickname.contains(' ')) return "昵称不能包含空格";
         return null;
       case 4:

+ 1 - 0
lib/module/new_user/step/birthday/step_birthday_logic.dart

@@ -24,6 +24,7 @@ mixin StepBirthdayLogic {
     constellation.value = AgeZodiacSignUtil.getZodiacSign(date);
     age.value = AgeZodiacSignUtil.calculateAge(date);
     _currentBirthday.value = date;
+    initialDate = date;
     print("星座:${constellation.value}");
     print("年龄:${age.value}");
     print("日期:${date}");

+ 4 - 0
lib/module/new_user/step/partner/step_partner_logic.dart

@@ -1,3 +1,4 @@
+import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:keyboard/utils/toast_util.dart';
 
@@ -21,6 +22,9 @@ mixin StepPartnerLogic {
 
   final partnerName = "".obs;
 
+  // 加这个controller是因为在防止在返回其他页面时,输入框的内容会被清空
+  TextEditingController partnerNameController = TextEditingController();
+
   final RxnInt _partnerGender = RxnInt(null);
 
   int? get partnerGender => _partnerGender.value;

+ 2 - 2
lib/module/new_user/step/partner/step_partner_view.dart

@@ -214,12 +214,12 @@ class StepPartnerView extends BaseView<NewUserController> {
                 color: Colors.black.withAlpha(204),
                 fontWeight: FontWeight.w500,
               ),
+              controller: controller.partnerNameController,
               maxLines: 1,
               textAlignVertical: TextAlignVertical.center,
-
               decoration: InputDecoration(
                 hintText: StringName.newUserNicknameTitle,
-                counterText: '',
+                counterText: "",
                 hintStyle: TextStyle(
                   fontSize: 14.sp,
                   color: Colors.black.withAlpha(77),

+ 1 - 1
lib/module/user_profile/user_profile_controller.dart

@@ -156,7 +156,7 @@ class UserProfileController extends BaseController {
   Future<void> _settingUseInfo() async {
     await Future.delayed(const Duration(milliseconds: 300));
     try {
-      accountRepository.setUserInfo(
+     await accountRepository.setUserInfo(
         name: _currentNickname.value,
         birthday:
         _currentBirthday.value,

+ 83 - 50
lib/widget/birthday_date_picker.dart

@@ -7,7 +7,6 @@ class BirthdayDatePicker extends StatefulWidget {
   final DateTime minimumDate;
   final DateTime maximumDate;
   final void Function(DateTime) onDateChanged;
-  // 中间背景色
   final Color backgroundColor;
 
   const BirthdayDatePicker({
@@ -28,12 +27,32 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
   late int selectedMonth;
   late int selectedDay;
 
+  // 吸附效果控制器
+  final List<FixedExtentScrollController> _controllers = [
+    FixedExtentScrollController(),
+    FixedExtentScrollController(),
+    FixedExtentScrollController(),
+  ];
+
   @override
   void initState() {
     super.initState();
     selectedYear = widget.initialDate.year;
     selectedMonth = widget.initialDate.month;
     selectedDay = widget.initialDate.day;
+
+    // 初始化控制器位置
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      _controllers[0].jumpToItem(selectedYear - widget.minimumDate.year);
+      _controllers[1].jumpToItem(selectedMonth - 1);
+      _controllers[2].jumpToItem(selectedDay - 1);
+    });
+  }
+
+  @override
+  void dispose() {
+    _controllers.forEach((controller) => controller.dispose());
+    super.dispose();
   }
 
   @override
@@ -43,14 +62,14 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
       child: Stack(
         children: [
           Positioned(
-            bottom: 57.h, // Position at the bottom
+            bottom: 57.h,
             left: 0,
             right: 0,
             top: 57.h,
             child: Container(
               height: 36.h,
               decoration: BoxDecoration(
-                color: widget.backgroundColor, // Background color
+                color: widget.backgroundColor,
                 borderRadius: BorderRadius.circular(14.r),
               ),
             ),
@@ -58,51 +77,66 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
           Row(
             mainAxisAlignment: MainAxisAlignment.center,
             children: [
-              _buildPickerBuilder(
-                count: widget.maximumDate.year - widget.minimumDate.year + 1,
-                initialIndex: selectedYear - widget.minimumDate.year,
-                itemBuilder: (index) => '${widget.minimumDate.year + index}年',
-                onSelectedItemChanged: (index) {
-                  setState(() {
-                    selectedYear = widget.minimumDate.year + index;
-                    _adjustMonthAndDay();
-                    _notify();
-                  });
-                },
-              ),
-              _buildPickerBuilder(
-                count: _getMaxMonth(),
-                initialIndex: selectedMonth - 1,
-                itemBuilder: (index) => '${index + 1}月',
-                onSelectedItemChanged: (index) {
-                  setState(() {
-                    selectedMonth = index + 1;
-                    _adjustDayForMonth();
-                    _notify();
-                  });
-                },
-              ),
-              _buildPickerBuilder(
-                count: _getMaxDay(),
-                initialIndex: selectedDay - 1,
-                itemBuilder: (index) => '${index + 1}日',
-                onSelectedItemChanged: (index) {
-                  setState(() {
-                    selectedDay = index + 1;
-                    _notify();
-                  });
-                },
-              ),
+              _buildYearPicker(),
+              _buildMonthPicker(),
+              _buildDayPicker(),
             ],
           ),
-
-          // Positioned Stack item (will be at the bottom of the Row)
         ],
       ),
     );
   }
 
+  Widget _buildYearPicker() {
+    final yearCount = widget.maximumDate.year - widget.minimumDate.year + 1;
+    return _buildPickerBuilder(
+      controller: _controllers[0],
+      count: yearCount,
+      initialIndex: selectedYear - widget.minimumDate.year,
+      itemBuilder: (index) => '${widget.minimumDate.year + index}年',
+      onSelectedItemChanged: (index) {
+        setState(() {
+          selectedYear = widget.minimumDate.year + index;
+          _adjustMonthAndDay();
+          _notify();
+        });
+      },
+    );
+  }
+
+  Widget _buildMonthPicker() {
+    return _buildPickerBuilder(
+      controller: _controllers[1],
+      count: _getMaxMonth(),
+      initialIndex: selectedMonth - 1,
+      itemBuilder: (index) => '${index + 1}月',
+      onSelectedItemChanged: (index) {
+        setState(() {
+          selectedMonth = index + 1;
+          _adjustDayForMonth();
+          _notify();
+        });
+      },
+    );
+  }
+
+  Widget _buildDayPicker() {
+    return _buildPickerBuilder(
+      controller: _controllers[2],
+      count: _getMaxDay(),
+      initialIndex: selectedDay - 1,
+      itemBuilder: (index) => '${index + 1}日',
+      onSelectedItemChanged: (index) {
+        setState(() {
+          selectedDay = index + 1;
+          _notify();
+        });
+      },
+    );
+  }
+
   Widget _buildPickerBuilder({
+    required FixedExtentScrollController controller,
     required int count,
     required int initialIndex,
     required String Function(int) itemBuilder,
@@ -110,23 +144,22 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
   }) {
     return Expanded(
       child: ListWheelScrollView.useDelegate(
-        controller: FixedExtentScrollController(initialItem: initialIndex),
+        controller: controller,
         itemExtent: 36.h,
         onSelectedItemChanged: onSelectedItemChanged,
-          overAndUnderCenterOpacity: 0.35,
+        physics: FixedExtentScrollPhysics(),
+        overAndUnderCenterOpacity: 0.35,
         childDelegate: ListWheelChildBuilderDelegate(
           builder: (context, index) {
-            // 判断选中项
-            bool isSelected = index == initialIndex;
+            final isSelected = controller.selectedItem == index;
             return Container(
               alignment: Alignment.center,
-              color: Colors.transparent,
               child: Text(
                 itemBuilder(index),
                 style: TextStyle(
                   fontSize: 16.sp,
-
                   color: isSelected ? Colors.black : Colors.black,
+                  fontWeight: isSelected ? FontWeight.bold : FontWeight.normal,
                 ),
               ),
             );
@@ -137,9 +170,9 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
     );
   }
 
+  // 自动调整月和日
   void _adjustMonthAndDay() {
-    if (selectedYear == widget.maximumDate.year &&
-        selectedMonth > widget.maximumDate.month) {
+    if (selectedYear == widget.maximumDate.year && selectedMonth > widget.maximumDate.month) {
       selectedMonth = widget.maximumDate.month;
     }
     _adjustDayForMonth();
@@ -160,8 +193,7 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
   }
 
   int _getMaxDay() {
-    if (selectedYear == widget.maximumDate.year &&
-        selectedMonth == widget.maximumDate.month) {
+    if (selectedYear == widget.maximumDate.year && selectedMonth == widget.maximumDate.month) {
       return widget.maximumDate.day;
     }
     return _getDaysInMonth(selectedYear, selectedMonth);
@@ -184,6 +216,7 @@ class _BirthdayDatePickerState extends State<BirthdayDatePicker> {
     }
   }
 
+  // 回调函数通知外部
   void _notify() {
     final selectedDate = DateTime(selectedYear, selectedMonth, selectedDay);
     widget.onDateChanged(selectedDate);

+ 3 - 0
pubspec.yaml

@@ -88,6 +88,9 @@ dependencies:
   # 解决PageView嵌套和缓存问题
   nested_scroll_views: ^0.0.12
 
+  #自动缩小文本
+  auto_size_text: ^3.0.0
+
   #QR
   qr_flutter: ^4.1.0