0
ChangeNotifierProvider(
  builder: (context) => AppStateModel()..loadBrands(),
  child: MyTestApp(),
)

为什么我们必须这样调用AppStateModel()..loadBrands(),级联如何帮助我们?

4

2 回答 2

4

级联符号 (..)

级联 (..) 允许您对同一对象进行一系列操作。除了函数调用之外,您还可以访问同一对象上的字段。这通常会为您节省创建临时变量的步骤,并允许您编写更流畅的代码。

例如,在您的情况下,您可以使用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,请查看以下链接: 级联运算符

我希望这有帮助。

于 2020-05-08T16:32:23.270 回答
1

builder(现在称为createChangeNotifierProvider需要返回更改通知类的实例,在本例中为AppStateModel。通常你会这样做:

create: (context) => AppStateModel(),

但是,有时您还想在第一次创建类时运行一些方法,在这种情况下是loadBrands方法。如果您尝试使用这样的单个点来执行此操作:

create: (context) => AppStateModel().loadBrands(),

它确实会调用该loadBrands方法,但它也会给出该方法ChangeNotifierProvider的返回值loadBrands,这可能是voidor Future<void>,而不是ChangeNotifierProvider需要的。

..另一方面,使用双点运算符返回AppStateModel自身,同时仍调用该loadBrands方法:

create: (context) => AppStateModel()..loadBrands(),

这是等价的:

create: (context) {
  final model = AppStateModel();
  model.loadBrands();
  return model;
},

我有时会发现..运算符难以阅读。只需使用对您有意义的表格。

于 2021-07-12T03:09:16.097 回答