我已经创建了一个颤动的应用程序并使用图像选择器将图像作为gridView获取到中心,并使用网格图块循环图像数组。是否可以在点击时触发gridTile? 下面是main.dart中的代码,用于将图像添加到数组和网格视图中。
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
File _imageFile;
List<File> _imageList=[];
getImage() async {
var _fileName = await ImagePicker.pickImage();
setState(() {
_imageFile = _fileName;
_imageList.add(_imageFile);
});
}
removeImage(int index){
setState((){
_imageList.removeAt(index);
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: new Center(
child:_imageList.length == 0
? new Text('No image selected.')
:new GridView.count(
crossAxisCount: 4,
childAspectRatio: 1.0,
padding: const EdgeInsets.all(4.0),
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
children: _imageList.map((File file) {
return new GridTile(
child: new Image.file(file, fit: BoxFit.cover,));
}).toList()),
),
floatingActionButton: new FloatingActionButton(
onPressed:getImage,
tooltip: 'Pick Image',
child: new Icon(Icons.add_a_photo),
),
);
}
}
答案 0 :(得分:10)
您可以将GridTile
打包在InkResponse
或GestureDetector
中,然后传递要在点击时调用的函数
示例:
// Function to be called on click
void _onTileClicked(int index){
debugPrint("You tapped on item $index");
}
// Get grid tiles
List<Widget> _getTiles(List<File> iconList) {
final List<Widget> tiles = <Widget>[];
for (int i = 0; i < iconList.length; i++) {
tiles.add(new GridTile(
child: new InkResponse(
enableFeedback: true,
child: new Image.file(iconList[i], fit: BoxFit.cover,),
onTap: () => _onTileClicked(i),
)));
}
return tiles;
}
// GridView
new GridView.count(
crossAxisCount: 4,
childAspectRatio: 1.0,
padding: const EdgeInsets.all(4.0),
mainAxisSpacing: 4.0,
crossAxisSpacing: 4.0,
children: _getTiles(_imageList),
)
希望有所帮助!
答案 1 :(得分:5)
您还可以使用网格生成器
child: new GridView.builder(
itemCount: 20,
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2),
itemBuilder: (BuildContext context, int index) {
return new Card(
child: new InkResponse(
child: Image.asset('assets/whats-best-for-your-app-objective-cswift.jpg'),
onTap: (){
print(index);
},
),
);
}),