Я написал код ниже для украшения верхней и нижней теневых рамок, это означает, что будет два контейнера. Вы можете использовать это решение двумя способами:
Вложенные контейнеры, которые должны поместить ваше изображение в Контейнер (topShadow) => Контейнер (bottomShadow) => Изображение
Поместите ваши 2 контейнера и ваше изображение в стек, выровняйте контейнеры сверху и снизу и присвойте своим контейнерам фиксированную высоту, аналогичную области, отмеченной на фотографии. (Убедитесь, что контейнеры находятся ниже элемента изображения внутри стека, иначе тень будет покрыта изображением)
decoration: new BoxDecoration(
gradient: new LinearGradient(
end: const Alignment(0.0, -1),
begin: const Alignment(0.0, 0.6),
colors: <Color>[
const Color(0x8A000000),
Colors.black12.withOpacity(0.0)
],
),
),
decoration: new BoxDecoration(
gradient: new LinearGradient(
end: const Alignment(0.0, -1),
begin: const Alignment(0.0, 0.6),
colors: <Color>[
const Color(0x8A000000),
Colors.black12.withOpacity(0.0)
],
),
),
Рабочий код второго подхода (пункт 2):
Stack(
children: <Widget>[
//image code
Image(..),
//top grey shadow
Align(
alignment: Alignment.topCenter,
child: Container(
height: 50,
width: double.infinity,
decoration: new BoxDecoration(
gradient: new LinearGradient(
end: const Alignment(0.0, 0.4),
begin: const Alignment(0.0, -1),
colors: <Color>[
const Color(0x8A000000),
Colors.black12.withOpacity(0.0)
],
),
),
),
),
//bottom grey shadow
Align(
alignment: Alignment.bottomCenter,
child: Container(
height: 50,
width: double.infinity,
decoration: new BoxDecoration(
gradient: new LinearGradient(
end: const Alignment(0.0, -1),
begin: const Alignment(0.0, 0.4),
colors: <Color>[
const Color(0x8A000000),
Colors.black12.withOpacity(0.0)
],
),
),
),
),
],),