【发布时间】:2021-12-11 12:51:10
【问题描述】:
我正在尝试将我的所有列表实例从我的列表提供程序类传递到我的 home_creen,但数据在此过程中丢失了。我该如何解决这个问题?
这是我的 ListingProvider 类,我用它来调用我的 MongoDB 数据库。
class ListingProvider extends ChangeNotifier {
var url = Uri.parse('${Constants.apiUrl}listings/');
List<Listing> onDisplayListing = [];
ListingProvider() {
print("Listing Provider inicializado");
//this.getListing();
}
getListing(Token token) async {
var response = await http.get(
url,
headers: {
'content-type': 'application/json',
'accept': 'application/json',
'authorization': "Bearer ${token.token}"
},
);
final nowListingResponse = ListingResponse.fromJson(response.body);
onDisplayListing = nowListingResponse.results;
notifyListeners();
}
}
在使用 vscode 调试器时,我注意到我的:
onDisplayListing = nowListingResponse.results
像这样保存我的数据库数据的实例:
- [0] 列表 [1] 列表 [2] 列表 [3] 列表
到目前为止一切顺利。当我尝试在我的主屏幕中使用这些实例时,我的:
listingProvider.onDisplayListing
没有这些实例。
我的主屏幕
class HomePage extends StatefulWidget {
final Token token;
const HomePage({required this.token, Key? key}) : super(key: key);
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
@override
initState() {
super.initState();
ListingProvider().getListing(widget.token);
}
@override
Widget build(BuildContext context) {
final listingProvider = Provider.of<ListingProvider>(
context,
);
//when I try to print here my instances, they are empty. Why?
print(listingProvider.onDisplayListing);
return Scaffold(
appBar: AppBar(
title: const Text("Find Shipments"),
),
body: Center(
child: Text("Hola ${widget.token.user.name}!"),
),
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
MyHeaderDrawer(
token: widget.token,
),
myDrawerListOption(),
],
),
),
);
}
如果您还需要了解其他信息,请告诉我。
谢谢!!!
【问题讨论】:
-
可能你的数据输出有误。读这个。 Read this example 你需要使用 Consumer