// 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'; class AdaptedListItem extends StatelessWidget { const AdaptedListItem({ super.key, required this.name }); final String name; @override Widget build(BuildContext context) { return Row( children: <Widget>[ Container( width: 32.0, height: 32.0, margin: const EdgeInsets.all(8.0), color: Colors.lightBlueAccent.shade100, ), Text(name), ], ); } } class AdaptedGridItem extends StatelessWidget { const AdaptedGridItem({ super.key, required this.name }); final String name; @override Widget build(BuildContext context) { return Card( child: Column( children: <Widget>[ Expanded( child: Container( color: Colors.lightBlueAccent.shade100, ), ), Container( margin: const EdgeInsets.only(left: 8.0), child: Row( children: <Widget>[ Expanded( child: Text(name), ), const IconButton( icon: Icon(Icons.more_vert), onPressed: null, ), ], ), ), ], ), ); } } const double _kListItemExtent = 50.0; const double _kMaxTileWidth = 150.0; const double _kGridViewBreakpoint = 450.0; class AdaptiveContainer extends StatelessWidget { const AdaptiveContainer({ super.key, required this.names }); final List<String> names; @override Widget build(BuildContext context) { if (MediaQuery.of(context).size.width < _kGridViewBreakpoint) { return ListView( itemExtent: _kListItemExtent, children: names.map<Widget>((String name) => AdaptedListItem(name: name)).toList(), ); } else { return GridView.extent( maxCrossAxisExtent: _kMaxTileWidth, children: names.map<Widget>((String name) => AdaptedGridItem(name: name)).toList(), ); } } } List<String> _initNames() => List<String>.generate(30, (int i) => 'Item $i'); final List<String> _kNames = _initNames(); void main() { runApp(MaterialApp( title: 'Media Query Example', home: Scaffold( appBar: AppBar( title: const Text('Media Query Example'), ), body: Material(child: AdaptiveContainer(names: _kNames)), ), )); }