React Native Native Java/Android Module - не отображается тостовое сообщение

Я использую пример, найденный здесь, и в настоящее время сталкиваюсь с проблемой, когда тост вообще не отображается... У меня просто начальное "Welcome to React Native!" экран в эмуляторе. Моя структура приложения выглядит следующим образом:

testApp
  android
    app
      src
        main
          java
            com
              testApp
                CustomToastPackage.java
                MainActivity.java
                MainApplication.java
                ToastModule.java              
          res
          assets
            index.android.bundle
          AndroidManifest.xml
  ios
  node_modules
  app.json
  App.js
  index.js
  package.json
  ToastExample.js
  yarn.lock

Мой index.js

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';

import {NativeModules} from 'react-native'; //Added this

module.exports = NativeModules.testApp; //Added this

AppRegistry.registerComponent(appName, () => App);

Мой App.js

import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';

import ToastExample from './ToastExample'; //Added this

const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' + 'Cmd+D or shake for dev menu',
  android:
    'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

type Props = {};
export default class App extends Component<Props> {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>Welcome to React Native!</Text>
        <Text style={styles.instructions}>To get started, edit App.js</Text>
    <Text style={styles.instructions}>{instructions}</Text>
  </View>
);
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
  },
  instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
  },
});

Как вы можете видеть из структуры файла, я создал дополнительный файл с именем ToastExample.js, который содержит следующую информацию, основанную на ответе, найденном здесь.

import {NativeModules} from 'react-native';
module.exports = NativeModules.ToastExample;

Название пакета просто

com.testapp

Я не могу понять, почему тост никогда не показывает? Я знаю, что реакция идет с поддержкой тостов, но я собираюсь опираться на первоначальный пример для включения более продвинутого кода Java/Android...

2 ответа

Попробуй это:

<Root>
<View style={styles.container}>
        <Text style={styles.welcome}>Welcome to React Native!</Text>
        <Text style={styles.instructions}>To get started, edit App.js</Text>
    <Text style={styles.instructions}>{instructions}</Text>
  </View>
</Root>

просто импортируй Root чтобы реагировать нативно

В вашем примере вы не добавили ToastExample в index.js вам нужно добавить это в метод рендеринга в index.js, как показано ниже.

return(
    <ToastExample/>
)

В дополнение к этому, вы собираетесь создать собственный модуль Android, который можно использовать только для Android. Но, с моей точки зрения, вы можете использовать модуль toast messages, который может использоваться как в Android, так и в Ios. В противном случае вам нужно создать базовый модуль ios base для создания тоста для ios. Если вы не хотите использовать базовую реализацию ios, можно использовать этот собственный модуль. Но вы блокируете свое развертывание Ios им.

Я хотел бы предложить этот простой для вас https://github.com/crazycodeboy/react-native-easy-toast. Он будет работать на устройствах Android и IOS. Вы также можете настроить его как Android-тост. Это легко реализовать в вашем приложении.

Спасибо @Ariel & @Lucefer за отзыв, я сделал предложенное вами обновление, но столкнулся с другой ошибкой. Публикация этого ответа поможет вам избежать потенциальной головной боли, вызванной использованием Android Studio в качестве IDE с React Native. Оказывается, файл MainApplication.java имел 2 элемента (импорт CustomToastPackage и ReactPackage) серым цветом и никогда не мог понять, почему? Смотрите скриншот ниже

Я создал отдельное приложение (response-native init newapp) и использовал простой текстовый редактор (Atom или gedit сделают вместо Android Studio), чтобы внести изменения, и пример теперь работает отлично.

Другие вопросы по тегам