首页 > 解决方案 > Flutter MultiProvider 或 ChangeNotifier 没有响应

问题描述

我主要使用 MultiProvider,如下所示:

@override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider(
          create: (context) => ReadPreferences(),
        ),
        ChangeNotifierProvider(
          create: (context) => ItemsCrud(),
        ),
      ],
      child: MaterialApp(
        initialRoute: initialPage,
        routes: {
          InitialScreen.screenId: (context) => InitialScreen(),
          HomeScreen.screenId: (context) => HomeScreen(),
          AddItemScreen.screenId: (context) => AddItemScreen(),
        },
      ),
    );
  }

但我的问题是它根本没有读取 ReadPreferences() 类文件中的内容,尽管它正常读取 ItemsCrud() 一个。

我的 ReadPreferences() 如下所示:

import 'package:flutter/foundation.dart'; //To use the "ChangeNotifier"
import 'package:shared_preferences/shared_preferences.dart'; //local store

class ReadPreferences extends ChangeNotifier {
  Future<SharedPreferences> _prefs = SharedPreferences.getInstance();

  //Constructor method
  ReadPreferences() {
    print('Please print this');

    getPreferences();
  }

  void getPreferences() async {
    final SharedPreferences prefs = await _prefs;
    print('print anything plz');
  }
}

它根本不会打印任何东西,我做错了什么?

标签: flutter

解决方案


是否在您的任何子小部件(屏幕)中使用了 ReadPreferences?您需要在子小部件中使用它,否则不会调用构造函数。像这样使用:

//your child widget build method
@override
  Widget build(BuildContext context) {
    ReadPreferences _dummyProvider = Provider.of<ReadPreferences>(context);
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
     .....
  }

推荐阅读