如何导航到其构造函数带有某些自变量的页面(类)。我显然不想传递任何参数。我只希望执行该类,以便显示页面。
我尝试提供伪参数,以便我的代码进行编译。但这是不对的。
代码:
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..
}
如您所见,该行:
Products.routeName: (context) => Products()
自然不会编译->这是因为Products接受单个参数。
我该怎么办?
答案 0 :(得分:0)
简短答案
更改了此内容:
Products(this.products); // this is called *positional* parameters
对此:
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 products;
Products({this.products = const []}); // this is called named parameters with default value
}
尽管命名参数是一种可选参数,但是您可以使用@required对其进行注释,以表明该参数是强制性的-用户必须为该参数提供一个值。
默认情况下,需要位置参数。
class Person(){
String name;
Person(this.name)
}
Person("John") // ok
Person() // error
默认情况下,“命名参数”是可选的。
class Person(){
String name;
Person({this.name})
}
Person(name: "John") // ok
Person("John") // error
Person() // ok
自定义位置参数为可选。
class Person(){
String name;
int age;
Person(this.name, [this.age])
}
Person("John") // ok
Person("John", 40) // ok
需要的自定义命名参数。
class Person(){
String name;
int age;
Person({this.name, @required this.age})
}
Person(name: "John", age: 20) // ok
Person(name: "John") // error
Person() // error
但是在颤抖中,我们必须清楚地了解位置组合 和命名参数。
下面的代码演示了Flutter Text Widget,
的克隆
class Text(){
String name;
String fontFamily;
bool bold;
Text(this.name, {this.fontFamily, this.bold})
}
Text("Flutter") // ok
Text("Flutter", fontFamily: "Roboto") // ok
Text("Flutter", bold: true) // ok
Text(name: "Flutter", bold: true) // error
Text(bold: true) // error
答案 1 :(得分:0)
您可以将Products.class的参数设为可选。 更改此:
Product(this.products);
对此:
Product([this.product]);
现在,如果实例化此类而不为products
传递对象,它将保留为null
。
您还可以为以下产品提供默认值:
Product([this.products = []]);
现在,每次您实例化此类而不传递任何参数时,它都会是空列表,而不是null
。
希望这会有所帮助。
答案 2 :(得分:0)
在给出答案之前,我是否要感谢Kalpesh和Ejabu的回答? 因此,问题在于我们有一个页面(一个类),该页面具有带有参数的构造函数。无论它是否是命名构造函数,它都不重要。问题是,每当实例化或引用此类(在routers {}中)时,路由都希望给出参数。这很愚蠢,因为没有为该路由提供任何参数。
那答案是什么?
好吧,答案,请不要给我红色箭头,但是答案是这样的:
只需在类(或方法)中使用所需的参数创建一个函数。有时我们使用类参数传递值..那是一种选择。我们可以不带任何构造函数参数地保留类,而只需创建一个函数以接收所需的参数即可。