import 'package:flutter/material.dart'; import 'package:plan/api/dto/login_dto.dart'; import 'package:plan/api/endpoints/user_api.dart'; import 'package:plan/providers/app_store.dart'; import 'package:plan/utils/debouncer.dart'; import 'package:provider/provider.dart'; import 'package:remixicon/remixicon.dart'; class ProfileSection extends StatefulWidget { final Function(UserInfo) onUpdate; const ProfileSection({super.key, required this.onUpdate}); @override State createState() => _ProfileSectionState(); } class _ProfileSectionState extends State { //输入框 final TextEditingController _inputController = TextEditingController(); final List _tips = [ "教练每次为你制定计划时,都会首先参考这里的信息", "你分享的背景信息越详细,教练就越能为你量身定制,符合你独特情况的行动步骤", "你可以在这里为教练提需求,比如“我不吃香菜”", ]; //防抖 Debouncer debouncer = Debouncer(milliseconds: 2000); @override void initState() { super.initState(); AppStore appStore = context.read(); _inputController.text = appStore.userInfo?.description ?? ""; } @override void dispose() { super.dispose(); debouncer.dispose(); } ///确定编辑画像 void _onTextChanged(String value) { debouncer.run(() async { var res = await updateUserInfoApi(description: value); widget.onUpdate(res); }); } @override Widget build(BuildContext context) { return Container( margin: EdgeInsets.only(top: 30), padding: EdgeInsets.only(top: 30), decoration: BoxDecoration( border: Border( top: BorderSide( width: 1, color: Theme.of(context).colorScheme.surfaceContainer, ), ), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( margin: EdgeInsets.only(bottom: 20), child: Text("你的画像"), ), Container( margin: EdgeInsets.only(bottom: 20), child: TextField( maxLines: 5, maxLength: 500, controller: _inputController, style: TextStyle(fontSize: 14, letterSpacing: 1), onChanged: _onTextChanged, decoration: InputDecoration( hintText: "我是19岁女生,刷碗时用洗碗机,请不要按手洗拆解步骤..", enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.grey), // 普通状态 borderRadius: BorderRadius.circular(8), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.grey), // 获取焦点状态 borderRadius: BorderRadius.circular(8), ), ), ), ), ListView.separated( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemBuilder: (_, index) { return Row( spacing: 10, children: [ Icon( RemixIcons.lightbulb_flash_fill, color: Color(0xfff2a529), size: 18, ), Expanded( child: Text( _tips[index], style: Theme.of(context).textTheme.labelMedium, ), ), ], ); }, separatorBuilder: (_, __) { return SizedBox(height: 10); }, itemCount: _tips.length, ), ], ), ); } }