calintamas / react-native-toast-message

Animated toast message component for React Native
MIT License
1.62k stars 255 forks source link

how to use with expo app routes? #483

Open wallacerenan opened 11 months ago

wallacerenan commented 11 months ago

How to use with expo app routes?

rbpolim commented 11 months ago

Same here

How can I wrap the Toast component like a provider?

felipe-bergamaschi commented 11 months ago

@wallacerenan @rbpolim

You need to create a _layout file in the root of your project and add the component to it. example:

 // _layout.tsx
 import { Stack } from 'expo-router';
import Toast from 'react-native-toast-message';

export default function Layout() {
  return (
    <>
      <Stack />

      <Toast />
    </>
  )
}
ShaneKeney commented 10 months ago

@felipe-bergamaschi I am doing the above in my root _layout.tsx. However, one behavior I am seeing that wasn't an issue before is the Toast message when triggered is showing behind screen modals instead of showing above them.

e.g. of a nested navigator _layout.tsx:

    <Stack screenOptions={{ headerShown: false, gestureEnabled: false }}>
      <Stack.Screen name="ideaMachine" />
      <Stack.Screen name="editName" options={{ presentation: 'modal' }} />
      <Stack.Screen name="editMood" options={{ presentation: 'modal' }} />
      <Stack.Screen name="editInterest" options={{ presentation: 'modal' }} />
      <Stack.Screen name="ideaDetails" options={{ presentation: 'modal' }} />
      <Stack.Screen name="editGroup" options={{ presentation: 'modal' }} />
      <Stack.Screen name="addPeople" options={{ presentation: 'modal', gestureEnabled: true }} />
      <Stack.Screen name="addGroup" options={{ presentation: 'modal' }} />
      <Stack.Screen name="addGroupPeople" options={{ presentation: 'modal' }} />
      <Stack.Screen name="addGroupPeopleQR" options={{ presentation: 'modal' }} />
    </Stack>

ideaMachine in the Stack Navigator is a Tab Navigator with 3 Tabs.

Have you seen this issue at all or maybe I'm missing something here?

felipe-bergamaschi commented 10 months ago

@ShaneKeney In the documentation, it states that the Toast should be the last component of your application, as in the quote below.

Render the Toast component in your app's entry file, as the LAST CHILD in the View hierarchy (along with any other components that might be rendered there):

// app/_layout.tsx
import Toast from 'react-native-toast-message';
import { Stack } from 'expo-router';

export default function Layout(props) {
  return (
    <>
      <Stack>
        {/* ... */}
      </Stack>

      <Toast />
    </>
  );
}

I had tested this previously, and indeed, when the Toast component is above, this issue occurs. However, when it is the last component, the operation is normal.

ShaneKeney commented 10 months ago

@felipe-bergamaschi Cool and thank you. I'll test that out. I did find a workaround from scanning the changelog where I can put the same Toast component in the Modal Screen Component itself and everything works as expected. I'd much rather keep things dry and only need to specify it once.

huanghanzhilian commented 5 months ago

@ShaneKeney In the documentation, it states that the Toast should be the last component of your application, as in the quote below.

Render the Toast component in your app's entry file, as the LAST CHILD in the View hierarchy (along with any other components that might be rendered there):

// app/_layout.tsx
import Toast from 'react-native-toast-message';
import { Stack } from 'expo-router';

export default function Layout(props) {
  return (
    <>
      <Stack>
        {/* ... */}
      </Stack>

      <Toast />
    </>
  );
}

I had tested this previously, and indeed, when the Toast component is above, this issue occurs. However, when it is the last component, the operation is normal.

Thanks, here you helped me with my project: https://github.com/huanghanzhilian/c-shopping-rn