Skip to content

CheckedPopupMenuItem: mouse cursor updated only when hovering over edges and missing cursor customisation parameter #103472

@TahaTesser

Description

@TahaTesser

CheckedPopupMenuItem has a ListTile child without onTap, stacked on top of PopupMenuItem with edges exposed. As a result, the cursor only updates hovering edges. Also CheckedPopupMenuItem doesn't have a parameter to override the cursor.

minimal code sample
import 'package:flutter/material.dart';

enum Fruits { mango, apple, banana, straberry, all }

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key, this.dark = false, this.useMaterial3 = false});

  final bool dark;
  final bool useMaterial3;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Material App',
      themeMode: dark ? ThemeMode.dark : ThemeMode.light,
      theme: ThemeData(
        useMaterial3: useMaterial3,
        brightness: dark ? Brightness.dark : Brightness.light,
        colorSchemeSeed: const Color(0xff6750a4),
      ),
      darkTheme: ThemeData(
        useMaterial3: useMaterial3,
        brightness: dark ? Brightness.dark : Brightness.light,
        colorSchemeSeed: const Color(0xff6750a4),
      ),
      home: const PopupMenuButtonSample(),
    );
  }
}

class PopupMenuButtonSample extends StatelessWidget {
  const PopupMenuButtonSample({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text(' PopupMenuButton Sample'),
      ),
      body: Center(
        child: PopupMenuButton<Fruits>(
          onSelected: (Fruits result) {},
          onCanceled: () {},
          itemBuilder: (BuildContext context) => <PopupMenuEntry<Fruits>>[
            const PopupMenuItem<Fruits>(
              value: Fruits.mango,
              child: Text('Mango'),
            ),
            const PopupMenuItem<Fruits>(
              value: Fruits.apple,
              child: Text('Apple'),
            ),
            const PopupMenuItem<Fruits>(
              value: Fruits.banana,
              child: Text('Banana'),
            ),
            const PopupMenuItem<Fruits>(
              value: Fruits.straberry,
              enabled: false,
              child: Text('Strawberry'),
            ),
            const PopupMenuDivider(),
            const CheckedPopupMenuItem<Fruits>(
              value: Fruits.all,
              child: Text('All of the above'),
            ),
          ],
        ),
      ),
    );
  }
}
Screen.Recording.2022-05-11.at.10.09.45.mov

Solution

Ignore pointer on child ListTile and add a cursor parameter that passed as super

Metadata

Metadata

Assignees

Labels

a: mouseIssues related to using a mouse or mouse supportf: material designflutter/packages/flutter/material repository.frameworkflutter/packages/flutter repository. See also f: labels.r: fixedIssue is closed as already fixed in a newer version

Type

No type

Projects

Status

Done (PR merged)

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions