Я думаю, что добавление цвета к контейнеру перекрывает эффект чернил
https://docs.flutter.io/flutter/material/InkWell/InkWell.html
Этот код вроде работает
body: new Center(
child: new Container(
child: new Material(
child: new InkWell(
onTap: (){print("tapped");},
child: new Container(
width: 100.0,
height: 100.0,
),
),
color: Colors.transparent,
),
color: Colors.orange,
),
),
просто щелкните средний квадрат.
Изменить: я нашел отчет об ошибке. https://github.com/flutter/flutter/issues/3782
На самом деле это соответствует ожиданиям, хотя нам следует обновить документацию, чтобы сделать ее более понятной.
Что происходит, так это то, что в спецификации материала говорится, что брызги на самом деле являются чернилами на материале. Итак, когда мы всплескиваем, мы буквально заставляем виджет материала делать всплеск. Если у вас что-то есть поверх Материала, мы плещемся под ним, и вы этого не видите.
Я хотел добавить виджет «MaterialImage», который концептуально также печатает свое изображение в материале, чтобы затем брызги были поверх изображения. У нас может быть MaterialDecoration, который делает что-то подобное для украшения. Или мы могли бы сделать так, чтобы сам Материал был украшением. Сейчас это требует цвета, но мы можем расширить это на все украшение. Неясно, действительно ли материал с градиентом совместим со спецификациями материала, поэтому я не уверен, стоит ли нам это делать.
В краткосрочной перспективе, если вам просто нужно обходное решение, вы можете поместить Материал поверх контейнера с материалом, настроенным на использование типа «прозрачность», а затем поместить чернила внутрь него.
--хикси
Обновление: в прошлом году Hixie объединила новое решение Ink. Чернила обеспечивают удобный способ заливки изображений.
testWidgets('Does the Ink widget render anything', (WidgetTester tester) async {
await tester.pumpWidget(
new Material(
child: new Center(
child: new Ink(
color: Colors.blue,
width: 200.0,
height: 200.0,
child: new InkWell(
splashColor: Colors.green,
onTap: () { },
),
),
),
),
);
Material(
color: Colors.grey[800],
child: Center(
child: Ink.image(
image: AssetImage('cat.jpeg'),
fit: BoxFit.cover,
width: 300.0,
height: 200.0,
child: InkWell(
onTap: () { },
child: Align(
alignment: Alignment.topLeft,
child: Padding(
padding: const EdgeInsets.all(10.0),
child: Text('KITTEN', style: TextStyle(fontWeight: FontWeight.w900, color: Colors.white)),
),
)
),
),
),
)
Обратите внимание: я не тестировал новый виджет Ink. Я скопировал код из ink_paint_test.dart и документов класса Ink
https://github.com/Hixie/flutter/blob/1f6531984984f52328e66c0cd500a8d517964564/packages/flutter/test/material/ink_paint_test.dart
https://github.com/flutter/flutter/pull/13900
https://api.flutter.dev/flutter/material/Ink-class.html
Material
саму себя и оставитьContainer
.