react native material ui date time picker error: Invariant Violation

Viewed 19

I want to incorporate the MaterialUI date-time-pickers into my MERN project and to test the waters I just want to render the JS example (not typescript) from the "Getting-Started" section of the MaterialUI website: https://mui.com/x/react-date-pickers/getting-started/. I have an App.js file where my routing, screens and providers are located. I want to render the example on my CountdownScreen.js file. I assumed that I would need to wrap my screens in the LocalizationProvider component in my App.js file as opposed to wrapping the pickers like how the example shows but I tried both ways and it didn't seem to help. I'm getting the following error:

Invariant Violation: View config getter callback for component style must be a function (received undefined). Make sure to start component names with a capital letter.

MaterialUI has changed their syntax (https://mui.com/material-ui/guides/pickers-migration/) so its hard to find new tutorials that don't use the deprecated code. I don't get what I'm doing wrong. I may have downloaded too many conflicting dependencies but I'm not sure which one is the culprit. Thank you in advance. Also, if I didn't want to use MaterialUI are there any other decent date/time pickers out there?

Below is my CountdownScreen.js code:

import React from "react";
import { View, StyleSheet } from "react-native";
import dayjs from "dayjs";
import Stack from "@mui/material/Stack";
import TextField from "@mui/material/TextField";
import { LocalizationProvider } from "@mui/x-date-pickers/LocalizationProvider";
import { AdapterDayjs } from "@mui/x-date-pickers/AdapterDayjs";
import { TimePicker } from "@mui/x-date-pickers/TimePicker";
import { DateTimePicker } from "@mui/x-date-pickers/DateTimePicker";
import { DesktopDatePicker } from "@mui/x-date-pickers/DesktopDatePicker";
import { MobileDatePicker } from "@mui/x-date-pickers/MobileDatePicker";

const CountdownScreen = () => {
  const [value, setValue] = React.useState(dayjs("2014-08-18T21:11:54"));

  const handleChange = (newValue) => {
    setValue(newValue);
  };

  return (
    <View>
      <LocalizationProvider dateAdapter={AdapterDayjs}>
        <Stack spacing={3}>
          <DesktopDatePicker
            label="Date desktop"
            inputFormat="MM/DD/YYYY"
            value={value}
            onChange={handleChange}
            renderInput={(params) => <TextField {...params} />}
          />
          <MobileDatePicker
            label="Date mobile"
            inputFormat="MM/DD/YYYY"
            value={value}
            onChange={handleChange}
            renderInput={(params) => <TextField {...params} />}
          />
          <TimePicker
            label="Time"
            value={value}
            onChange={handleChange}
            renderInput={(params) => <TextField {...params} />}
          />
          <DateTimePicker
            label="Date and Time picker"
            value={value}
            onChange={handleChange}
            renderInput={(params) => <TextField {...params} />}
          />
        </Stack>
      </LocalizationProvider>
    </View>
  );
};

CountdownScreen.navigationOptions = { title: "Countdown" };

const styles = StyleSheet.create({
  countdownScreenStyle: {
    flex: 1,
    alignItems: "center",
    justifyContent: "center",
    backgroundColor: "rgba(232, 180, 68, 1.0)",
    height: "100%",
    width: "100%",
    flex: 1,
  },
});

export default CountdownScreen;

Below is my App.js:

import * as React from "react";
import { NavigationContainer, useIsFocused } from "@react-navigation/native";
import { createStackNavigator } from "@react-navigation/stack";
import { createNativeStackNavigator } from "@react-navigation/native-stack";
import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
import { SafeAreaProvider, SafeAreaView } from "react-native-safe-area-context";

//https://mui.com/material-ui/guides/pickers-migration/

import HomeScreen from "./src/screens/HomeScreen";
import CountdownScreen from "./src/screens/CountdownScreen";
import WeatherScreen from "./src/screens/WeatherScreen";
import MusicScreen from "./src/screens/MusicScreen";
import SettingsScreen from "./src/screens/SettingsScreen";

import { Ionicons } from "@expo/vector-icons";

const Tab = createBottomTabNavigator();

export default function App() {
  return (
    <SafeAreaProvider>
        <NavigationContainer>
          <Tab.Navigator
            screenOptions={({ route }) => ({
              tabBarIcon: ({ focused, color, size }) => {
                let iconName;

                if (route.name === "Home") {
                  iconName = focused ? "home" : "home-outline";
                } else if (route.name === "Countdown") {
                  iconName = focused ? "timer" : "timer-outline";
                } else if (route.name === "Weather") {
                  iconName = focused ? "partly-sunny" : "partly-sunny-outline";
                } else if (route.name === "Music") {
                  iconName = focused
                    ? "musical-notes"
                    : "musical-notes-outline";
                } else if (route.name === "Settings") {
                  iconName = focused ? "settings" : "settings-outline";
                }
                return <Ionicons name={iconName} size={size} color={color} />;
              },

              tabBarActiveTintColor: "tomato",
              tabBarInactiveTintColor: "gray",
            })}
          >
            <Tab.Screen name="Home" component={HomeScreen} />
            <Tab.Screen name="Countdown" component={CountdownScreen} />
            <Tab.Screen name="Weather" component={WeatherScreen} />
            <Tab.Screen name="Music" component={MusicScreen} />
            <Tab.Screen name="Settings" component={SettingsScreen} />

          </Tab.Navigator>
        </NavigationContainer>
    </SafeAreaProvider>
  );
}

Below is my package.json file:

{
  "name": "countdown-hound",
  "version": "1.0.0",
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "@date-io/date-fns": "^1.3.13",
    "@emotion/react": "^11.10.4",
    "@emotion/styled": "^11.10.4",
    "@material-ui/core": "^5.0.0-beta.5",
    "@material-ui/lab": "^5.0.0-alpha.44",
    "@mui/icons-material": "^5.10.6",
    "@mui/lab": "^5.0.0-alpha.100",
    "@mui/material": "^5.10.6",
    "@mui/x-date-pickers": "^5.0.3",
    "@react-native-community/datetimepicker": "^6.3.2",
    "@react-navigation/bottom-tabs": "^6.3.3",
    "@react-navigation/drawer": "^6.4.4",
    "@react-navigation/native": "^6.0.12",
    "@react-navigation/native-stack": "^6.8.0",
    "@react-navigation/stack": "^6.2.3",
    "@rneui/base": "^4.0.0-rc.6",
    "@rneui/themed": "^4.0.0-rc.6",
    "axios": "^0.27.2",
    "date-fns": "^2.29.3",
    "dayjs": "^1.11.5",
    "expo": "~46.0.9",
    "expo-location": "~14.3.0",
    "expo-secure-store": "^11.3.0",
    "expo-status-bar": "~1.4.0",
    "material-ui": "^0.20.2",
    "moment": "^2.29.4",
    "react": "18.0.0",
    "react-css-transition-replace": "^4.0.5",
    "react-dom": "^18.2.0",
    "react-native": "0.69.5",
    "react-native-gesture-handler": "~2.5.0",
    "react-native-localize": "^2.2.3",
    "react-native-maps": "^1.3.1",
    "react-native-reanimated": "^2.9.1",
    "react-native-safe-area-context": "^4.3.1",
    "react-native-screens": "~3.15.0",
    "react-native-segmented-control": "^1.1.0",
    "react-native-windows": "^0.69.6",
    "react-navigation": "^4.4.4",
    "react-time-picker-input": "^2.0.10"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9"
  },
  "private": true
}
0 Answers
Related