Products
Products we've built and shipped for other builders — used by real developers, not demoware.
- The Secure Flutter Handbook — 11 practical chapters + a toolbox checklist
- Dartform — visualise your Serverpod backend on a canvas
- Tools we use ourselves
import 'package:flutter/material.dart';
class MobileArchitecture extends StatelessWidget {
const MobileArchitecture({super.key});
final String pattern = 'clean_architecture';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Mobterest')),
body: SafeArea(
child: ListView.builder(
itemCount: products.length,
itemBuilder: (context, index) {
final product = products[index];
return ProductCard(
title: product.title,
onTap: () => context.push('/products/${product.id}'),
);
},
),
),
);
}
}
class ProductCard extends StatelessWidget {
const ProductCard({
super.key,
required this.title,
required this.onTap,
});
final String title;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return Card(
child: InkWell(
onTap: onTap,
child: Padding(
padding: const EdgeInsets.all(16),
child: Text(
title,
style: Theme.of(context).textTheme.titleMedium,
),
),
),
);
}
}
import 'package:flutter/material.dart';
class MobileArchitecture extends StatelessWidget {
const MobileArchitecture({super.key});
final String pattern = 'clean_architecture';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Mobterest')),
body: SafeArea(
child: ListView.builder(
itemCount: products.length,
itemBuilder: (context, index) {
final product = products[index];
return ProductCard(
title: product.title,
onTap: () => context.push('/products/${product.id}'),
);
},
),
),
);
}
}
class ProductCard extends StatelessWidget {
const ProductCard({
super.key,
required this.title,
required this.onTap,
});
final String title;
final VoidCallback onTap;
@override
Widget build(BuildContext context) {
return Card(
child: InkWell(
onTap: onTap,
child: Padding(
padding: const EdgeInsets.all(16),
child: Text(
title,
style: Theme.of(context).textTheme.titleMedium,
),
),
),
);
}
}const products = {
name: "Secure Flutter Handbook",
stack: [Flutter, Dart],
status: "shipped",
};