【发布时间】:2019-01-31 16:06:32
【问题描述】:
我已经开始使用 Flutter 进行一些工作,我对类之外的小部件的“状态”感到好奇。当我将searchAndAddRow 移到myApp 类内部的构建函数之外时,我需要将Widget 声明为final,这是有道理的,因为它是一个无状态类。当我将 Widget 完全移出一个类时(就像我在代码 sn-p 中所做的那样),我不需要定义任何东西。
在这两种情况下,当我将searchAndAddRow 移到MyApp 的build 之外时,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
],
)
),
);
}
}
【问题讨论】: