【问题标题】:Flutter - Too many positional argumentsFlutter - 位置参数太多
【发布时间】:2020-08-10 08:03:47
【问题描述】:

我想将 documentuser 对象传递到一个对话框,在一个单独的文档中编码,它可以对该用户的文档执行操作。

传递信息的代码是:

 Widget _buildFunctionCards(BuildContext context, DocumentSnapshot document, FirebaseUser user) {
  return ListTile(
      title: GestureDetector( 
        onTap: () {
                      showDialog(
                        context: context,
                        builder: (_) => FunctionEditOptions(document, user),
                      );},
        child:Container... ()))}

接收文档是这样编码的:

   class FunctionEditOptions extends StatefulWidget {
  FunctionEditOptions({this.db, this.user});
  final FirebaseUser user; 
  final DocumentSnapshot db;
  @override
  State<StatefulWidget> createState() => FunctionEditOptionsState();
}

class FunctionEditOptionsState extends State<FunctionEditOptions>
    with SingleTickerProviderStateMixin {
  AnimationController controller;
  Animation<double> scaleAnimation;

  @override

收到的错误消息是:“位置参数过多:预期为 0,但找到了 2 个。”

如果有人能提供见解,我将不胜感激!

【问题讨论】:

    标签: flutter dart arguments


    【解决方案1】:

    改变这个:

    builder: (_) => FunctionEditOptions(document, user),
    

    到这里

    builder: (_) => FunctionEditOptions(db: document, user: user), // or:
    builder: (_) => FunctionEditOptions(user: user, db: document), // both ways are correct
    

    当指定括号内的参数时,它们变成可选的并且可能是乱序的。所以在传递参数的时候必须给参数命名。

    另一种方法是从括号中取出参数,并确保参数是按顺序排列的。

    FunctionEditOptions(this.db, this.user);
    

    这样称呼它:

    builder: (_) => FunctionEditOptions(document, user),
    

    您可以同时使用两者

    FunctionEditOptions(this.db, {this.user});
    

    这样称呼它:

    builder: (_) => FunctionEditOptions(document, user: user),
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2023-01-14
      • 2020-06-15
      相关资源
      最近更新 更多