Issue 1:
It looks like the way to define InkWell is to put it at the top of the stack so that we can see the ripple effect and the taps are captured by the InkWell widget.

Im my case I have nested levels of containers each with their own InkWells. Now because of the way InkWells are designed, I can't have the inner container InkWell respond to taps because the Outer container InkWell is always on top of everything and prevents the tap being received by the Inner Container.

Does anyone have a solution to this problem ? Below is a piece of code demonstrating this issue

https://gist.github.com/manujbahl/d0ffaa1607f3b4ae8758bbae7378e469

import 'package:flutter/material.dart';

main() {
runApp(new TestSample());
}

class TestSample extends StatelessWidget{
@override
Widget build(BuildContext context) {
var widget = new MaterialApp(
home: new Scaffold(
body: new Center(
child: new OuterContainerStack(),
)
),
);
return widget;
}
}

class OuterContainerStack extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Stack(
children: <Widget>[
new OuterContainer(),
new Positioned.fill(
child: new Material(
color: Colors.transparent,
child:new InkWell(
onTap: () {
print("Outer Container");
}
)
)
)
],
);

}
}

class OuterContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
width: 300.0,
height: 300.0,
color: Colors.blueAccent,
child: new Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
new InnerContainerStack()
],
),
);

}
}

class InnerContainerStack extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Stack(
children: <Widget>[
new InnerContainer(),
new Positioned.fill(
child: new Material(
color: Colors.transparent,
child:new InkWell(
onTap: () {
print("Inner Container");
}
)
)
)
],
);

}
}

class InnerContainer extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new Container(
width: 200.0,
height: 200.0,
color: Colors.redAccent
);

}
}

Issue 2:
Internal: b/151678927

Pictured: two ink wells, one for the card, and one for the smaller rectangular widget at the center of the card. The smaller rectangular widget has been tapped. The current Flutter behavior is on pictured to the left, the ideal behavior is pictured to the right.

In Android, by default, ancestors do not respond/ripple when a descendant responds/ripples i.e. it follows the ideal behavior pictured to the right.

Reasoning: say the descendant is a button, it does not make sense for the ancestor to ripple as tapping the button will not activate the onTap for the ancestor.

Steps to Reproduce

Run the sample code below, click the center of the card and two ripples will be generated for both ink response widgets. The ideal situation can be replicated by setting the ancestor InkWell.onTap to null, as annotated in the code.

import "package:flutter/material.dart";

void main() {
runApp(new MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new Scaffold(
appBar: new AppBar(
title: const Text("Bug"),
),
body: new Card(
child: new Container(
height: 100.0,
child: new InkWell(
onTap: () => print("Set this onTap to null for ideal behavior"),
child: new Center(
child: new InkWell(
onTap: () {},
child: new Container(
width: 50.0,
height: 50.0,
),
),
),
),
),
),
),
);
}
}

Logs

Running flutter run and flutter analyze did not output anything.

Flutter Doctor

Paste the output of running flutter doctor here.

[✓] Flutter (on Mac OS X 10.13.2 17C88, locale en-NZ, channel unknown)
• Flutter at /Users/gnawf/flutter
• Framework revision 6a42ed3f55 (3 weeks ago), 2018-01-12 15:12:26 -0800
• Engine revision 05fe72d068
• Tools Dart version 2.0.0-dev.16.0
• Engine Dart version 2.0.0-edge.28757928b47b192efcec082c78258102beb03f78

[✓] Android toolchain - develop for Android devices (Android SDK 26.0.3)
• Android SDK at /usr/local/opt/android-sdk/
• Android NDK location not configured (optional; useful for native profiling support)
• Platform android-27, build-tools 26.0.3
• ANDROID_HOME = /usr/local/opt/android-sdk/
• Java binary at: /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/bin/java
• Java version Java(TM) SE Runtime Environment (build 1.8.0_144-b01)

[-] iOS toolchain - develop for iOS devices (Xcode 9.2)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 9.2, Build version 9C40b
✗ Your Mac needs to enabled for developer mode before using Xcode for the first time.
Run 'sudo DevToolsSecurity -enable' to enable developer mode.
✗ libimobiledevice and ideviceinstaller are not installed. To install, run:
brew install --HEAD libimobiledevice
brew install ideviceinstaller
✗ ios-deploy not installed. To install:
brew install ios-deploy
• CocoaPods version 1.3.1

[✗] Android Studio (not installed)
• Android Studio not found; download from https://developer.android.com/studio/index.html
(or visit https://flutter.io/setup/#android-setup for detailed instructions).

[✓] IntelliJ IDEA Community Edition (version 2017.3.3)
• Flutter plugin version 21.0.3
• Dart plugin version 173.4301.22

[✓] Connected devices
• iPhone 8 • 533B1ADF-56E5-4A63-9319-1F704E8845E0 • ios • iOS 11.2 (simulator)