Files
food_health_flutter/lib/page/profile/edit/widget/common.dart
2025-08-28 16:27:56 +08:00

101 lines
2.3 KiB
Dart

import 'dart:ffi';
import 'package:flutter/material.dart';
///步骤内容卡片
class StepContentCard extends StatelessWidget {
final List<Widget> children;
const StepContentCard({super.key, required this.children});
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(15),
decoration: BoxDecoration(
color: Theme.of(context).colorScheme.surface,
borderRadius: BorderRadius.circular(16),
boxShadow: [
BoxShadow(
color: Theme.of(context).colorScheme.shadow,
blurRadius: 7,
offset: const Offset(0, 4),
),
],
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: children,
),
);
}
}
///卡片标题
class CardTitle extends StatelessWidget {
final String title;
const CardTitle({super.key, required this.title});
@override
Widget build(BuildContext context) {
return Container(
margin: const EdgeInsets.only(bottom: 15),
child: Text(
title,
style: Theme.of(context).textTheme.titleSmall,
),
);
}
}
///配置列表
class OptionList extends StatelessWidget {
final List<String> options;
final List<String> selects;
final double widthFactor;
final Function(String) onTap;
const OptionList({
super.key,
required this.options,
required this.selects,
this.widthFactor = 0.5,
required this.onTap,
});
@override
Widget build(BuildContext context) {
return Wrap(
runSpacing: 20,
children: options.map((item) {
return FractionallySizedBox(
widthFactor: widthFactor,
child: InkWell(
onTap: () {
onTap(item);
},
child: Row(
spacing: 5,
mainAxisSize: MainAxisSize.min,
children: [
SizedBox(
width: 20,
height: 20,
child: Checkbox(
value: selects.contains(item),
onChanged: (_) {
onTap(item);
},
),
),
Text(item),
],
),
),
);
}).toList(),
);
}
}