Как отключить Snackbar, когда пользователь нажимает на экран в реагировать на родной бумаге
Я разрабатываю мобильное приложение с реактивной и реактивной бумагой. И у меня проблема с Snackbar
компонент предоставлен реактивно-родной бумагой. Как сделать снек-бар скрытым, когда пользователь где-нибудь касается?
Это GIF, я пытался нажать много, когда закусочная находится в нижней части экрана. Я бы хотел, чтобы это скрывалось при касании экрана.
https://gyazo.com/a279a5e9a1b8270e7303446d20c238dc
Это мой код
import React, { Component } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import { Provider, Snackbar } from 'react-native-paper';
export default class MainScreen extends Component {
constructor(props) {
super(props);
this.state = {
visible: true,
};
this.onDismissSnack = this.onDismissSnack.bind(this);
}
onDismissSnack() {
this.setState({
visible: false
})
}
render() {
return (
<Provider>
<Snackbar
visible={this.state.visible}
onDismiss={() => this.onDismissSnack()}>
<Text>Hello Snackbar</Text>
</Snackbar>
</Provider>
)
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
flexDirection: 'row',
justifyContent: 'center',
alignItems: 'center'
}
});
1 ответ
Согласно <SnackBar/>
документы у вас есть опора называется action
с помощью позволяет вам добавить метку, которую вы хотите, в данном случае, Dismiss.
Проверьте закуски, которые я создал: https://snack.expo.io/@abranhe/snackbar-rn-paper
import React, { useState } from 'react';
import { View, Text, Button } from 'react-native';
import { Snackbar } from 'react-native-paper';
export default () => {
const [visible, setVisible] = useState(false);
return (
<View style={{ flex: 1, justifyContent: 'center' }}>
<Button title="Show SnackBar" onPress={() => setVisible(true)} />
<Snackbar
visible={visible}
onDismiss={() => setVisible(false)}
action={{
label: 'Dismiss',
onPress: () => setVisible(false),
}}>
<Text>Hello Snackbar</Text>
</Snackbar>
</View>
);
};
ОБНОВЛЕНИЕ после запроса автора вопроса
Чтобы иметь возможность отклонить, вы можете поместить компонент в модальное, как это:
import React, { useState } from 'react';
import {
View,
Text,
Button,
Modal,
StyleSheet,
TouchableWithoutFeedback,
} from 'react-native';
import { Snackbar } from 'react-native-paper';
export default () => {
const [visible, setVisible] = useState(true);
return (
<View style={styles.container}>
<Button title="Show SnackBar" onPress={() => setVisible(true)} />
<Modal
transparent={!visible}
visible={visible}
onRequestClose={() => setVisible(false)}>
<TouchableWithoutFeedback onPress={() => setVisible(false)}>
<View style={styles.modal}>
<Snackbar visible={visible}>
<Text>Hello Snackbar</Text>
</Snackbar>
</View>
</TouchableWithoutFeedback>
</Modal>
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
},
modal: {
width: '100%',
height: '100%',
position: 'relative',
},
});
Обходной прием закуски https://snack.expo.io/@abranhe/workaround-snackbar, на мой взгляд, вы должны использовать кнопку отклонения, намного проще.