gpt4 book ai didi

dart - 什么是类外的小部件的 'state'

转载 作者:IT王子 更新时间:2023-10-29 06:54:54 27 4
gpt4 key购买 nike

我已经开始使用 flutter 进行一些工作,我对类之外的小部件的“状态”感到好奇。当我将 searchAndAddRow 移动到 myApp 类内部的构建函数之外时,我需要将 Widget 声明为 final,这是有道理的,因为它是一个无状态类。当我将 Widget 完全移出类时(就像我在代码片段中所做的那样),我不需要定义任何东西。

在这两种情况下,当我将 searchAndAddRow 移动到 MyAppbuild 之外时,android studio 中的“热重载”功能不起作用,应用程序需要停止并重新启动才能使更改生效。是什么促使我首先提出这个问题。

import 'package:flutter/material.dart';

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

Widget searchAndAddRow = Container(
padding: const EdgeInsets.all(0.0),
child: Row(
children: [
Icon(const IconData(0xe8b6, fontFamily: 'MaterialIcons')),
new Container(
width: 80.0,
child: TextField(
decoration: new InputDecoration(
border: const UnderlineInputBorder(), hintText: 'search'),
),
),
new Expanded(
child: new Row(mainAxisAlignment: MainAxisAlignment.end, children: [
new IconButton(
icon: new Icon(const IconData(0xe148, fontFamily: 'MaterialIcons')),
tooltip: 'Add a new item!',
onPressed: null,
),
]),
)
],
),
);

class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Material App Title', // App title
theme: new ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
title: Text('App Bar Title (Home)'),
),
body: ListView(
children: [
//Row 1 contains: Search and Add
searchAndAddRow
//Row 2 contains: List
//Row 3 contains: Sort dropdown
],
)
),
);
}
}

最佳答案

您的问题是,您没有定义小部件。您定义了一个变量。

变量不会热重载,因为框架无法知道您是想使用旧值还是新值。

一般来说,不要将小部件树提取到变量中。而是将它们提取到另一个小部件中:

/** DON"T */
Widget foo = Container();

/** DO */

class Foo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container();
}
}

但如果它是常数呢?出于优化目的

好吧,你可以为你的小部件定义一个 const 构造函数:

class Foo extends StatelessWidget {
const Foo();

@override
Widget build(BuildContext context) {
return Container();
}
}

这意味着无论何时执行 const Foo()(自 dart 2.0 以来不再需要 const 关键字),它总是会返回完全相同的小部件实例。

基本上,它的作用与将其提取到常量变量中一样。但隐含地,因此热重载仍然有效。

关于dart - 什么是类外的小部件的 'state',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52016938/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com