flutter - 有人告诉我,第 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 行代码中的问题。
解决方案
问题是语法错误。使用 setState() => 时,您不需要 {}
setState(() {_colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000)});
或者
setState(() => _colorIndex = (_rng.nextInt(0xFFFFFF) + 0xFF000000));
推荐阅读
- reactjs - 使用带有 react redux 的钩子。减速机没有受到撞击。无状态
- sql - 索引与顺序搜索性能?
- c++ - 按列随机播放 2D 向量
- tsql - T-SQL,将字符串切割成35个字符的块而不切割单词
- c - Tk_PathName() 返回的字符串的生命周期是多少?
- python - 如何从外部函数中获取变量?
- python - 如何在数据框中添加带有 for 循环的列?
- list - 如何将 PySpark 列表分成不同的列?
- java - 得到一个奇怪的“只有创建视图层次结构的原始线程才能触及它的视图。” 我的 android 天气应用程序出错
- c# - 实体框架核心 - 代码优先 - 两个外键 - 一个表