Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 关于弗利特的钥匙,有些地方我不太了解_Flutter_Flutter Widget - Fatal编程技术网

Flutter 关于弗利特的钥匙,有些地方我不太了解

Flutter 关于弗利特的钥匙,有些地方我不太了解,flutter,flutter-widget,Flutter,Flutter Widget,我在看了一段解释弗利特钥匙的视频后练习 此视频显示了使用特定颜色更改容器位置的示例。大约1分50秒 在视频中,statefulwidget表示,如果没有键,位置不会改变 但我自己编写了示例代码,并确认它在没有为有状态小部件提供密钥的情况下工作 我想我把示例代码写错了。下面是我写的代码 import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessW

我在看了一段解释弗利特钥匙的视频后练习

此视频显示了使用特定颜色更改容器位置的示例。大约1分50秒

在视频中,statefulwidget表示,如果没有键,位置不会改变

但我自己编写了示例代码,并确认它在没有为有状态小部件提供密钥的情况下工作

我想我把示例代码写错了。下面是我写的代码

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: KeyPractice(),
    );
  }
}

class StatefulColorfulTile extends StatefulWidget {
  StatefulColorfulTile({@required this.color});

  final Color color;

  @override
  _StatefulColorfulTileState createState() => _StatefulColorfulTileState();
}

class _StatefulColorfulTileState extends State<StatefulColorfulTile> {
  @override
  Widget build(BuildContext context) {
    return Container(
      width: 100,
      height: 100,
      color: widget.color,
    );
  }
}

class KeyPractice extends StatefulWidget {
  @override
  _KeyPracticeState createState() => _KeyPracticeState();
}

class _KeyPracticeState extends State<KeyPractice> {
  List<Widget> tiles;

  @override
  void initState() {
    super.initState();
    tiles = [
      StatefulColorfulTile(
        color: Colors.blueAccent,
      ),
      StatefulColorfulTile(
        color: Colors.amber,
      ),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Row(
          children: tiles,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(
          Icons.autorenew,
        ),
        onPressed: () {
          setState(() {
            tiles.insert(1, tiles.removeAt(0));
          });
        },
      ),
    );
  }
}
上述代码相互切换位置

当视频中的有状态小部件没有分配密钥时,小部件如何不重新定位彼此的示例会发生什么情况

我知道密钥只在有状态小部件上工作,无状态小部件是否使用密钥

我知道密钥只适用于有状态小部件。我想知道无状态小部件是否使用密钥


如果我误解了,请教我。

您正在钥匙练习状态下存储颜色。他们使用的示例将其存储在子级的状态中,在您的示例中为:StatefulColorfulTile

下面是一个使用键来正确重新定位小部件的示例,就像您正在尝试的那样。我的例子和上面显示的非常相似。移除这里的键可以防止小部件反映颜色交换,但是使用键可以实现预期的行为

进口“包装:颤振/材料.省道”; 导入“dart:math”; 真空总管{ runAppMyApp; } 类MyApp扩展了无状态小部件{ //此小部件是应用程序的根。 @凌驾 小部件构建上下文上下文{ 返回材料PP 标题:“颤振演示”, 家庭:关键实践, ; } } 类StatefulColorfulTile扩展StatefulWidget{ StatefulColorfulTile{Key}:superkey:Key; @凌驾 _StatefolColorfulTilEstate createState=>\u statefolColorfulTilEstate; } 类_statefolColorTilEstate扩展状态{ 最终颜色myColor=UniqueColorGenerator.getColor; @凌驾 小部件构建上下文上下文{ 返回容器 宽度:100, 身高:100, 颜色:myColor, ; } } 类KeyPractice扩展了StatefulWidget{ @凌驾 _KeyPracticeState createState=>\u KeyPracticeState; } 类KeyPracticesState扩展状态{ 列出瓷砖; @凌驾 无效初始状态{ super.initState; 瓷砖=[ StatefolColorTileKey:UniqueKey, StatefolColorTileKey:UniqueKey, ]; } @凌驾 小部件构建上下文上下文{ 返回脚手架 正文:安全区 孩子:排 儿童:瓷砖, , , 浮动操作按钮:浮动操作按钮 子:图标 Icons.autorenew, , 按下按钮:{ 设定状态{ tiles.insert1,tiles.removeAt0; }; }, , ; } } 类唯一颜色生成器{ 静态随机=新随机; 静态颜色getColor{ 返回Color.fromARGB255,random.nextInt255,random.nextInt255,random.nextInt255; } }
您正在关键实践状态下存储颜色。他们使用的示例将其存储在子部件的状态中,在您的示例中为:StatefulColorfulTile。我认为这是一个问题,所以我为子部件分配了一个颜色状态,但我仍然更改了彼此的部件。你能给我看一下示例代码吗?谢谢你的回复。我实际上并没有举例,我只是注意到了你的问题。你想让我创建一个吗?我把它作为一个答案发布。很抱歉回复太晚。我很高兴你回答了。我会根据你告诉我的再研究一遍。我正在考虑写一篇关于这个的博客,我可以透露代码的来源并引用它吗?@Jay flow你可以不经我的许可,根据我的建议,只要你给予适当的信任。但是,我必须提到,我从其他地方获取了颜色生成器,它最终看起来与我链接的媒体文章中的代码非常相似。