【发布时间】:2021-06-03 11:52:50
【问题描述】:
我有一个 ChangeNotifier 正在从 Firebase Firestore 正确获取数据。但是,加载此数据时,我的 StatefulWidget 并未更新。我在这里做错了什么?
class MyViewModel with ChangeNotifier {
MyViewModel();
MyModel _myModel;
FirebaseRepository _firebaseRepository = FirebaseRepository();
void loadData(String userId) async {
_myModel =
await _firebaseRepository.getData(userId);
notifyListeners();
}
getModelName(){
return _myModel.name;
}
}
还有一个 ChangeNotifierProvider 设置在我的小部件树的顶层
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider(
create: (context) => MyViewModel(),
),
],
child: MaterialApp(
home: HomeWithBottomNav(title: 'Bottom Nav Home Page'),
routes: <String, WidgetBuilder>{
// define the routes
MyPage.routeName: (BuildContext context) => MyPage(),
}));
}
}
还有一个 StatefulWidget 正在尝试监听数据
class MyPage extends StatefulWidget {
static const String routeName = "/myPage";
@override
_State createState() => _State();
}
class _State extends State<MyPage> {
MyViewModel myViewModel =
new MyViewModel();
@override
void initState() {
myViewModel.loadData('userId');
super.initState();
}
@override
Widget build(BuildContext context) {
Provider.of<MyViewModel>(context);
return Consumer<MyViewModel>(
builder: (context, myViewModel, child) {
AppBar appBar = AppBar(
title: Text("Model Name: $myViewModel.getModelName()"), // This is not getting the data fetched from firestore
);
SingleChildScrollView singleChildScrollView = SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[],
),
);
Scaffold scaffold =
Scaffold(appBar: appBar, body: singleChildScrollView);
return scaffold;
},
);
}
}
【问题讨论】:
标签: flutter google-cloud-firestore flutter-provider