KEY
创建类,方法里面的key
class Box extends StatefulWidget {
const Box({Key key, this.color}) : super(key: key);
final Color color;
@override
_BoxState createState() => _BoxState();
}
Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Box(color: Colors.blue, key: ValueKey('1')),
Box(color: Colors.orange, key: ValueKey('2')),
Box(color: Colors.green, key: ValueKey('3')),
],
),
),
import 'package:flutter/material.dart';
class Detail extends StatefulWidget {
final Color color;
Detail(this.color, {Key key}) : super(key: key);
@override
_DetailState createState() => _DetailState();
}
class _DetailState extends State<Detail> {
int _count = 0;
@override
Widget build(BuildContext context) {
return Center(
child: Container(
height: 200,
width: 200,
color: widget.color,
),
);
}
}
局部键Local Key
ValueKey 数值key
Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Box(color: Colors.blue, key: ValueKey('1')),
Box(color: Colors.orange, key: ValueKey('2')),
Box(color: Colors.green, key: ValueKey('3')),
],
),
UniqueKey 唯一key
Box(color: Colors.blue, key: UniqueKey()),
ObjectKey
Box(color: Colors.blue, key: ObjectKey('name')),
全局键GlobalKey
final _globalKey2 = GlobalKey();
实例
01
class _MyHomePageState extends State<MyHomePage> {
final boxes = [
Box(Colors.blue[100], UniqueKey()),
Box(Colors.blue[300], UniqueKey()),
Box(Colors.blue[500], UniqueKey()),
Box(Colors.blue[700], UniqueKey()),
Box(Colors.blue[900], UniqueKey()),
];
_shuffle() {
setState(() {
boxes.shuffle();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: ReorderableListView(
children: boxes,
onReorder: (oldIndex, newIndex) {
if (newIndex > oldIndex) newIndex--;
print("$oldIndex move to $newIndex");
final box = boxes.removeAt(oldIndex);
boxes.insert(newIndex, box);
},
),
),
floatingActionButton: FloatingActionButton(
onPressed: _shuffle,
child: Icon(Icons.refresh),
),
);
}
}
class Box extends StatelessWidget {
final Color _color;
Box(this._color, Key key) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(
width: 50,
height: 50,
color: this._color,
);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】