【问题标题】:"Positional arguments must occur before named arguments & Too many positional arguments:" error“位置参数必须出现在命名参数之前&位置参数太多:”错误
【发布时间】:2020-01-23 02:51:57
【问题描述】:

谁能告诉我如何纠正这两个错误?我尝试了几种不同的方法,但都没有成功。

这两个问题都与“Class SecondScreen”有关。

我不知道应该在哪里进行更改。这可能是一个非常简单的问题。但如果你们中的任何一位能就这个问题给我一些见解,我会很高兴。

我浏览了一些示例代码和教程,但找不到有效的。

import 'package:flutter/material.dart';
//import 'package:flutter/services.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'firstapp',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.teal
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List data = ["one", "Two", "Three", "Four", "Five"];
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        itemCount: 5,
        itemBuilder: (BuildContext context, int i) => Column(
          children: <Widget>[
            Container(
              padding: EdgeInsets.symmetric(vertical: 12.0,horizontal: 10.0),
              child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                  Container(
                    child: FlatButton(
                    padding: EdgeInsets.symmetric(vertical: 12.0,horizontal: 10.0),
                    child: Text(data[i], style: TextStyle(fontWeight: FontWeight.bold,fontSize: 18.0)),
                    onPressed: () {
                    Navigator.push(
                      context, 
                      new MaterialPageRoute(builder: (context) => new SecondScreen(i)), 
                    );
                     },
                    )
                  ),
                  Divider(color: Colors.black),
                ],
                ),
              )
          ],),
      )
    );
  }
}

class SecondScreen extends StatelessWidget {
    List data = ["one", "Two", "Three", "Four", "Five"];
    List data1 = ["this", "that", "here", "hello", "ahoy"];
  @override
    Widget build(BuildContext context) {
      return new Scaffold(
        appBar: new AppBar(
          //title: new Text("Second Screen"),

          Container(
          child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
          children: <Widget>[

          Padding(
          padding: const EdgeInsets.only(top: 8.0, bottom: 6.0),
          child: Text(data[i], style: TextStyle(fontWeight: FontWeight.bold,fontSize: 25.0)), 
           ),
          ]
          ),
          ),


          Padding(
          padding: const EdgeInsets.only(top: 8.0, bottom: 2.0),
          child: Row(children: <Widget>[
          Text(data1[i],style: TextStyle(fontWeight: FontWeight.normal,fontSize: 12.0)
          ),
          ]
          ),
          ),

        )
        ),
        );

  }
}
  1. 位置参数过多:预期为 0,但找到了 1。 尝试删除额外的位置参数,或指定命名 arguments.dart(extra_positional_arguments_could_be_named)

  2. 的名称
  3. 位置参数必须出现在命名参数之前。 尝试将所有位置参数移到已命名的 arguments.dart(positional_after_named_argument)

  4. 之前

【问题讨论】:

  • 请同时发布错误日志
  • 如果你想在你的 SecondScreen() 构造函数中传递一些东西,你必须在你的 SecondScreen 类中定义构造函数。之后你会觉得自己像个超级英雄。

标签: android flutter


【解决方案1】:

将您的代码替换为 as,

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'firstapp',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
          primarySwatch: Colors.teal
      ),
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  List data = ["one", "Two", "Three", "Four", "Five"];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: ListView.builder(
          itemCount: 5,
          itemBuilder: (BuildContext context, int i) =>
              Column(
                children: <Widget>[
                  Container(
                    padding: EdgeInsets.symmetric(
                        vertical: 12.0, horizontal: 10.0),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      children: <Widget>[
                        Container(
                            child: FlatButton(
                              padding: EdgeInsets.symmetric(
                                  vertical: 12.0, horizontal: 10.0),
                              child: Text(data[i], style: TextStyle(
                                  fontWeight: FontWeight.bold, fontSize: 18.0)),
                              onPressed: () {
                                Navigator.push(
                                  context,
                                  new MaterialPageRoute(
                                      builder: (context) => SecondScreen()),
                                );
                              },
                            )
                        ),
                        Divider(color: Colors.black),
                      ],
                    ),
                  )
                ],),
        )
    );
  }
}

class SecondScreen extends StatelessWidget {
  List data = ["one", "Two", "Three", "Four", "Five"];
  List data1 = ["this", "that", "here", "hello", "ahoy"];

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
        appBar: new AppBar(
          title: new Text("Second Screen"),),
        body: Container(
          child: Padding(
            padding: const EdgeInsets.all(16.0),
            child: Column(
                children: <Widget>[

                  Padding(
                    padding: const EdgeInsets.only(top: 8.0, bottom: 6.0),
                    child: Text(data[i], style: TextStyle(
                        fontWeight: FontWeight.bold, fontSize: 25.0)),
                  ),
                ]
            ),
          ),
        ),
    );
  }
}

在您使用路由导航到页面 "SecondScreen(i)" 的 listview.builder 中,您将“i”作为构造函数中的参数传递。但是,在 SecondScreen 类中,您没有创建任何具有此类参数的构造函数是有问题的。

您的构建方法中的另一个问题是,您将 2 个 Padding 小部件直接作为一个孩子使用到您的身体。您可以使用列小部件逐个线性添加子项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多