ChangeNotifierProvider(
builder: (context) => AppStateModel()..loadBrands(),
child: MyTestApp(),
)
为什么我们必须这样调用AppStateModel()..loadBrands()
,级联如何帮助我们?
ChangeNotifierProvider(
builder: (context) => AppStateModel()..loadBrands(),
child: MyTestApp(),
)
为什么我们必须这样调用AppStateModel()..loadBrands()
,级联如何帮助我们?
级联符号 (..)
级联 (..) 允许您对同一对象进行一系列操作。除了函数调用之外,您还可以访问同一对象上的字段。这通常会为您节省创建临时变量的步骤,并允许您编写更流畅的代码。
例如,在您的情况下,您可以使用Cascade operator
如下:
//call the method of app state class without creating a variable to hold an instance of the class
AppStateModel()..loadBrands();
而不是创建像这样的变量:
//create an object of appstate and store in a variable
AppStateModel appState;
//access the methods of appstate class
appSate.localBrands();
要了解更多信息Cascade Operator
,请查看以下链接:
级联运算符
我希望这有帮助。
的builder
(现在称为create
)ChangeNotifierProvider
需要返回更改通知类的实例,在本例中为AppStateModel
。通常你会这样做:
create: (context) => AppStateModel(),
但是,有时您还想在第一次创建类时运行一些方法,在这种情况下是loadBrands
方法。如果您尝试使用这样的单个点来执行此操作:
create: (context) => AppStateModel().loadBrands(),
它确实会调用该loadBrands
方法,但它也会给出该方法ChangeNotifierProvider
的返回值loadBrands
,这可能是void
or Future<void>
,而不是ChangeNotifierProvider
需要的。
..
另一方面,使用双点运算符返回AppStateModel
自身,同时仍调用该loadBrands
方法:
create: (context) => AppStateModel()..loadBrands(),
这是等价的:
create: (context) {
final model = AppStateModel();
model.loadBrands();
return model;
},
我有时会发现..
运算符难以阅读。只需使用对您有意义的表格。