【发布时间】:2021-03-26 17:03:20
【问题描述】:
当未来在屏幕 1 中有数据时,我正在尝试向屏幕添加一个小部件。
class UserChoiceBooks extends StatelessWidget {
final String title;
UserChoiceBooks({Key key, this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Provider.of<Books>(context, listen: false)
.getRecommendedBooks("test"),
builder: (ctx, snapshot) {
// Checking if future is resolved
if (snapshot.connectionState == ConnectionState.done) {
// If we got an error
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occured',
style: TextStyle(fontSize: 18),
),
);
// if we got our data
} else if (snapshot.hasData) {
// Extracting data from snapshot object
final List<Book> recommendedBooksML = snapshot.data;
return BookList(title, recommendedBooksML);
} else {
return SizedBox.shrink();
}
} else {
return Container();
}
}
// ... some code here
);
}
}
我导航到另一个屏幕屏幕 2。 然后回到屏幕 1。我释放了未来的数据,它再次开始构建。
PS:我通过将 Future 数据存储在全局变量中找到了一个临时解决方法
List<Book> placeholder=[];
然后设置未来的值...placeholder=snapshot.data;
在屏幕 1 和 2 之间切换时。我正在检查
placeholder==[]?UserChoiceBooks (title):BookList(title,placeholder)
有没有一种更好的方法来保存数据,以便在屏幕未来值之间切换不会丢失?
【问题讨论】:
标签: flutter flutter-futurebuilder