标签: statefulwidget

在其状态类中访问有状态小部件的功能?扑

我试图在注销按钮的 onPressed 方法之后调用 _signOut 函数。但是它没有(识别函数或让我调用它)但是我可以进行调用 widget.Onsignedout,对它的父级回调,一切都按预期工作。除了我在 auth.signout 上注销用户并回电只是为了更新表单。如何从状态类访问 _signOut()?谢谢你

import 'package:flutter/material.dart';
import 'package:login_demo/auth.dart';
import 'package:login_demo/root_page.dart';

class HomePage extends StatefulWidget {
  HomePage({this.auth, this.onSignedOut});
  final BaseAuth auth;
  //To call a function of a parent, you can use the callback pattern
  final VoidCallback onSignedOut;

  void _signOut() async {
    try {
      Text('Signing Out here');
      await auth.signOut();
      onSignedOut;
    } catch (e) {
      print(e);
    }
  }

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

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar( …
Run Code Online (Sandbox Code Playgroud)

widget dart flutter statefulwidget

5
推荐指数
1
解决办法
7605
查看次数

为什么在 StatefulWidget 中没有定义 build 方法?

我目前正在学习 Flutter。我试图深入了解 Flutter Widget 的生命周期,我想知道为什么StatefulWidget会这样写:

class Example extends StatefulWidget {
  @override
  _ExampleState createState() => _ExampleState();
}

class _ExampleState extends State<Example> {
  // initState
  // setState
  // ...
  @override
  Widget build(BuildContext build) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

但不是 :

class Example extends StatefulWidget {
  // initState
  // setState
  // ...
  @override
  Widget build(BuildContext build) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为后者使来源变得简单。但我不知道他们为什么使用以前的风格?

flutter statefulwidget

5
推荐指数
1
解决办法
1235
查看次数

理解StatefulWidget在Flutter中的使用

我刚刚开始摆弄 Flutter,我无法理解StatefulWidget. 我在教程等中看到的所有这些小部件都可以实例化 aState<MyWidget>并让它完成所有工作。
例如,从这个(官方)教程:

class RandomWords extends StatefulWidget {
  @override
  createState() => new RandomWordsState();
}
class RandomWordsState extends State<RandomWords> {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是为什么要这样构建以及外部类的用途是什么(在我的示例中RandomWords)。

提前致谢。

dart flutter statefulwidget

4
推荐指数
1
解决办法
1659
查看次数

打开键盘时重新创建StatefulWidget页面

在我的配置文件页面中,当使用单击编辑图标时,我具有使用布尔条件的文本选项,将文本窗口小部件更改为文本
widget.isUpdate ? new Flexible(child: new TextField()) : Text("Text Widget")字段窗口小部件,但当文本字段聚焦时,键盘已打开,此时StatefulWidget重新创建,因此布尔值再次变为false,然后文本字段移至文本窗口小部件。仅当页面具有导航器推入页面(第二页)时,才会发生这种情况

 Navigator.push(context,MaterialPageRoute(builder: (context) => UpdateProfile()))
Run Code Online (Sandbox Code Playgroud)

如果此页面为默认主页,则工作正常。我没有犯什么错误。

代码:

import 'package:flutter/material.dart';

class UpdateProfile extends StatefulWidget {
  bool isUpdate = false;

  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return UpdateProfileState();
  }
}

class UpdateProfileState extends State<UpdateProfile> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(
      appBar: AppBar(
          title: Text("Update"),
          elevation: 2.0),
      body: Container(
        width: double.infinity,
        height: double.infinity,
        color: Colors.red,
        margin: const EdgeInsets.all(10.0),
        child: Row(
          children: <Widget>[
            widget.isUpdate ? new …
Run Code Online (Sandbox Code Playgroud)

keyboard flutter statefulwidget

4
推荐指数
1
解决办法
1139
查看次数

在构造函数中调用 SetState()

我已经建立了一个定制列表。现在我包含一个复选框,如果我选中或取消选中,则会引发以下错误:“在构造函数中调用 setState()”

\n\n
class Lists extends StatefulWidget{  \n     @override\n    _List createState() => _List();\n}\n\nclass _List extends State<Lists> {  \n  bool checkedvalue = true;\n  @override\nWidget build(BuildContext context) {\n\n return futureBuilder();\n}\n\nWidget futureBuilder(){  \n  var futureBuilder = new FutureBuilder(\n      future: rest.fetchPost(),\n      builder: (BuildContext context, AsyncSnapshot snapshot) {\n        switch (snapshot.connectionState) {\n          case ConnectionState.none:\n          case ConnectionState.waiting:\n            return new Text('loading...');\n          default:\n            if (snapshot.hasError)\n              return new Text('Error: ${snapshot.error}');\n            else                    \n                return listBuilder(context, snapshot);            \n        }\n      }\n );\n\n return new Scaffold(         \n      body: futureBuilder,\n    );\n}\n\nWidget listBuilder(BuildContext context, AsyncSnapshot snapshot) …
Run Code Online (Sandbox Code Playgroud)

checkbox setstate flutter statefulwidget

4
推荐指数
1
解决办法
1万
查看次数

是否可以扩展 StatefulWidget,在其构建方法上提供额外的参数?

我想创建一个像这样的 BaseScreen Widget 以在我的应用程序中重用:

class BaseScreen extends StatelessWidget {
  final Widget child;

  BaseScreen({this.child});

  @override
  Widget build(BuildContext context) {
    var safePadding = MediaQuery.of(context).padding.top +
        MediaQuery.of(context).padding.bottom;

    return Scaffold(
      body: LayoutBuilder(
        builder: (context, constraint) {
          return SingleChildScrollView(
            child: SafeArea(
              child: ConstrainedBox(
                constraints: BoxConstraints(
                    minHeight: constraint.maxHeight - safePadding),
                child: IntrinsicHeight(
                  child: child,
                ),
              ),
            ),
          );
        },
      ),
    );
  }
}

Run Code Online (Sandbox Code Playgroud)

但我看到的问题是我还想重用此类子级中提供的constraint属性。LayoutBuilder

目前,我需要在子级中创建一个新的 LayoutBuilder,这听起来像是对引擎进行更多处理,以及更多样板代码。

如果我可以以某种方式扩展这个小部件,以便在孩子中我可以拥有这个:

  @override
  Widget build(BuildContext context, BoxConstraints constraints) {
  }
Run Code Online (Sandbox Code Playgroud)

那太好了。我知道 Flutter 也鼓励组合而不是继承,所以如果我能以其他方式解决它,我也会很感激。

谢谢你!

flutter statefulwidget

4
推荐指数
1
解决办法
4589
查看次数

Flutter - 状态小部件在切换选项卡时不保存计数器状态

我正在学习扑腾,我正在使用tabBars,我遇到了保存状态的问题.我在下面提出了一个小问题.基本上,有一个按钮和一个有状态的计数器.当我单击按钮时,我看到文本字段正确更新.但是,当我切换到另一个选项卡并返回时,文本字段将返回零.

我发现如果我在_CounterState之外移动以下行,使其在文件的顶层定义,那么,它可以正常工作.当我切换标签时,当我切换回时,计数器保持正确的计数

int _counter = 0;
Run Code Online (Sandbox Code Playgroud)

我觉得这不是这样做的合适方式,我看到的所有例子都在类中有变量.任何人都可以给我任何见解吗?如果它在课堂内,为什么会重置?我应该把它放在课外吗?以下是简化的完整示例.

import 'package:flutter/material.dart';

void main() {
  runApp(new TabBarDemo());
}

class TabBarDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: new DefaultTabController(
        length: 3,
        child: new Scaffold(
          appBar: new AppBar(
            bottom: new TabBar(
              tabs: [
                new Tab(icon: new Icon(Icons.directions_car)),
                new Tab(icon: new Icon(Icons.directions_transit)),
                new Tab(icon: new Icon(Icons.directions_bike)),
              ],
            ),
            title: new Text('Tabs Demo'),
          ),
          body: new TabBarView(
            children: [
              new Counter(),
              new Icon(Icons.directions_transit),
              new Icon(Icons.directions_bike),
            ],
          ),
        ),
      ),
    );
  } …
Run Code Online (Sandbox Code Playgroud)

stateful dart flutter statefulwidget

3
推荐指数
2
解决办法
1871
查看次数

如何从另一个 dart 文件调用有状态小部件(具有表单)方法? - Flutter

我在有状态小部件中有一个表单,在我的有状态小部件中,我使用提交方法验证我的表单。

在我的应用程序中,我在另一个 dart 文件的另一个页面中显示该表单。

我的表单在新页面和 appbar 操作中可见,我正在调用提交方法,但我不知道如何在新的 dart 文件中调用该提交方法。

forms dart flutter statefulwidget

3
推荐指数
1
解决办法
5132
查看次数

当我使用 map 函数时,type '(dynamic) =&gt; dynamic' 不是 'test' 类型 '(dynamic) =&gt; bool' 的子类型

我有一个带有 LinkedHashMap 成员的 StatefulWidget 小部件,如下所示:

LinkedHashMap _items = new LinkedHashMap<String, List<dynamic>>();
Run Code Online (Sandbox Code Playgroud)

现在我需要过滤List<dynamic>Map 项目中的项目。

我使用此代码进行过滤:

function filter(_items) {
    return _items.map((day, items) {
        return new MapEntry(day, items.where((i) {
          return i.stringProperty.contains(widget.filter);
        }).toList());
    });
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个主题的错误

类型 '(dynamic) => dynamic' 不是 'test' 类型 '(dynamic) => bool' 的子类型

widget dart flutter statefulwidget

3
推荐指数
1
解决办法
2689
查看次数

Flutter 在重新创建 Widget 时重置 StatefulWidget 状态

在我的 Flutter Widget 中,我有一个StreamBuilder检查snapshot.hasError并在这种特定情况下它将返回我的ErrorRetryWidget().

builder: (context, AsyncSnapshot<MyObject> snapshot) {
...
    if (snapshot.hasError) {
        return ErrorRetryWidget();
    }
}
Run Code Online (Sandbox Code Playgroud)

ErrorRetryWidget()只是示出了一个错误消息,并且在重试按钮。当您按下此按钮时,我会用进度指示器替换按钮文本。因此,我需要使这个小部件有状态,因为它的状态包含一个isRetrying我在 中设置为 false的变量,initState然后在按下后设置为 true。

当按下按钮时,ErrorRetryWidget通过 a 告诉父级VoidCallback重新触发流逻辑。它运作良好,但问题是如果错误再次出现,我StreamBuilderErrorRetryWidget再次“返回” 。

构造函数被称为新时间,但不是initState。我怎样才能做到每次重新创建小部件时都会重置状态?因此,isRetrying已经(或仍然)设置为 true。

我找到的唯一快速解决方案是在我的错误小部件中实现它:

@override
void didUpdateWidget(covariant oldWidget) {
    super.didUpdateWidget(oldWidget);
    setState(() {
        retrying = false;
    });
  }
Run Code Online (Sandbox Code Playgroud)

不确定这是一个好习惯。

widget flutter statefulwidget

3
推荐指数
1
解决办法
1178
查看次数

标签 统计

flutter ×10

statefulwidget ×10

dart ×5

widget ×3

checkbox ×1

forms ×1

keyboard ×1

setstate ×1

stateful ×1