apptomate_custom_wrap 0.0.1
apptomate_custom_wrap: ^0.0.1 copied to clipboard
An enhanced version of Flutter's Wrap widget with additional layout control and debugging capabilities.
example/lib/main.dart
import 'package:apptomate_custom_wrap/apptomate_custom_wrap.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const CustomWrapWidget(),
);
}
}
/// Demo widget showcasing the [CustomWrap] capabilities.
class CustomWrapWidget extends StatelessWidget {
const CustomWrapWidget({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Custom Wrap'),
centerTitle: true,
),
body: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_buildDemoSection(
title: 'Basic Wrap',
child: CustomWrap(
spacing: 12,
runSpacing: 12,
alignment: WrapAlignment.center,
children: _generateChips(10),
),
),
const SizedBox(height: 24),
_buildDemoSection(
title: 'Vertical Wrap',
child: CustomWrap(
direction: Axis.vertical,
spacing: 8,
runSpacing: 8,
children: _generateChips(15),
),
),
const SizedBox(height: 24),
_buildDemoSection(
title: 'Max Lines (3)',
child: CustomWrap(
maxLines: 3,
spacing: 12,
runSpacing: 12,
children: _generateChips(20),
),
),
const SizedBox(height: 24),
_buildDemoSection(
title: 'Debug Mode',
child: CustomWrap(
debugPaint: true,
spacing: 12,
runSpacing: 12,
children: _generateChips(8),
),
),
],
),
),
),
);
}
Widget _buildDemoSection({required String title, required Widget child}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.blueGrey,
),
),
const SizedBox(height: 8),
child,
],
);
}
List<Widget> _generateChips(int count) {
final colors = [
Colors.blue[100]!,
Colors.green[100]!,
Colors.orange[100]!,
Colors.purple[100]!,
Colors.red[100]!,
Colors.teal[100]!,
];
return List.generate(
count,
(index) => Chip(
label: Text('Item ${index + 1}'),
backgroundColor: colors[index % colors.length],
side: BorderSide.none,
elevation: 1,
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
),
);
}
}