有状态窗口小部件定义为在其生命周期内更改其状态的任何窗口小部件.但是StatelessWidget
,拥有一个StatefulWidget
孩子是一个非常普遍的做法.StatelessWidget
如果它有StatefulWidget
一个孩子,不会成为有状态的吗?
我尝试将文档作为代码的一部分进行查看StatelessWidget
,但无法弄清楚一个StatelessWidget
可以Statefulwidget
作为其子代的方式并仍然存在StatelessWidget
.
Flutter中有状态和无状态小部件之间的关系和区别是什么?
我是 flutter 世界的新手,我最近学习了(或者我认为我已经学会了)有状态和无状态小部件,这是 Flutter 小部件的基础。
我们将无状态小部件用于未在显示器上重绘的内容(如文本、按钮等),但有状态小部件可以重绘自己。
所以我的问题是,如果有状态小部件可用于绘制与无状态小部件相同类型的小部件,为什么我们需要无状态小部件?
或者是否有任何特定原因在 flutter 中使用无状态而不是有状态的小部件?或者我们可以一直使用有状态的小部件而不是只能绘制一次内容的无状态小部件吗?
谢谢,对不起,如果这是一个愚蠢的问题。
那么问题不是无状态和有状态之间的区别。我知道其中的区别,但是仅使用有状态小部件有什么影响,因为通过使用它我们还可以实现无状态小部件可以做的大部分事情,那么为什么我们需要无状态小部件?它在颤振环境中的重要性是什么?的应用程序将不时重新绘制?
我想要创建statefulWidget
并希望在这个小部件中获取父小部件的高度。不想通过从父小部件发送高度数据来做到这一点。我怎样才能做到这一点?
我正在尝试保留小部件的状态,以便如果我暂时从小部件树中删除有状态小部件,然后稍后重新添加它,小部件将具有与删除之前相同的状态。这是我的一个简化示例:
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool showCounterWidget = true;
@override
Widget build(BuildContext context) {
return Material(
child: Center(
// Center is a layout widget. …
Run Code Online (Sandbox Code Playgroud) 我想要实现的是保存小部件的状态,即在调用 setState() 方法时它不应该刷新。
class _GenderSelectionPageState extends State<GenderSelectionPage> {
bool isFemaleSelected = false;
AdmobBannerSize bannerSize;
GlobalKey _globalKey = new GlobalKey();
bool isLoaded = false;
@override
void initState() {
// TODO: implement initState
super.initState();
bannerSize = AdmobBannerSize.BANNER;
}
@override
Widget build(BuildContext context) {
double height = MediaQuery.of(context).size.height;
double width = MediaQuery.of(context).size.width;
return new Scaffold(
body: new Container(
width: width,
child: new Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
Flexible(
child: new Hero(
tag: …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Flutter 构建一个应用程序,但遇到了一个小问题。我正在尝试实现一个包含三个页面的 BottomNavigaionBar 样式应用程序。(参见第一个片段)布局使用了三个“ChorePage”类型的对象。该应用程序似乎正在创建三个 ChorePage 实例,但仅创建一个 _ChorePageState 实例。
这会导致变量 _dataRows 在三个选项卡之间共享,这意味着我无法将不同的信息放入不同的选项卡中。为什么会发生这种情况以及如何预防?
我已将打印语句放入 createState() 函数中,并在 PopulateRows 函数中打印“this”变量,该函数在每次重建 ChorePage 时都会调用。打印输出如下所示,确认这三个小部件确实使用相同的 State 对象。(对象A只调用一次createState,并且this变量引用同一个对象)
class AppLayout extends StatefulWidget {
@override
_AppLayoutState createState() => _AppLayoutState();
}
class _AppLayoutState extends State<AppLayout> {
int _currentIndex = 0;
String title = 'Test';
List<Widget> _children = [
new ChorePage(Title:'A'),
new ChorePage(Title:'B'),
new ChorePage(Title:'C')
];
@override
Widget build(BuildContext context) {
//STUFF BEFORE INIT
return Scaffold(
appBar: AppBar(
title: Text('$title'),
),
body: _children[_currentIndex],
bottomNavigationBar: BottomNavigationBar(
onTap: onTabTapped,
currentIndex: _currentIndex,
items:[ …
Run Code Online (Sandbox Code Playgroud) 只是测试颤振。下面的代码示例是一个非常简单的 flutter 应用程序。问题是我不知道如何在 TestTextState 类中调用 setState() 函数,以便在每次按下更改按钮时更改文本。
import 'package:flutter/material.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Test app',
home: new Scaffold(
appBar: new AppBar(
title: new Text("Test"),
),
body: new Test(),
),
);
}
}
class Test extends StatelessWidget {
final TestText testText = new TestText();
void change() {
testText.text == "original" ? testText.set("changed") : testText.set("original");
}
@override
Widget …
Run Code Online (Sandbox Code Playgroud) 祝你平安
我正在研究 Flutter 的小部件生命周期,并停在布尔变量的点上this.mounted
,它确实直接存在于State
类中,它只能与 a 作为子类连接StatefulWidget
,而永远不会/不会与 a 连接StatelessWidget
。
问题是 ...
我在Flutter中搜索,发现这个挂载变量只在类中,然后我进一步查找,找到了类内部State
调用的函数。mount()
Element
类StatelessWidget
与类相连StatelessElement
,类从ComponentElement
直接继承自该类的Element
类扩展而来。
我现在真的很困惑,也许我误解了这一点,我需要对此的解释!谢谢。
lifecycle application-lifecycle flutter statefulwidget statelesswidget
我是一个独特的人。我的意思是我与这个世界上所有其他人都不同。当我在 flutter 中创建一个 UniqueKey 时,它与其他的有什么不同?
我有一个应用程序需要一个持久的、跨多个屏幕的计时器功能,该功能可以从一个或两个不同的屏幕启动。\n我可以构建一个计时器小部件和倒计时部分。但我似乎无法弄清楚如何保持它在所有屏幕上运行和浮动,这意味着当我点击时,它仍然可以在不同的其他屏幕上显示?或者我是否需要在我进入的每个屏幕上用全局状态重建它?
\nI\xe2\x80\x99m 认为底部有一个小的持久模态表?但持续的部分已经让我挣扎了一个星期了。
\n我使用堆栈吗?我只是不知道从哪里开始可以跨所有屏幕的部分。
\n请帮忙,伙计们。先感谢您!!!
\n