Repository: flutter
Issue: Draggable should allow to specify PointerDeviceKinds capable of triggering a drag
Labels: c: new feature,framework,a: quality,c: proposal,a: desktop,P3,team-framework,triaged-framework

<!-- Thank you for using Flutter!

     If you are looking for support, please check out our documentation
     or consider asking a question on Stack Overflow:
      * https://flutter.dev/
      * https://api.flutter.dev/
      * https://stackoverflow.com/questions/tagged/flutter?sort=frequent

     If you have found a bug or if our documentation doesn't have an answer
     to what you're looking for, then fill out the template below. Please read
     our guide to filing a bug first: https://flutter.dev/docs/resources/bug-reports
-->

## Use case

<!--
     Please tell us the problem you are running into that led to you wanting
     a new feature.

     Is your feature request related to a problem? Please give a clear and
     concise description of what the problem is.

     Describe the alternative solutions you've considered. Is there a package
     on pub.dev/flutter that already solves this?
-->

Let's say you have a list of items and you want to enable a faster drag and drop interaction on each item. This is especially something that users on a desktop platform would expect.

<details>
  <summary>Code sample</summary>
  
  ```dart
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: ListView(
          children: [
            for (int i = 0; i < 20; i++)
              Draggable<int>(
                data: i,
                feedback: Card(
                  child: Text("Contact $i"),
                ),
                dragAnchor: DragAnchor.pointer,
                child: ListTile(
                  leading: const Icon(Icons.contact_mail_rounded),
                  title: Text("Contact $i"),
                ),
              ),
          ],
        ),
        floatingActionButton: DragTarget<int>(
          onWillAccept: (data) => true,
          builder: (context, candidateData, __) => (candidateData.isEmpty)
              ? FloatingActionButton(
                  onPressed: () {},
                  child: Icon(Icons.delete),
                )
              : FloatingActionButton.large(
                  onPressed: () {},
                  child: Icon(Icons.check),
                ),
        ),
      ),
    );
  }
}

  ```
</details>

On mouse-based devices this works fine, but on touch-based ones the regular list scroll competes with the drag gesture on each list item.

## Proposal

<!--
     Briefly but precisely describe what you would like Flutter to be able to do.

     Consider attaching images showing what you are imagining.

     Does this have to be provided by Flutter directly, or can it be provided
     by a package on pub.dev/flutter? If so, maybe consider implementing and
     publishing such a package rather than filing a bug.
-->

`Draggable` should allow to specify which `PointerDeviceKind`s should be allowed to trigger a drag gesture.
<details>
  <summary>A possible API example</summary>
  
  ```dart
    const Draggable<T extends Object>(
{Key? key,
required Widget child,
required Widget feedback,
T? data,
...
List<PointerDeviceKind> pointerKinds = PointerDeviceKind.values,
...
)
  ```
</details>

This should subsequently also be done for `LongPressDraggable`.