我正在尝试使用GestureDetector更改用户单击的元素的颜色:

new GestureDetector(
    onTap: (){
      // Change the color of the container beneath
    },
    child: new Container(
      width: 80.0,
      height: 80.0,
      margin: new EdgeInsets.all(10.0),
      color: Colors.orange,
    ),
  ),

问题是我不能在onTap中使用setState。否则我会创建一个颜色变量。有什么建议么?

最佳答案

您可以在setState()内使用 onTap 。实际上,在这种情况下这样做是正确的。如果您在调用setState()时遇到问题,请确保您的小部件是有状态的(请参阅interactivity tutorial)。

您可能还想查看 FlatButton InkWell ,以获取更多实质性的捕获触摸的方式。如果您确实想要 GestureDetector ,请阅读 HitTestBehavior 以确保您正确配置它。

这是一个示例,每次单击时都会更改为随机颜色。

dart - Flutter-更新GestureDetector Tap上的 View-LMLPHP

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
        title: 'Flutter Demo',
        home: new MyHome(),
    );
  }
}

class MyHome extends StatefulWidget {
  @override
  State createState() => new _MyHomeState();
}

class _MyHomeState extends State<MyHome> {

  final Random _random = new Random();
  Color _color = Colors.orange;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new GestureDetector(
          onTap: () {
            // Change the color of the container beneath
            setState(() {
              _color = new Color.fromRGBO(
                _random.nextInt(256),
                _random.nextInt(256),
                _random.nextInt(256),
                1.0
              );
            });
          },
          child: new Container(
            width: 80.0,
            height: 80.0,
            margin: new EdgeInsets.all(10.0),
            color: _color,
          ),
        ),
      ),
    );
  }
}

关于dart - Flutter-更新GestureDetector Tap上的 View ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44071609/

10-09 01:44