Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 供应商和消费者问题_Flutter_Dart_Provider - Fatal编程技术网

Flutter 供应商和消费者问题

Flutter 供应商和消费者问题,flutter,dart,provider,Flutter,Dart,Provider,我对Flatter还比较陌生,我正试图用provider软件包提升我的状态管理技能。我在加载类别和通知听众何时显示类别小部件而不是modalprogressHUD时遇到了一些困难 以下是MyApp类: class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeN

我对Flatter还比较陌生,我正试图用provider软件包提升我的状态管理技能。我在加载类别和通知听众何时显示类别小部件而不是modalprogressHUD时遇到了一些困难

以下是MyApp类:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<LoginProvider>(
          create: (_) => LoginProvider(),
        ),
        ChangeNotifierProvider<CatergoryProvider>(
          create: (_) => CatergoryProvider(),
        ),
        ChangeNotifierProvider<RegistrationProvider>(
          create: (_) => RegistrationProvider(),
        ),
        ChangeNotifierProvider<QuestionProvider>(
          create: (_) => QuestionProvider(),
        ),
      ],
      child: MaterialApp(
        title: 'Flutter Demo',
        debugShowCheckedModeBanner: false,
        theme: ThemeData.dark().copyWith(
          primaryColor: Colors.teal,
        ),
        initialRoute: DashBoard.id,
        routes: {
          WelcomeScreen.id: (context) => WelcomeScreen(),
          DashBoard.id: (context) => DashBoard(),
          QuizzPage.id: (context) => QuizzPage()
        },
      ),
    );
  }
}
发生的异常:

Exception has occurred.
FlutterError (A CatergoryProvider was used after being disposed.
Once you have called dispose() on a CatergoryProvider, it can no longer be used.)

在您的消费者上,在
builder:
内调用
fetchCatergory
,在
fetchCatergory
内调用调用
notifyListeners()
的方法调用函数,每次调用
notifyListeners()
,就会调用
builder:
,导致无限循环

仅当
getList()
返回null且
isLoading()
为false时,才尝试包装
catergory.fetchCatergory()

代码:

消费者(
生成器:(上下文、类别、子级){
如果(!catergory.isLoading()&&catergory.getList()==null){
catergory.fetchCatergory();
}
catergories=catergory.getList();
return catergory.isLoading()
?ModalProgressHUD(
不透明度:0,
inAsyncCall:
Provider.of(context.isLoading(),
子:Scaffold())
: 
类别页面(类别、上下文);
},
),

在消费者内部
builder:
调用
fetchCatergory
,在
fetchCatergory
内部调用调用
notifyListeners()
的方法调用函数,每次调用
notifyListeners()
,就会调用
builder:
,导致无限循环

仅当
getList()
返回null且
isLoading()
为false时,才尝试包装
catergory.fetchCatergory()

代码:

消费者(
生成器:(上下文、类别、子级){
如果(!catergory.isLoading()&&catergory.getList()==null){
catergory.fetchCatergory();
}
catergories=catergory.getList();
return catergory.isLoading()
?ModalProgressHUD(
不透明度:0,
inAsyncCall:
Provider.of(context.isLoading(),
子:Scaffold())
: 
类别页面(类别、上下文);
},
),

有效谢谢你,我怎么会收到图书馆调用的另一个异常。这与生成期间调用的setState()或markNeedsBuild()有关。它是在catergoryprovider类的setLoading方法中被捕获的,还说这个有问题的调用是在consumerworks中进行的谢谢,我是如何收到库调用的另一个异常的。这与生成期间调用的setState()或markNeedsBuild()有关。catergoryprovider类中的setLoading方法中捕获了它,并且还表示该违规调用是在消费者中进行的
  Consumer<CatergoryProvider>(
    builder: (context, catergory, child) {
      catergory.fetchCatergory();
      catergories = catergory.getList();
      return catergory.isLoading()
          ? ModalProgressHUD(
              opacity: 0,
              inAsyncCall:
                  Provider.of<CatergoryProvider>(context).isLoading(),
              child: Scaffold())
          : catergoryPage(catergories, context);
    },
  ),
════════ Exception caught by foundation library ════════════════════════════════
setState() or markNeedsBuild() called during build.
════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by foundation library ════════════════════════════════
setState() or markNeedsBuild() called during build.
════════════════════════════════════════════════════════════════════════════════
Exception has occurred.
FlutterError (A CatergoryProvider was used after being disposed.
Once you have called dispose() on a CatergoryProvider, it can no longer be used.)
Consumer<CatergoryProvider>(     
    builder: (context, catergory, child) {
        if(!catergory.isLoading() && catergory.getList() == null) {      
            catergory.fetchCatergory();
        }
        catergories = catergory.getList();
        return catergory.isLoading()
            ? ModalProgressHUD(
            opacity: 0,
        inAsyncCall:
            Provider.of<CatergoryProvider>(context).isLoading(),
            child: Scaffold())
        : 
        catergoryPage(catergories, context);
   },
),