Files
plan_flutter/lib/page/my/widget/profile_section.dart
zhutao 3df6e3d49e 1
2025-09-09 17:57:02 +08:00

125 lines
3.9 KiB
Dart

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<ProfileSection> createState() => _ProfileSectionState();
}
class _ProfileSectionState extends State<ProfileSection> {
//输入框
final TextEditingController _inputController = TextEditingController();
final List<String> _tips = [
"When your coach makes a plan for you,they'll check this info first.",
"The more details you toss in,the better your coach can tailor steps to match your totally unique situation.",
"You can also let your coach know here,like,Chocolate is a no-go for me 'cause I'm allergic",
];
//防抖
Debouncer debouncer = Debouncer(milliseconds: 2000);
@override
void initState() {
super.initState();
AppStore appStore = context.read<AppStore>();
_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("About You"),
),
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:
"I'm a busy office worker who relies on a rice cooker every day-could you skip the steps for cooking rice in a regular pot?",
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,
),
],
),
);
}
}