首页 > 解决方案 > 有人告诉我,第 25 行代码包含使用随机颜色的 setState() 的问题。帮助确定问题

问题描述

原始任务听起来像:

应用程序应该: 在屏幕中间显示文本“Hey there”,点击屏幕任意位置后,背景颜色应更改为随机颜色。您还可以向应用程序添加任何其他功能 - 添加奖励积分 请不要使用任何外部库进行颜色生成

我的解决方案(GitHub):

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

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

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

class RandomBackgroundColorWidget extends StatefulWidget {
  @override
  _RandomBackgroundColorWidget createState() => _RandomBackgroundColorWidget();
}

class _RandomBackgroundColorWidget extends State<RandomBackgroundColorWidget> {
  int _colorIndex = 0xFF42A5F5;

  void _randomColorIndexGenerator() {
    final _rng = new Random();
    setState(() => {_colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000)});
  }

  @override
  Widget build(BuildContext context) {
    return Stack(children: [
      Material(
        color: Color(_colorIndex),
        child: Center(
          child: Text("Hey there"),
        ),
      ),
      GestureDetector(
        onTap: () => _randomColorIndexGenerator(),
      ),
    ]);
  }
}

在审查我的测试任务时,面试官说第 25 行代码包含一个问题

setState(() => {_colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000)});

他评论说:

“它的工作方式不是你想要的。”

帮助识别第 25 行代码中的问题。

标签: flutterdartrandomsetstate

解决方案


问题是语法错误。使用 setState() => 时,您不需要 {}

setState(() {_colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000)}); 

或者

setState(() => _colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000));

推荐阅读