【发布时间】:2021-06-06 07:18:39
【问题描述】:
我想创建一个水平的 ListView 或 GridView,图像的高度是固定的,但 图像的宽度应该是动态的。
以下是我正在尝试执行但无法获得预期输出的代码。我还添加了说明预期输出的设计截图
带列表视图
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
class ViewPager extends StatefulWidget {
createState() => _ViewPager();
}
class _ViewPager extends State<ViewPager> {
static final exercise_image1 = "https://drive.google.com/uc?export=download&id=1eDhXVJrNExRwi85pQGCOAwPYi7X-sA0l";
static final exercise_image2 = "https://drive.google.com/uc?export=download&id=1ifjpLw2ocBAIbEOIhsTtczf8dWuvexri";
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
children: [
_imagesList(images: [exercise_image1, exercise_image2]),
],
),
);
}
Widget _imagesList({List<String> images}) {
return Container(
width: double.maxFinite,
height: 150,
color: Colors.red,
child: ListView(
scrollDirection: Axis.horizontal,
children: [
_imageListItem(imagePath: images.first),
_imageListItem(imagePath: images.last),
],
),
);
}
Widget _imageListItem({@required String imagePath}) {
return CachedNetworkImage(
width: 200, // I want this to be according to the image width
imageUrl: imagePath,
placeholder: (context, url) => Container(
child: CircularProgressIndicator(),
),
imageBuilder: (context, imageProvider) => Container(
decoration: BoxDecoration(
image: DecorationImage(
image: imageProvider,
fit: BoxFit.fitHeight
),
),
),
);
}
}
带有网格视图
与网格视图相同的问题,我们设置了网格视图的高度,但无法为图像提供动态宽度
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
class ViewPager extends StatefulWidget {
createState() => _ViewPager();
}
class _ViewPager extends State<ViewPager> {
static final exercise_image1 = "https://drive.google.com/uc?export=download&id=1eDhXVJrNExRwi85pQGCOAwPYi7X-sA0l";
static final exercise_image2 = "https://drive.google.com/uc?export=download&id=1ifjpLw2ocBAIbEOIhsTtczf8dWuvexri";
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: Container(
height: 200,
child: _imagesList(images: [exercise_image1, exercise_image2]),
),
),
);
}
Widget _imagesList({List<String> images}) {
return GridView.count(
crossAxisCount: 1,
scrollDirection: Axis.horizontal,
children: [
_imageListItem(imagePath: images[0]),
_imageListItem(imagePath: images[1]),
],
);
}
Widget _imageListItem({@required String imagePath}) {
return CachedNetworkImage(
imageUrl: imagePath,
placeholder: (context, url) => Container(
child: CircularProgressIndicator(),
),
imageBuilder: (context, imageProvider) => Container(
decoration: BoxDecoration(
image: DecorationImage(
image: imageProvider,
fit: BoxFit.fitHeight
),
),
),
);
}
}
【问题讨论】:
-
我想你正在寻找flutter_staggered_grid_view。
-
我也试过了,但这也不是动态的(意味着不按图像宽度工作)。
-
您的情况是否需要
imageBuilder部分?您是否尝试在构建器下方添加更多小部件?似乎是破坏布局的部分,因为Container无法从自己的装饰中获得正确的图像大小
标签: flutter dart flutter-layout