[英]Flutter - MultiProvider (ChangeNotifierProvider) doesn't work
[英]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.