我是新手扑,下面是我的代码
import’package:flutter / material.dart’;
class Homepage扩展StatelessWidget { @override 小部件构建(BuildContext context){ // TODO:实施……
因为 column widget没有父级来获取它的大小,所以它 height 是无限的,一个好的解决方案将包装你的 column 在里面 Container 小部件大小与设备屏幕匹配:
column
height
Container
return Container( width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.height, child: Column( children: <Widget>[ Text("Select Your Choco!"), Expanded( child: Column( children: <Widget>[ ListView.builder( itemBuilder: _listBuilder, itemCount: productsMap.length, ) ], ) //child: Image.asset("assets/chocolates.jpg"), ) ], ) );
您不需要任何列,ListView已经是一个列表。只需删除两列,你应该没事:)
import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: Homepage(), ); } } class Homepage extends StatelessWidget { @override Widget build(BuildContext context) { // TODO: implement build return Scaffold( appBar: AppBar( title: Text("Choco Factory"), ), body: HomepageUI(), ); } } class HomepageUI extends StatefulWidget { @override State<StatefulWidget> createState() { // TODO: implement createState return _HomepageUIState(); } } class _HomepageUIState extends State<HomepageUI> { List<Map<String, String>> productsMap = <Map<String, String>>[ {"title": "Cappuccino", "imageUrl": "assets/cappuccino.jpg"}, {"title": "Chocolate Cake", "imageUrl": "assets/chocolate_cake.jpg"}, {"title": "Chocolates", "imageUrl": "assets/chocolates.jpg"}, {"title": "Hot Chocolate", "imageUrl": "assets/hot_chocolate.jpg"}, {"title": "Naougat", "imageUrl": "assets/naugat.jpg"}, {"title": "White Chocolate", "imageUrl": "assets/white_chocolate.jpg"} ]; @override Widget build(BuildContext context) { // TODO: implement build return Column( children: <Widget>[ Text("Select Your Choco!"), Expanded( child: ListView.builder( itemBuilder: _listBuilder, itemCount: productsMap.length, ) //child: Image.asset("assets/chocolates.jpg"), ) ], ); } Widget _listBuilder(BuildContext context, int index) { return Card( child: Column( children: <Widget>[ Text(productsMap[index]['title']), Container( child: Image.asset(productsMap[index]['imageUrl']) ) ], ), ); } }
编辑:实际上你需要第一列,如果你想为每个项添加列和更多信息,那么_listBuilder中的列也可以保留。只需删除ListView.builder上方的列即可
编辑:添加示例代码