簡體   English   中英

Flutter MultiProvider 或 ChangeNotifier 沒有響應

[英]Flutter MultiProvider or ChangeNotifier doesn't response

我主要使用 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() class 文件中的內容,盡管它正常讀取 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');
  }
}

它根本不會打印任何東西,我做錯了什么?

是否在您的任何子小部件(屏幕)中使用了 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),
      ),
     .....
  }

我剛剛對此進行了測試並創建了一個測試按鈕,以便它創建一個實例並在 onPressed 中觸發該方法:

FlatButton(
              child: Text('Provider Test'),
              onPressed: () {
                final readProvider =
                    Provider.of<ReadPreferences>(context, listen: false);
                readProvider.getPreferences();
              },
            ),

第一次嘗試時出現錯誤: MissingPluginException (MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences))

然后我運行flutter clean然后flutter pub get然后冷啟動應用程序,它工作正常。

當我按下按鈕時,我看到了兩個打印語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM