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

مشغل الموسيقى: عناصر التحكم

جزء من قسم تصميم يتكيف مع الشاشة في رحلة Flutter على Coddy. الدرس 29 من 30.

يحتوي الصف الأخير على الأزرار: السابق والتشغيل والتالي. ينبغي أن تتقاسم العرض بالتساوي، مع وضع زر التشغيل في المنتصف تمامًا، على أي هاتف.

يؤدي وضع كل IconButton داخل Expanded إلى تخصيص ثلث الصف لكل زر، ويكون الزر في منتصف هذا الثلث. امنح زر التشغيل قيمة أكبر لـ iconSize: ليبرز.

يتغير زر التشغيل: يعرض Icons.pause أثناء تشغيل الأغنية، وIcons.play_arrow عندما لا تكون قيد التشغيل. يتطلب ذلك قيمة bool في الحالة واستخدام ? : لاختيار الأيقونة.

challenge icon

التحدي

سهل

أسفل التوقيتين، وبعد SizedBox(height: 16)، أضف Row يحتوي على ثلاثة عناصر واجهة Expanded من نوع IconButton:

  • Icons.skip_previous، iconSize: 40
  • زر التشغيل، iconSize: 64: Icons.pause عندما يكون الحقل الجديد bool _playing = false; بقيمة صحيحة، وIcons.play_arrow عندما تكون قيمته خاطئة؛ يؤدي النقر عليه إلى تبديل قيمة _playing داخل setState
  • Icons.skip_next، iconSize: 40

جرّب بنفسك

import 'package:flutter/material.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  double _position = 0.3;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: Scaffold(
        appBar: AppBar(title: const Text('Now Playing')),
        body: Padding(
          padding: const EdgeInsets.all(24),
          child: Column(
            children: [
              Stack(
                children: [
                  Container(
                    width: double.infinity,
                    height: 300,
                    decoration: BoxDecoration(
                      color: Colors.deepPurple,
                      borderRadius: BorderRadius.circular(24),
                    ),
                    child: const Center(
                      child: Icon(Icons.album, size: 120, color: Colors.white),
                    ),
                  ),
                  Positioned(
                    top: 12,
                    right: 12,
                    child: Container(
                      padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
                      decoration: BoxDecoration(
                        color: Colors.black54,
                        borderRadius: BorderRadius.circular(8),
                      ),
                      child: const Text(
                        'HD',
                        style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
                      ),
                    ),
                  ),
                ],
              ),
              const SizedBox(height: 24),
              const Text(
                'Midnight Drive',
                style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
              ),
              const SizedBox(height: 4),
              const Text('The Night Owls', style: TextStyle(color: Colors.grey)),
              const SizedBox(height: 16),
              Slider(
                value: _position,
                onChanged: (value) {
                  setState(() {
                    _position = value;
                  });
                },
              ),
              const Row(
                children: [
                  Text('1:12'),
                  Spacer(),
                  Text('3:45'),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}
quiz iconاختبر نفسك

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

جميع دروس تصميم يتكيف مع الشاشة

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