Я думаю, що додавання кольору в контейнер покриває ефект чорнила
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 class
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
.