Flutter GectureDetector onTap仅适用于文本子项

问题描述 投票:0回答:1

我尝试创建一个应用程序,当用户在屏幕上的任意位置点击时,背景颜色会更改为随机颜色,但是只有在我点击文本时,OnTap功能才起作用。请帮助我如何解决它。

这是我的代码:

import 'package:flutter/material.dart';
import 'dart:math';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MainVidget();
  }
}

class MainVidget extends StatefulWidget {
  @override
  MainVidgetState createState() => MainVidgetState();
}

class MainVidgetState extends State<MainVidget> {
  Color mainColor = Colors.white;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Welcome to Flutter',
        home: Scaffold(
          backgroundColor: mainColor,
          appBar: AppBar(
            title: Text('Tap anywhere'),
          ),
          body: GestureDetector(
            onTap: () {
              setState(() {
                mainColor = Color.fromRGBO(Random().nextInt(254) + 1,
                    Random().nextInt(254) + 1, Random().nextInt(254) + 1, 1);
              });
            },
            child: Center(
              child: Text('Hey there', style: TextStyle(fontSize: 32.0)),
            ),
          ),
        ));
  }
}
flutter flutter-layout gesturedetector
1个回答
0
投票

问题是您的手势检测器无法扩展为检测所有屏幕上的触摸。只考虑您居中的小部件。为此,您必须使用一些可扩展为使用所有可用空间的小部件。尝试这样的事情:

GestureDetector(
    onTap: () {
      setState(() {
        mainColor = Color.fromRGBO(Random().nextInt(254) + 1,
            Random().nextInt(254) + 1, Random().nextInt(254) + 1, 1);
      });
    },
    child: Column(
      children: <Widget>[
        Center(
          child: Text('Hey there', style: TextStyle(fontSize: 32.0)),
        ),
      ],
    ));
© www.soinside.com 2019 - 2024. All rights reserved.