Files
flisp_app/lib/widgets/common.dart
2025-11-10 16:39:51 +08:00

102 lines
2.5 KiB
Dart

import 'package:flutter/material.dart';
BoxDecoration buildBoxDecoration() {
return BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
border: Border.all(color: Colors.grey[200]!, width: 1),
);
}
Container buildBody({Widget? child}) {
return Container(
width: double.infinity,
color: Colors.grey[50],
padding: EdgeInsets.all(8),
child: child,
);
}
Container buildCard({Widget? child}) {
return Container(
decoration: buildBoxDecoration(),
padding: EdgeInsets.all(10),
child: child,
);
}
void buildModalBottom({
required BuildContext context,
required String title,
required Widget body,
}) {
showModalBottomSheet(
context: context,
isScrollControlled: true,
backgroundColor: Colors.transparent,
builder: (BuildContext context) {
return GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
color: Color.fromRGBO(0, 0, 0, 0.001),
child: GestureDetector(
onTap: () {},
child: DraggableScrollableSheet(
initialChildSize: 0.6,
minChildSize: 0.4,
maxChildSize: 0.9,
builder: (_, controller) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(24),
topRight: Radius.circular(24),
),
),
child: buildModalBottomBody(context, title, body),
);
},
),
),
),
);
},
);
}
Widget buildModalBottomBody(BuildContext context, String title, Widget body) {
return Column(
children: [
// 拖拽指示条
Container(
margin: EdgeInsets.only(top: 12, bottom: 4),
width: 48,
height: 4,
decoration: BoxDecoration(
color: Colors.grey[400],
borderRadius: BorderRadius.circular(2),
),
),
// 标题栏
Padding(
padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
title,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.w700),
),
],
),
),
Divider(height: 1, thickness: 1),
Expanded(child: Padding(padding: EdgeInsets.all(12), child: body)),
],
);
}