Menu
CoddyTech
flag Ar iconالعربيةdown icon

علامات التبويب مع شريط تنقل

جزء من قسم القوائم والشاشات في رحلة Flutter على Coddy. الدرس 23 من 33.

تحتفظ كثير من التطبيقات بصفحاتها الرئيسية في تبويبات على طول أسفل الشاشة. يرسمها NavigationBar؛ وتضعه في bottomNavigationBar: الخاص بـ Scaffold.

NavigationBar(
  selectedIndex: index,
  onDestinationSelected: (int i) {
    setState(() {
      index = i;
    });
  },
  destinations: const [
    NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
    NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),
  ],
)

كل NavigationDestination هو تبويب واحد، وله أيقونة وتسمية. يحدد selectedIndex التبويب المميز، بدءًا من 0. عند النقر على تبويب، يحصل onDestinationSelected على فهرسه.

لا يتذكر الشريط التبويب من تلقاء نفسه: احتفظ بـ index في الحالة وغيّره باستخدام setState. يعرض المتن الصفحة الخاصة بذلك الفهرس، وهنا pages[index] من قائمة عناصر واجهة المستخدم.

challenge icon

التحدي

سهل

يحتوي الشريط على ثلاثة ألسنة، لكن النقر عليها لا يفعل شيئًا. أضف onDestinationSelected: لكي يُميَّز اللسان الذي تنقر عليه وتظهر صفحته: Favorites page لـ Favorites، وSettings page لـ Settings.

جرّب بنفسك

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  int index = 0;
  final List<Widget> pages = const [
    Center(child: Text('Home page')),
    Center(child: Text('Favorites page')),
    Center(child: Text('Settings page')),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('My App')),
      body: pages[index],
      bottomNavigationBar: NavigationBar(
        selectedIndex: index,
        destinations: const [
          NavigationDestination(icon: Icon(Icons.home), label: 'Home'),
          NavigationDestination(icon: Icon(Icons.favorite), label: 'Favorites'),
          NavigationDestination(icon: Icon(Icons.settings), label: 'Settings'),
        ],
      ),
    );
  }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس القوائم والشاشات

6علامات التبويب والأدراج والتمرير بالسحب

علامات التبويب مع شريط تنقلأيقونات ممتلئة لعلامة التبويب المفتوحةدرج جانبياسحب للحذفالتراجع عن السحب

تدرّب بنفسك: مترجم Flutter عبر الإنترنت