Saltar al contenido

Flutter-Web: desplazamiento del mouse -> Cambiar cursor a puntero

Solución:

Tuve dificultades para encontrar documentación sobre el soporte ahora integrado. Esto es lo que me ayudó: https://github.com/flutter/flutter/issues/58260

Y esto funcionó para mí, sin cambiar index.html, etc.

MouseRegion(
  cursor: SystemMouseCursors.click,
    child: GestureDetector(
      child: Icon(
        Icons.add_comment,
        size: 20,
        ),
      onTap: () {},
    ),
  ),

Consulte también la documentación oficial: https://api.flutter.dev/flutter/rendering/MouseCursor-class.html

Widget build(BuildContext context) {
  return Center(
    child: MouseRegion(
      cursor: SystemMouseCursors.text,
      child: Container(
        width: 200,
        height: 100,
        decoration: BoxDecoration(
          color: Colors.blue,
          border: Border.all(color: Colors.yellow),
        ),
      ),
    ),
  );
}

Y aquí https://api.flutter.dev/flutter/material/MaterialStateMouseCursor-class.html otro ejemplo maravilloso de los documentos oficiales que “… define un cursor de mouse que se resuelve en SystemMouseCursors.forbidden cuando su widget está deshabilitado. “

Empezando con dev versión de compilación del canal 1.19.0–3.0.pre hay soporte incorporado para el cursor del puntero. Se usa el mismo método que a continuación con la diferencia que se aplica al elemento contenedor de la aplicación Flutter flt-glass-pane. Usar el método de abajo simplemente duplicará el comportamiento.

Para anular el pointer cursor, puede utilizar el método de abajo pero aplicado en el flt-glass-pane elemento.

Una solución alternativa para esto es la siguiente:

  1. Tienes que establecer un identificación (por ejemplo contenedor de aplicaciones en todo cuerpo de la aplicación index.html plantilla).

Así es como tu index.html se vera como:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>My awesome app</title>
</head>
<body id="app-container">
  <script src="https://foroayuda.es/main.dart.js" type="application/javascript"></script>
</body>
</html>
  1. A continuación, debe crear una clase de dardos de envoltura. lo llamé hand_cursor.dart:
import 'package:flutter_web/gestures.dart';
import 'package:flutter_web/widgets.dart';
import 'package:universal_html/html.dart' as html;
// see https://pub.dev/packages/universal_html

class HandCursor extends MouseRegion {

  // get a reference to the body element that we previously altered 
  static final appContainer = html.window.document.getElementById('app-container');

  HandCursor({Widget child}) : super(
    onHover: (PointerHoverEvent evt) {
      appContainer.style.cursor="pointer";
      // you can use any of these: 
      // 'help', 'wait', 'move', 'crosshair', 'text' or 'pointer'
      // more options/details here: http://www.javascripter.net/faq/stylesc.htm
    },
    onExit: (PointerExitEvent evt) {
      // set cursor's style 'default' to return it to the original state
      appContainer.style.cursor="default";
    },
    child: child
  );

}
  1. Después de eso, donde quiera que se muestre el cursor de mano, debe envolver su elemento en este contenedor de HandCursor. Ver la clase awesome_button.dart bramido:
import 'package:awesome_app/widgets/containers/hand_cursor.dart';
import 'package:flutter_web/material.dart';
import 'package:flutter_web/widgets.dart';

class AwesomeButton extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        HandCursor(
          child: IconButton(
            onPressed: () {
              // do some magic
            },
            icon: Icon(Icons.star)
          ),
        )
      ],
    );
  }

}

Puede encontrar una breve explicación aquí.

Una actualización más versátil, que funciona en los nuevos proyectos web creados con el Maestro canal de Flutter, se puede encontrar aquí.

Espero que ayude.

El método anterior está obsoleto. Aquí está el código actualizado

import 'package:flutter/gestures.dart';
import 'package:flutter/widgets.dart';
import 'package:universal_html/prefer_sdk/html.dart' as html;

class HandCursor extends MouseRegion {
  static final appContainer = html.window.document.getElementById('app-container');
  HandCursor({Widget child})
      : super(
          onHover: (PointerHoverEvent evt) {
            appContainer.style.cursor="pointer";
          },
          onExit: (PointerExitEvent evt) {
            appContainer.style.cursor="default";
          },
          child: child,
        );
}

Y en su archivo pubspec.yaml, agregue universal_html como paquete como dependencia. La versión puede cambiar.

dependencies:
  flutter:
    sdk: flutter
  universal_html: ^1.1.4

Aún desea tener una identificación de contenedor de aplicaciones adjunta al cuerpo de su html. Aquí está mi archivo html.

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Your App Title</title>
</head>
<body id="app-container">
  <script src="https://foroayuda.es/main.dart.js" type="application/javascript"></script>
</body>
</html>

Quiere poner el código del widget HandCursor en su propio archivo. Puedes llamarlo hand_cursor.dart. Y para usarlo en el widget en el que desea que aparezca la mano, impórtelo al archivo en el que está trabajando y envuelva el widget que desea en el widget HandCursor.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *