A set of components that allow you to build UIs directly with SwiftUI and Jetpack Compose from React.
Android
iOS
Bundled version:
~0.1.1-alpha.7
This library is currently in alpha and will frequently experience breaking changes. It is not available in the Expo Go app – use development builds to try it out.
@expo/ui
is a set of native input components that allows you to build fully native interfaces with SwiftUI and Jetpack Compose. It aims to provide the commonly used features and components that a typical app will need.
Installation
Terminal
-Â
npx expo install @expo/ui
If you are installing this in an existing React Native app, make sure to install expo
in your project.
Swift UI examples
BottomSheet
import { BottomSheet } from '@expo/ui/swift-ui';
<BottomSheet isOpen={isOpen} onIsOpenedChange={e => setIsOpened(e)}>
<Text>Hello, world!</Text>
</BottomSheet>
Button
import { Button } from '@expo/ui/swift-ui';
<Button
style={{ flex: 1 }}
onPress={() => {
setEditingProfile(true);
}}>
Edit profile
</Button>
ColorPicker component
import { ColorPicker } from '@expo/ui/swift-ui';
<ColorPicker
label="Select a color"
selection={color}
onValueChanged={setColor}
style={{ width: 400, height: 200 }}
/>
DateTimePicker
import { DateTimePicker } from '@expo/ui/swift-ui';
<DateTimePicker
onDateSelected={date => {
setSelectedDate(date);
}}
displayedComponents='date'
initialDate={selectedDate.toISOString()}
variant='wheel'
/>
Gauge
import { Gauge } from "@expo/ui/swift-ui";
<Gauge
max={{ value: 1, label: '1' }}
min={{ value: 0, label: '0' }}
current={{ value: 0.5 }}
color={[
PlatformColor('systemRed'),
PlatformColor('systemOrange'),
PlatformColor('systemYellow'),
PlatformColor('systemGreen'),
]}
type="circular"
/>
LinearProgress
import { LinearProgress } from '@expo/ui/swift-ui';
<LinearProgress progress={0.5} style={{ width: 300 }} />
Picker (segmented)
import { Picker } from '@expo/ui/swift-ui';
<Picker
options={['$', '$$', '$$$', '$$$$']}
selectedIndex={selectedIndex}
onOptionSelected={({ nativeEvent: { index } }) => {
setSelectedIndex(index);
}}
/>
Picker (wheel)
import { Picker } from '@expo/ui/swift-ui';
<Picker
options={['$', '$$', '$$$', '$$$$']}
selectedIndex={selectedIndex}
onOptionSelected={({ nativeEvent: { index } }) => {
setSelectedIndex(index);
}}
variant="wheel"
style={{
height: 100,
}}
/>
Switch
import { Switch } from '@expo/ui/swift-ui';
<Switch
checked={checked}
onValueChange={checked => {
setChecked(checked);
}}
label="Play music"
/>
Switch component (checkbox)
import { Switch } from '@expo/ui/swift-ui';
<Switch
checked={checked}
onValueChange={checked => {
setChecked(checked);
}}
label="Play music"
variant="checkbox"
/>
TextInput component
import { TextInput } from '@expo/ui/swift-ui';
<TextInput autocorrection={false} defaultValue="A single line text input" onChangeText={setValue} />
Jetpack Compose examples
Button
import { Button } from '@expo/ui/jetpack-compose';
<Button
style={{ flex: 1 }}
onPress={() => {
setEditingProfile(true);
}}>
Edit profile
</Button>
DateTimePicker
import { DateTimePicker } from '@expo/ui/jetpack-compose';
<DateTimePicker
onDateSelected={date => {
setSelectedDate(date);
}}
displayedComponents='date'
initialDate={selectedDate.toISOString()}
variant='picker'
/>
Picker
import { Picker } from '@expo/ui/jetpack-compose';
<Picker
options={['$', '$$', '$$$', '$$$$']}
selectedIndex={selectedIndex}
onOptionSelected={({ nativeEvent: { index } }) => {
setSelectedIndex(index);
}}
/>
TextInput
import { TextInput } from '@expo/ui/jetpack-compose';
<TextInput autocorrection={false} defaultValue="A single line text input" onChangeText={setValue} />
API
Full documentation is not yet available. Use TypeScript types to explore the API.
// Import from the SwiftUI package
import { BottomSheet } from '@expo/ui/swift-ui';
// Import from the Jetpack Compose package
import { Button } from '@expo/ui/jetpack-compose';