Flutter ChangeNotifierProvider构建器已弃用

时间:2019-11-29 07:46:44

标签: flutter dart

我的main.dart中有以下代码:

main() {
  runApp(
    MultiProvider(
      providers: [
        ChangeNotifierProvider(builder: (context) => Auth()), // /**problem here. builder displayed with strikethrough line**/
      ],
      child: App(),
    ),
  );
}

大约2天前,我的Visual Studio代码显示了以下警告:

enter image description here

所以我认为不建议使用ChangeNotifierProvider上的builder参数。我到处搜索,但找不到该Builder参数的替代方法。那么如何消除这些警告呢?以下是我在Windows 10上使用flutter --version命令的flutter版本

> flutter --version
Flutter 1.9.1+hotfix.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 68587a0916 (3 months ago) • 2019-09-13 19:46:58 -0700
Engine • revision b863200c37
Tools • Dart 2.5.0

对于任何帮助,请先谢谢

5 个答案:

答案 0 :(得分:16)

自提供程序版本3.2.0起,“ builder”已被标记为“ create”,已被弃用。

更多信息可以在change log

中找到

应该这样做:

ChangeNotifierProvider(create: (context) => Auth())

答案 1 :(得分:5)

您可以将create作为生成器传递。

    return Provider<MyProvider>(
        create: (context) => MyProvider(

        ),
        child: HomePage(),
    );

答案 2 :(得分:2)

您可以使用带有 Product()或Index上特定产品的create param来代替builder参数。

itemBuilder: (ctx, i) => ChangeNotifierProvider(
        create: (context) => products[i],
        child:  ProductItem(),
      ), 

或者可以用作超值版本:

itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
        value: products[i],
        child:  ProductItem(),
      ),

答案 3 :(得分:0)

您可以使用“创建”代替“构建器”

main() {
 runApp(
   MultiProvider(
     providers: [
       ChangeNotifierProvider(create: (context) => Auth()), // /**problem here. 
builder displayed with strikethrough line**/
     ],
     child: App(),
   ),
 );

}

答案 4 :(得分:0)

由于弃用,您需要使用 applicationWillResignActive 而不是 create

错误代码示例:

enter image description here

真实代码示例:

enter image description here