我正在使用 expo 构建一个食品储藏室服务应用程序,我正在从节点储藏室服务器获取项目列表,然后使用 Flatlist 在应用程序上呈现它们。
- 一切都按预期工作,除了一件事,那就是方向改变时的平面列表渲染。
- 使用 expo 应用程序进行测试时,即使方向发生变化,它也能完美运行。
- 问题:在构建 android apk 并在设备 flatlist 上对其进行测试时,不再按预期呈现,例如:
-> 在纵向模式下启动应用程序时,您可以一直滚动到底部,但是当您旋转设备时,我无法一直滚动到底部,或者似乎可以,但其余项目似乎是剪裁超出设备显示边框。
-> 相反,当我以横向模式启动应用程序时,我可以毫无问题地滚动到底部,但是当我将方向更改为纵向时,平面列表仅在屏幕中间呈现,我仍然能够滚动到结束它。
我尝试传递给 extraData 以及将 flexgrow 添加到 contentContainerStyle,我也尝试使用 ScrollView 而不是 View,但没有明显的改进。
const [refreshing,setRefreshing] = useState(false)
ScreenOrientation.addOrientationChangeListener(
evt => {
setCurrOrientation(evt.orientationInfo.orientation)
setRefreshing(!refreshing)
}
)
ScreenOrientation.getOrientationAsync().then(result => setCurrOrientation(result.orientation))
keyExtractor = (item, index) => index.toString()
renderItem = ({ item,index }) => (
<ListItem
key={index}
leftAvatar={{ source: { uri: BASE_URL + ':' + PORT + '/uploads/' + item.rowid + '/image.png' } }}
title={<Text style={{ fontFamily: 'fake-receipt' }}>{item.item_name}</Text>}
subtitle={<Text style={{ fontFamily: 'fake-receipt', color: 'grey', fontSize: 10 }}>{item.item_type}</Text>}
containerStyle={{ borderBottomColor: '#F0F0F0', borderBottomWidth: 1, borderBottomStartRadius: 10, borderTopStartRadius: 10 }}
onPress={() => {
setSelectedItemIndex(index);
setSelectedItemRowID(item.rowid);
setSelectedItemSugarCondition(item.sugar === 'yes' ? 'yes' : 'no');
setOverlayVisible(true);
}}
rightIcon={<IconFA name={'plus'}
size={20}
color='#26a69a'
/>}
/>
)
<View>
<FlatList
contentContainerStyle={{ flexGrow: 1 }}
extraData={refreshing}
keyExtractor={this.keyExtractor}
data={itemsList}
renderItem={this.renderItem}
/>
</View>
它让我感到困惑,它在 expo 应用程序中如何正常工作,但在 expo android 版本中却没有,有什么想法可以解决这个问题,或者是否有更好的选择?
我正在使用 expo 3.0.10 并且设备正在运行 Android 9 Pie