Я пытаюсь построить сетку изображений с заданной шириной и высотой, оборачивая их внутри Containers
и используя fit: BoxFit.fill
, чтобы иметь возможность установить границу, если изображение выбрано (мне все равно, сохраняйте пропорции изображения, я хочу, чтобы у каждого контейнера была одинаковая общая ширина и высота).
Проблема в том, что я замечаю белый цвет sh, когда изображение перекрашивается после того, как на него постучали , Похоже, этого не происходит, когда изображений немного, но с 15+ изображениями это шумно.
Я попытался добавить gaplessPlayback: true
в виджет изображения, как я нашел здесь , но это не решило мою проблему.
Вот рисунок, который показывает мою проблему (я использовал 16 изображений, размер 1920x1080):
РЕДАКТИРОВАТЬ:
Я забыл указать, что это всего лишь пример, я использовал границу в коде, но в моем случае я также хочу добавить отступ к контейнеру, чтобы уменьшить изображение (как в android фотогалерее), это означает, что повернутое изображение должно перерисовываться каждый раз.
И это мой код:
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
// See https://github.com/flutter/flutter/wiki/Desktop-shells#target-platform-override
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(body: ImageGridView()),
);
}
}
class ImageGridView extends StatelessWidget {
List<File> _fileList = [];
ImageGridView(){
_fileList = [
File('C:/flutter/img/1.jpg'),
File('C:/flutter/img/3.jpg'),
File('C:/flutter/img/4.jpg'),
File('C:/flutter/img/5.jpg'),
File('C:/flutter/img/6.jpg'),
File('C:/flutter/img/7.jpg'),
File('C:/flutter/img/8.jpg'),
File('C:/flutter/img/9.jpg'),
File('C:/flutter/img/10.jpg'),
File('C:/flutter/img/11.jpg'),
File('C:/flutter/img/12.jpg'),
File('C:/flutter/img/13.jpg'),
File('C:/flutter/img/14.jpg'),
File('C:/flutter/img/15.jpg'),
File('C:/flutter/img/16.jpg'),
];
}
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Wrap(
children: _fileList.map((file) {
return WindowsAsset(file);
}).toList(),
),
);
}
}
class WindowsAsset extends StatefulWidget {
final File _file;
WindowsAsset(this._file);
@override
State<StatefulWidget> createState() => WindowsAssetState();
}
class WindowsAssetState extends State<WindowsAsset> {
bool selected = false;
@override
Widget build(BuildContext context) {
final width = MediaQuery.of(context).size.width / 2;
final height = width * 1080 / 1920;
return Container(
width: width,
height: height,
child: Container(
child: Container(
constraints: BoxConstraints.expand(),
decoration: !selected
? null
: BoxDecoration(
border: Border.all(
color: Color.fromRGBO(153, 209, 255, 1),
width: 4
),
),
child: Container(
child: GestureDetector(
child: Image.file(
widget._file,
filterQuality: FilterQuality.medium,
fit: BoxFit.fill,
gaplessPlayback: true,
),
onTap: () => setState(() {
selected = !selected;
}),
),
),
),
),
);
}
}
Как я могу решить Это? Спасибо!