【发布时间】:2021-04-23 16:31:54
【问题描述】:
我是一名新的颤振开发人员,我在通过上下文传递提供者时遇到了问题。
如果我理解正确,可以使用以下方式通过上下文传递提供程序:
Provider.of<DataModel>(context);
错误是:“在此 PageMain Widget 上方找不到正确的 Provider”
我正在使用我的小部件树顶部的 ChangeNotifierProvider,因此任何小部件都可以访问 DataModel 类,目的是使其成为一种充当主题的单例。
return ChangeNotifierProvider<DataModel>(
create: (context) => DataModel(),
builder: (context, dataModel){
return PageSplash();
}
然后,我在 PageSplash(); 中有这个函数; 在对用户进行身份验证后调用它。 在其中,我将上下文与用户的详细信息一起传递。
void _showNextPage(User user) {
PageShower.replaceWithMainPage(context, user, AppData.instance.user);
}
replaceWithMainPage 是一个 util 函数,写法如下:
static void replaceWithMainPage(BuildContext context, User user, RMUser receetMeUser) {
if (Platform.isAndroid) {
Navigator.of(context).pushReplacement(
MaterialPageRoute(
builder: (context) => PageMain(
firebaseUser: user,
receetMeUser: receetMeUser,
),
),
);
} else {
Navigator.of(context).pushReplacement(
CupertinoPageRoute(
builder: (context) => PageMain(
firebaseUser: user,
receetMeUser: receetMeUser,
),
),
);
}
}
我正在尝试访问我在页面启动画面中注入的提供程序,如下所示:
Provider.of<DataModel>(context);
数据模型代码:
import 'package:flutter/material.dart';
class DataModel with ChangeNotifier{
bool _isLoading = true;
bool _isSearching = true;
String _version = "";
String _buildNumber = "";
set buildNumber(String value){
_buildNumber = value;
notifyListeners();
}
get buildNumber => _buildNumber;
set version(String value){
_version = value;
notifyListeners();
}
get version => _version;
set isLoading(bool value){
_isLoading = value;
notifyListeners();
}
get isLoading => _isLoading;
set isSearching(bool value){
_isSearching = value;
notifyListeners();
}
get isSearching => _isSearching;
}
【问题讨论】:
-
发布您的
DataModel内容 -
@dm_tr 据我了解,我可以使用 Builder 方法,而不是将那部分代码分离到不同的独立小部件树,以便它为我提供父级的上下文,这应该导致完全相同的行为。