ตัวสร้าง ChangeNotifierProvider ของ Flutter ถูกคัดค้าน


12

ฉันมีรหัสนี้ใน main.dart ของฉัน:

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

ตั้งแต่ประมาณ 2 วันที่ผ่านมารหัสภาพสตูดิโอของฉันแสดงคำเตือนนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ดังนั้นฉันคิดว่าพารามิเตอร์ตัวสร้างบน ChangeNotifierProvider นั้นเลิกใช้แล้ว ฉันค้นหาทุกที่ แต่ไม่สามารถหาพารามิเตอร์ทางเลือกของตัวสร้างนี้ได้ ดังนั้นจะลบคำเตือนเหล่านี้ได้อย่างไร ด้านล่างเป็นเวอร์ชั่นกระพือของฉันโดยใช้flutter --versionคำสั่งใน Windows 10

> 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
ToolsDart 2.5.0

สำหรับความช่วยเหลือใด ๆ ขอบคุณล่วงหน้า

คำตอบ:


31

เนื่องจากผู้ให้บริการเวอร์ชัน 3.2.0 "ผู้สร้าง" ถูกทำเครื่องหมายว่าเลิกใช้แล้วในความโปรดปรานของ "สร้าง"

ข้อมูลเพิ่มเติมสามารถพบได้ในบันทึกการเปลี่ยนแปลง

ดังนั้นควรทำ:

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

8

คุณสามารถส่งต่อด้วยสร้างเป็นตัวสร้าง

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

        ),
        child: HomePage(),
    );

ขอบคุณสำหรับคำตอบ. แต่ฉันเลือก @Nuts 'คำตอบเพราะคำอธิบายของเขาชัดเจน
Dika

4

คุณสามารถใช้ "สร้าง" แทน "ตัวสร้าง"

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

}


โปรดลบคำตอบของคุณเนื่องจากคำตอบของคุณไม่ได้เพิ่มอะไรเลยในคำตอบที่มีอยู่ @Tabrizapps
Dika

1

แทนที่จะใช้พารามิเตอร์ตัวสร้างคุณสามารถใช้สร้างพารามิเตอร์กับผลิตภัณฑ์ ()หรือผลิตภัณฑ์เฉพาะที่ดัชนี

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

หรือสามารถใช้เป็นเวอร์ชันค่า:

itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
        value: products[i],
        child:  ProductItem(),
      ),
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.