如何在整个页面中听一下单击事件

我想在整个页面上单击的地方都收听事件

ananhehe 回答:如何在整个页面中听一下单击事件

您应该使用GestureDetector小部件包装MaterialApp小部件,以便可以听到各种点击。示例代码如下。

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onDoubleTap: () {
        print('DobleTap');
      },onTap: () {
        print('ontap');
      },child: MaterialApp(
        home: HomePage(),),);
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Test'),body: Container(
        child: Column(
          children: <Widget>[Text('Test')],);
  }
}
,

首先,您需要使用AbsorbPointer小部件包装屏幕。

AbsordPointer如文档所述,它是一个小部件,可禁用屏幕的所有列表器,因此,如果您具有listView或其他我们可以单击的小部件,则将被禁用。

在此之后,将AbsorbPointer与GestureDetector进行包装,并使用on Tap方法。

这是一个示例:

    import 'dart:typed_data';
    import 'dart:ui';

    import 'package:flutter/material.dart';

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

    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
             home: HomePage(),);
      }
    }

    class HomePage extends StatefulWidget {
      @override
        _HomePageState createState() => _HomePageState();
    }

    class _HomePageState extends State<HomePage> {
       bool clicked = false;
       @override
       Widget build(BuildContext context) {
          final screenWidth = MediaQuery.of(context).size.width;
    final screenHeight = MediaQuery.of(context).size.height;
    return Scaffold(
      body: GestureDetector(
        onTap: () {
          print('object');
        },child: AbsorbPointer(
          child: Container(
            height: 500,child: ListView.builder(
              itemCount: 10,itemBuilder: (_,index) => GestureDetector(
                onTap: () {
                  print('$index');
                },child: Container(
                  height: 100,margin: EdgeInsets.only(top: 10.0),color: index.isEven ? Colors.red : Colors.green,);
  }
}
本文链接:https://www.f2er.com/3129490.html

大家都在问