react-native - React-native BottomTab 导航器中的进度对话框
问题描述
我正在对我的应用程序使用 react-native createbottomtab 导航器。这里我有 4 个选项卡,1.Home,2.Profile 3.Sync 和 4.Settings。在这里,我在单击“同步”选项卡时显示了警报框。除了同步选项卡,我使用了屏幕(类组件)。但是在同步中我不想导航到屏幕所以我在这里使用了功能我需要显示进度对话框以单击同步警报确定按钮。但我面临的问题是在功能中我无法使用“进度”对话框。任何人都可以帮助我如何在带有底部标签的 react-native 中做到这一点。
// SyncScreen.js
import { Alert } from 'react-native';
export default function SyncScreen() {
Alert.alert("Information", "Do you want to Sync ", [
{
text: "Cancel",
onPress: () => {
console.log("Cancel Pressed");
}
},
{
text: "OK",
onPress: () => {
//Here i need to show the progress bar
}
}
]);
}
export default const LoggedInNavigator = createBottomTabNavigator(
{
Home: {
screen: HomeStack
},
Profile: {
screen: ProfileStack
},
Sync: {
screen: () => null,
navigationOptions: {
title: "Sync",
tabBarOnPress: () => {
{
SyncScreen();
}
}
}
},
Settings: {
screen: SettingsStack,
navigationOptions: {
title: "Setting"
}
}
},
{
navigationOptions: ({ navigation }) => ({
tabBarOptions: {
activeTintColor: "#0A3D6A",
inactiveTintColor: "gray"
}
})
}
);
解决方案
解决您的问题的唯一想法是导航到 SyncScreen 并在进度条完成时导航回来。
像这样的东西:
// SyncScreen.js
import { Alert } from 'react-native';
import * as Progress from 'react-native-progress';
export default function SyncScreen({navigation}) {
const [progressBarValue, setProgressBarValue] = useState(null);
useEffect(() => {
if (progressBarValue >== 1) {
// full progressBar, goBack to privious screen
navigation.navigate.goBack();
}
}, [progressBarValue])
useEffect(() => {
Alert.alert("Information", "Do you want to Sync ", [
{
text: "Cancel",
onPress: () => {
console.log("Cancel Pressed");
navigation.navigate.goBack();
}
},
{
text: "OK",
onPress: () => {
setProgressBarValue(0)
setInterval(() => {
setProgressBarValue(prevValue => prevValue + 0.1)
}, 500);
}
}
]);
}, [])
return null !== progressBarValue ? <Progress.Bar progress={progressBarValue} width={200} /> : null;
}
export default const LoggedInNavigator = createBottomTabNavigator(
{
Home: {
screen: HomeStack
},
Profile: {
screen: ProfileStack
},
Sync: {
screen: () => SyncScreen,
navigationOptions: {
title: "Sync"
}
},
Settings: {
screen: SettingsStack,
navigationOptions: {
title: "Setting"
}
}
},
{
navigationOptions: ({ navigation }) => ({
tabBarOptions: {
activeTintColor: "#0A3D6A",
inactiveTintColor: "gray"
}
})
}
);
推荐阅读
- php - Atom-beautify 不加载 php-cs-fixer 自定义配置
- c++ - 当 \n 或 \r 位于行尾时,std::regex 找不到文本
- date - Teradata 向时间戳添加大量分钟会导致溢出
- lisp - 阅读器级别的 Common Lisp 调试
- r - RMarkDown - 带有条件的 kable 中的符号 *
- c# - 从pdf文档中提取图像
- aws-lambda - 在 AWS lambda Web 控制台上测试 Apollo graphql 查询
- tinymce - TinyMCE v5 - 对话框中的 iframe
- r - R - 使用 purrr 将列表列表中的 NULL 元素替换为 NA
- c# - 修复后的 C# 内存和垃圾收集器