Native vs. Cross-Platform Mobile Entwicklung
Plattformspezifische native Entwicklung oder Cross-Platform-Frameworks wie Flutter/React Native? Eine umfassende Bewertung dieser Architekturentscheidung in all ihren Facetten.
Pixelgenaue plattformübergreifende UI auf Skia-/Impeller-Basis
Native Komponenten mit JavaScript/TypeScript — vertraut für Web-Entwickler
| Kategorie | Flutter | React Native |
|---|---|---|
| Performance | 9/10 | 7/10 |
| Erlernbarkeit | 7/10 | 9/10 |
| Ökosystem | 8/10 | 9/10 |
| Community | 8/10 | 9/10 |
| Arbeitsmarkt | 8/10 | 9/10 |
| Zukunftssicherheit | 9/10 | 8/10 |
// Flutter – animierte Produktkarte
import 'package:flutter/material.dart';
class ProductCard extends StatefulWidget {
final String productName;
final double price;
final String imageUrl;
const ProductCard({
super.key,
required this.productName,
required this.price,
required this.imageUrl,
});
@override
State<ProductCard> createState() => _ProductCardState();
}
class _ProductCardState extends State<ProductCard>
with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _scaleAnimation;
@override
void initState() {
super.initState();
_controller = AnimationController(
duration: const Duration(milliseconds: 200),
vsync: this,
);
_scaleAnimation = Tween<double>(begin: 1.0, end: 0.95).animate(
CurvedAnimation(parent: _controller, curve: Curves.easeInOut),
);
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTapDown: (_) => _controller.forward(),
onTapUp: (_) => _controller.reverse(),
child: AnimatedBuilder(
animation: _scaleAnimation,
builder: (context, child) => Transform.scale(
scale: _scaleAnimation.value,
child: Card(
child: Column(
children: [
Image.network(widget.imageUrl, height: 200, fit: BoxFit.cover),
Padding(
padding: const EdgeInsets.all(16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(widget.productName, style: Theme.of(context).textTheme.titleMedium),
Text('₺${widget.price.toStringAsFixed(2)}',
style: const TextStyle(fontWeight: FontWeight.bold, color: Colors.green)),
],
),
),
],
),
),
),
),
);
}
}// React Native – animierte Produktkarte
import React, { useRef } from 'react';
import {
Animated,
TouchableWithoutFeedback,
Image,
Text,
View,
StyleSheet,
} from 'react-native';
interface ProductCardProps {
productName: string;
price: number;
imageUrl: string;
}
export function ProductCard({ productName, price, imageUrl }: ProductCardProps) {
const scaleAnim = useRef(new Animated.Value(1)).current;
const handlePressIn = () => {
Animated.spring(scaleAnim, {
toValue: 0.95,
useNativeDriver: true,
}).start();
};
const handlePressOut = () => {
Animated.spring(scaleAnim, {
toValue: 1,
friction: 3,
useNativeDriver: true,
}).start();
};
return (
<TouchableWithoutFeedback onPressIn={handlePressIn} onPressOut={handlePressOut}>
<Animated.View style={[styles.card, { transform: [{ scale: scaleAnim }] }]}>
<Image source={{ uri: imageUrl }} style={styles.image} resizeMode="cover" />
<View style={styles.info}>
<Text style={styles.name}>{productName}</Text>
<Text style={styles.price}>₺{price.toFixed(2)}</Text>
</View>
</Animated.View>
</TouchableWithoutFeedback>
);
}
const styles = StyleSheet.create({
card: { borderRadius: 12, overflow: 'hidden', backgroundColor: 'white', elevation: 4 },
image: { width: '100%', height: 200 },
info: { flexDirection: 'row', justifyContent: 'space-between', padding: 16 },
name: { fontSize: 16, fontWeight: '600' },
price: { fontSize: 16, fontWeight: '700', color: '#22c55e' },
});2025 liegt Flutter bei Performance und konsistenter UI vorn — besonders für individuell gestaltete, animationslastige Anwendungen. React Native ist praktischer, wenn Sie über ein JavaScript-/TypeScript-Team verfügen und schnell iterieren müssen. Beide sind produktionsreif; die Entscheidung sollte sich an den Teamkompetenzen orientieren.
Kostenlose Beratung erhaltenDa Flutter mit Skia/Impeller ohne native Bridge rendert, liefert es in der Regel konsistentere 60 fps. React Native hat diesen Abstand mit der New Architecture erheblich verringert.