MIF_E31222656/lib/widgets/legal_content_dialog.dart

151 lines
4.9 KiB
Dart

import 'package:flutter/material.dart';
class LegalContentDialog extends StatelessWidget {
final String title;
final List<Widget> contentWidgets;
const LegalContentDialog({
super.key,
required this.title,
required this.contentWidgets,
});
@override
Widget build(BuildContext context) {
return AlertDialog(
backgroundColor: Theme.of(context).scaffoldBackgroundColor, // Adjusted for better theme consistency
surfaceTintColor: Colors.transparent, // Remove tint if not desired
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.0), // Slightly larger radius
),
titlePadding: const EdgeInsets.fromLTRB(24.0, 24.0, 24.0, 12.0), // Adjusted bottom padding
contentPadding: const EdgeInsets.fromLTRB(0, 0, 0, 16.0), // Adjusted to remove default content padding for ListView
title: Text(
title,
style: Theme.of(context).textTheme.headlineSmall?.copyWith( // Using headlineSmall for a more prominent title
fontWeight: FontWeight.bold,
color: Theme.of(context).colorScheme.primary,
),
),
content: Container(
width: double.maxFinite,
constraints: BoxConstraints(maxHeight: MediaQuery.of(context).size.height * 0.6), // Max height for scrollability
child: ListView(
padding: const EdgeInsets.symmetric(horizontal: 24.0), // Padding for ListView items
shrinkWrap: true,
children: contentWidgets,
),
),
actionsAlignment: MainAxisAlignment.center, // Center the action button
actionsPadding: const EdgeInsets.only(bottom: 16.0, top: 8.0),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
style: TextButton.styleFrom(
backgroundColor: Theme.of(context).colorScheme.primary,
foregroundColor: Theme.of(context).colorScheme.onPrimary,
padding: const EdgeInsets.symmetric(horizontal: 32.0, vertical: 12.0),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
),
child: const Text('Tutup', style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16)),
),
],
);
}
}
// Helper widget for section titles
class SectionTitle extends StatelessWidget {
final String text;
const SectionTitle(this.text, {super.key});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(top: 20.0, bottom: 10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
text,
style: Theme.of(context).textTheme.titleMedium?.copyWith(
fontWeight: FontWeight.w600, //semibold
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
),
const SizedBox(height: 6.0),
Divider(
height: 1,
thickness: 0.5,
color: Theme.of(context).dividerColor.withOpacity(0.6),
),
],
),
);
}
}
// Helper widget for paragraph text
class ParagraphText extends StatelessWidget {
final String text;
final TextAlign textAlign;
const ParagraphText(this.text, {super.key, this.textAlign = TextAlign.start});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.only(bottom: 10.0),
child: Text(
text,
textAlign: textAlign,
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
height: 1.6, // Increased line spacing for readability
color: Theme.of(context).colorScheme.onSurface.withOpacity(0.85), // Slightly more contrast
fontSize: 15,
),
),
);
}
}
// Helper widget for list items
class ListItem extends StatelessWidget {
final String text;
const ListItem(this.text, {super.key});
@override
Widget build(BuildContext context) {
final bodyMediumStyle = Theme.of(context).textTheme.bodyMedium;
final bulletColor = Theme.of(context).colorScheme.primary;
final textColor = Theme.of(context).colorScheme.onSurface.withOpacity(0.85);
return Padding(
padding: const EdgeInsets.only(left: 4.0, bottom: 8.0, right: 4.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.only(top: 2.0, right: 8.0), // Adjust padding for alignment
child: Icon(
Icons.circle, // Using a small circle icon as a bullet
size: 8,
color: bulletColor,
),
),
Expanded(
child: Text(
text,
style: bodyMediumStyle?.copyWith(
height: 1.6,
color: textColor,
fontSize: 15,
),
),
),
],
),
);
}
}