// Copyright 2014 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import 'package:flutter/material.dart'; /// Flutter code sample for custom list items. void main() => runApp(const CustomListItemApp()); class CustomListItemApp extends StatelessWidget { const CustomListItemApp({super.key}); @override Widget build(BuildContext context) { return const MaterialApp(home: CustomListItemExample()); } } class _ArticleDescription extends StatelessWidget { const _ArticleDescription({ required this.title, required this.subtitle, required this.author, required this.publishDate, required this.readDuration, }); final String title; final String subtitle; final String author; final String publishDate; final String readDuration; @override Widget build(BuildContext context) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, maxLines: 2, overflow: TextOverflow.ellipsis, style: const TextStyle(fontWeight: FontWeight.bold), ), const Padding(padding: EdgeInsets.only(bottom: 2.0)), Expanded( child: Text( subtitle, maxLines: 2, overflow: TextOverflow.ellipsis, style: const TextStyle(fontSize: 12.0, color: Colors.black54), ), ), Text( author, style: const TextStyle(fontSize: 12.0, color: Colors.black87), ), Text( '$publishDate - $readDuration', style: const TextStyle(fontSize: 12.0, color: Colors.black54), ), ], ); } } class CustomListItemTwo extends StatelessWidget { const CustomListItemTwo({ super.key, required this.thumbnail, required this.title, required this.subtitle, required this.author, required this.publishDate, required this.readDuration, }); final Widget thumbnail; final String title; final String subtitle; final String author; final String publishDate; final String readDuration; @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(vertical: 10.0), child: SizedBox( height: 100, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ AspectRatio(aspectRatio: 1.0, child: thumbnail), Expanded( child: Padding( padding: const EdgeInsets.fromLTRB(20.0, 0.0, 2.0, 0.0), child: _ArticleDescription( title: title, subtitle: subtitle, author: author, publishDate: publishDate, readDuration: readDuration, ), ), ), ], ), ), ); } } class CustomListItemExample extends StatelessWidget { const CustomListItemExample({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Custom List Item Sample')), body: ListView( padding: const EdgeInsets.all(10.0), children: [ CustomListItemTwo( thumbnail: Container( decoration: const BoxDecoration(color: Colors.pink), ), title: 'Flutter 1.0 Launch', subtitle: 'Flutter continues to improve and expand its horizons. ' 'This text should max out at two lines and clip', author: 'Dash', publishDate: 'Dec 28', readDuration: '5 mins', ), CustomListItemTwo( thumbnail: Container( decoration: const BoxDecoration(color: Colors.blue), ), title: 'Flutter 1.2 Release - Continual updates to the framework', subtitle: 'Flutter once again improves and makes updates.', author: 'Flutter', publishDate: 'Feb 26', readDuration: '12 mins', ), ], ), ); } }