Myślę, że dodanie koloru do pojemnika przesłania efekt tuszu
https://docs.flutter.io/flutter/material/InkWell/InkWell.html
Ten kod wydaje się działać
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,
),
),
po prostu kliknij środkowy kwadrat.
Edycja: znalazłem raport o błędzie. https://github.com/flutter/flutter/issues/3782
W rzeczywistości jest to zgodne z oczekiwaniami, chociaż powinniśmy zaktualizować dokumentację, aby była bardziej przejrzysta.
Chodzi o to, że specyfikacja materiału mówi, że plamy są w rzeczywistości atramentem na materiale. Więc kiedy się rozpryskujemy, dosłownie mamy widżet Material, który robi to splash. Jeśli masz coś na wierzchu Materiału, rozpryskujemy się pod tym i nie możesz tego zobaczyć.
Chciałem dodać widżet „MaterialImage”, który koncepcyjnie drukuje również swój obraz w materiale, tak aby plamy były nad obrazem. Moglibyśmy mieć MaterialDecoration, który robi coś podobnego do dekoracji. Albo możemy poprosić o dekorację samego Materiału. W tej chwili przybiera kolor, ale możemy to rozszerzyć na całą dekorację. Nie jest jednak jasne, czy posiadanie materiału z gradientem jest naprawdę zgodne ze specyfikacją materiału, więc nie jestem pewien, czy powinniśmy to zrobić.
Na krótką metę, jeśli potrzebujesz tylko obejścia tego problemu, możesz umieścić materiał na wierzchu pojemnika, z materiałem ustawionym na typ „przezroczystości”, a następnie dobrze włożyć atrament.
--hixie
Aktualizacja: Hixie połączyła w zeszłym roku nowe rozwiązanie Ink. Atrament zapewnia wygodny sposób na rozpryskiwanie się po obrazach.
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)),
),
)
),
),
),
)
Uwaga: nie testowałem nowego widżetu Ink. Skopiowałem kod z ink_paint_test.dart i dokumenty klasy 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
siebie i pominąćContainer
.