Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 导航到具有参数的类_Flutter_Dart - Fatal编程技术网

Flutter 导航到具有参数的类

Flutter 导航到具有参数的类,flutter,dart,Flutter,Dart,如何导航到其构造函数接受某些参数的页面(类)。我显然不想传递任何论点。我只希望执行该类,以便显示页面 我试图提供伪参数,以便我的代码能够编译。但这不可能是正确的 代码: class MyApp extends StatelessWidget { Widget build(ct) { return MaterialApp( theme: ThemeData( brightness: Brightness.light, accentColor:

如何导航到其构造函数接受某些参数的页面(类)。我显然不想传递任何论点。我只希望执行该类,以便显示页面

我试图提供伪参数,以便我的代码能够编译。但这不可能是正确的

代码:

class MyApp extends StatelessWidget {
  Widget build(ct) {
    return MaterialApp(
      theme: ThemeData(
        brightness: Brightness.light,
        accentColor: Colors.red,
        iconTheme: IconThemeData(color: Colors.pinkAccent),
      ),
      title: kAPP_NAME,
      home: Home(),
      routes: {
        Products.routeName: (context) => Products()
      },
    );
  }
}
产品类别


class Products extends StatelessWidget
{
  static const routeName = '/products';

  final List<String> products;


  Products(this.products);

... 
...

// widget building etc..
}

不会编译,自然->这是因为产品只接受一个参数


我该怎么办?

简短回答

更改为:

产品(this.Products);//这称为*位置*参数
为此:

类MyApp扩展了无状态小部件{
小部件生成(ct){
返回资料PP(
主题:主题资料(
亮度:亮度,亮度,
accentColor:Colors.red,
iconTheme:IconThemeData(颜色:Colors.pinkAccent),
), 
标题:“卡普普大学名称”,
home:home(),
路由:{
Products.routeName:(上下文)=>Products()
}, 
); 
} 
}
类产品扩展了无状态控件{
静态常量routeName='/products';
最终产品清单;
Products({this.Products=const[]});//这称为具有默认值的命名参数
}
如前所述:

尽管命名参数是一种可选参数,但您可以使用@required对其进行注释,以指示该参数是必需的,即用户必须为该参数提供一个值

长话短说 A.违约 默认情况下,位置参数是必需的。

class-Person(){
字符串名;
人员(此名称)
}
人(“约翰”)//好的
Person()//错误
默认情况下,命名参数是可选的。

class-Person(){
字符串名;
个人({this.name})
}
人(名字:“约翰”)//好的
人(“约翰”)//错误
Person()//好的
B.定制 自定义位置参数是可选的。

class-Person(){
字符串名;
智力年龄;
Person(this.name、[this.age])
}
人(“约翰”)//好的
人(“约翰”,40)//好的
需要自定义命名参数。

class-Person(){
字符串名;
智力年龄;
Person({this.name,@required this.age})
}
人(姓名:“约翰”,年龄:20)//好的
人员(姓名:“John”)//错误
Person()//错误
C.位置和命名组合 但在颤振中,我们必须清楚地了解位置的组合 和命名参数

下面的代码演示了Flatter的
文本小部件的克隆,

class Text(){
字符串名;
弦乐家庭;
布尔博尔德;
Text(this.name,{this.fontfamine,this.bold})
}
Text(“颤振”)//确定
Text(“flatter”,fontFamily:“Roboto”)//好的
Text(“flatter”,粗体:true)//确定
Text(名称:“flatter”,粗体:true)//错误
Text(粗体:true)//错误

您可以将Products.class的参数设置为可选参数。 更改此项:

Product(this.products);
为此:

Product([this.product]);
现在,如果您实例化这个类而不为
产品
传递对象,它将保持
null
。 您还可以为以下产品提供默认值:

Product([this.products = []]);
现在,每次实例化这个类而不传递任何参数时,它都将是空列表,而不是
null


希望这能有所帮助。

在我给出答案之前,请允许我感谢Kalpesh和Ejabu的回答? 所以问题是我们有一个页面(一个类),它有一个带参数的构造函数。不管它是否是命名构造函数,这都不重要。问题是,每当实例化或引用这个类(在路由器{}部分中)时,路由都希望给出参数。这是愚蠢的,因为没有理由支持这条路线

那么答案是什么呢

答案是,请不要给我红色箭头,但答案是:


只需在类(或方法)中使用我们需要的参数创建一个函数。我们有时使用类参数来传递值。。这是一个选择。我们可以让类不带任何构造函数参数,只需创建一个函数来接受我们需要的参数

它称为可选位置参数。我在上面的长答案部分编辑了我的答案。如果这个答案有帮助,请接受@你好,非常感谢你的回答。但我不确定这是否解决了我的问题。您知道,我的代码的某些部分需要产品中的参数(参数),但有些部分不需要(例如,只调用类来显示我需要的信息)。我尝试了你的代码,现在调用产品的部分(带有参数)不起作用。
Product([this.products = []]);