Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Expo Documentation40টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Expo Intro
  • Expo vs React Native
  • RN Basics
  • Environment Setup
  • Project Setup
  • Project Structure
  • App Config
  • Expo Router Intro
  • Stack Navigation
  • Tabs Navigation
  • Core Components
  • Styling & Flexbox
  • Safe Area
  • Scroll & Lists
  • Forms & State
  • AsyncStorage
  • Project: Task Actions
  • Project: Screens
  • Images & Assets
  • Icons & Fonts
  • Theming
  • Camera & Picker
  • Notifications
  • Location & Maps
  • SQLite
  • API & Fetch
  • Loading & Errors
  • Secure Store & Auth
  • Auth Session
  • AppState & Network
  • Performance
  • Debugging & Tests
  • Config & Env
  • Splash & Updates
  • EAS Build
  • EAS Update
  • Store Submission
  • Common Mistakes
  • Best Practices
  • Interview Questions
  1. Docs
  2. Expo
  3. TaskTrack — Today screen ও TaskItem component
ExpoIntermediate

TaskTrack — Today screen ও TaskItem component

Storage-এর tasks UI-তে — FlatList, empty state, toggle।

4টি অংশবাংলা ভাষায়
app/(tabs)/index.tsxtsx
tsx
import { useEffect } from "react";
import { View, FlatList, Text } from "react-native";
import { loadTasks } from "../../lib/storage";
import TaskItem from "../../components/TaskItem";

export default function TodayScreen() {
  const [tasks, setTasks] = useState<Array<Task>>([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    loadTasks().then((list) => {
      setTasks(list);
      setLoading(false);
    });
  }, []);

  if (loading) {
    return <Text>Loading…</Text>;
  }

  return (
    <FlatList
      data={tasks}
      keyExtractor={(task) => task.id}
      renderItem={({ item }) => <TaskItem task={item} />}
      ListEmptyComponent={
        <View style={{ padding: 24 }}>
          <Text>আজ কিছু নেই — নিজের জন্য কাজ যোগ করুন</Text>
        </View>
      }
    />
  );
}
components/TaskItem.tsxtsx
tsx
import { View, Text, Pressable, StyleSheet } from "react-native";

export default function TaskItem({ task }) {
  return (
    <View style={styles.row}>
      <Pressable style={styles.title}>
        <Text style={[styles.text, task.done && styles.done]}>
          {task.done ? "✓ " : ""}{task.title}
        </Text>
      </Pressable>
    </View>
  );
}

const styles = StyleSheet.create({
  row: { padding: 16, borderBottomWidth: 1 },
  text: { fontSize: 16 },
  done: { textDecorationLine: "line-through", color: "#94a3b8" },
});

একই pattern-এ all screen (filter: active/completed) ও progress bar — সবগুলিই tasks state-এর derived।

state কম রাখুন

প্রতিটি screen-এ data force না করে বরং এক জায়গায় (page-level) রাখা — পরে global store-এ move করা সহজ।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরTaskTrack — add, toggle, delete (pure helpers)পরেরImage, expo-image ও asset sizes
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com