【问题标题】:Passing parameter to stateful widget将参数传递给有状态小部件
【发布时间】:2021-02-22 16:15:42
【问题描述】:

我尝试将参数 uid 传递给这样的有状态小部件:

class BoardBody extends StatefulWidget {
  String uid;
  BoardBody({
    @required this.uid,
  });

当我尝试在 initstate 访问它时,我得到一个空值。但是,如果我热重新加载页面,则会打印出值 widget.uid。我做错什么了吗?我希望有可用的 uid,以便我可以从数据库中提取一些数据。

  @override
  void initState() {
    // TODO: implement initState
    print("user id");
    print(widget.uid);
    super.initState();
  }

我已将 uid 数据传递给小部件,如下所示:

BoardBody(uid: uid)

【问题讨论】:

  • 您的代码看起来不错。分享您传递参数的代码。
  • @YoBo,我已将 uid 传递给 BoardBody,如 BoardBody(uid: uid)
  • 在访问widget.uid之前尝试调用super.initState()
  • 第一次传的时候确定uid不为null吗?
  • @YoBo,哦,可能是空的,让我再检查一下......

标签: flutter dart


【解决方案1】:

我认为这是由于您在 main.dart 中使用了路由。 因此,initState() 在构建 Scaffold 之后加载。

如果您尝试使用 MaterialPageRoute(builder: (context) => BoardBody()) 构建屏幕/小部件,您将看到结果(打印的 uid)。

【讨论】:

  • 它其实是dashboard页面中的一个widget,widget名字是BoardBody,所以它并不是来自某个路由。
【解决方案2】:

试试这个。

@override
  void initState() {
    super.initState();
    // TODO: implement initState
    print("user id");
    print(widget.uid);
  }

所以 super.initState() 应该在你的打印之上。这应该可以。

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 2021-01-27
    • 2019-12-29
    • 2021-08-29
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    相关资源
    最近更新 更多