ظهر هذا الخطاء
The argument type 'num' can't be assigned to the parameter type 'double?'. dartargument_type_not_assignable
في الكود
import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:file_picker/file_picker.dart';
import 'package:open_file/open_file.dart';
import 'package:pdf/pdf.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:path_provider/path_provider.dart';
import 'package:router_os_client/router_os_client.dart';

class AddUserManagerCardsPage extends StatefulWidget {
  final RouterOSClient client;
  final int initialTab;
  const AddUserManagerCardsPage({
    super.key,
    required this.client,
    this.initialTab = 0,
  });

  @override
  State<AddUserManagerCardsPage> createState() =>
      _AddUserManagerCardsPageState();
}

class _AddUserManagerCardsPageState extends State<AddUserManagerCardsPage>
    with SingleTickerProviderStateMixin {
  late TabController _tabController;

  final _singleUserFormKey = GlobalKey<FormState>();
  final _multiUserFormKey = GlobalKey<FormState>();

  int _numberOfCards = 45;
  String _usernamePrefix = '';
  String _username = '';
  String _password = '';

  // _profile will hold profile name (strings), example: '24H'
  String? _profile;
  List<String> _availableProfiles = [];

  bool _isLoading = false;
  double _progress = 0.0;
  String _progressMessage = '';

  File? _backgroundImage;
  Uint8List? _imageBytes;

  // Position of displayed username on card preview
  Offset _usernamePosition = const Offset(0.5, 0.5);
  double _usernameFontSize = 16.0;

  // Generation type for multiple users
  // 'username_only', 'similar_username', 'unique_credentials'
  String _generationType = 'username_only';

  List<Map<String, String>> _generatedCards = [];

  int _rowsPerPage = 15;
  int _columnsPerPage = 3;

  int _usernameDigitsCount = 7;
  int _passwordDigitsCount = 8;

  final Color _primaryColor = const Color(0xFF3B82F6);
  final Color _backgroundColor = const Color(0xFF0A192F);
  final Color _cardColor = const Color(0xFF172A46);
  final Color _textColor = Colors.white;

  @override
  void initState() {
    super.initState();
    _tabController = TabController(
      length: 2,
      vsync: this,
      initialIndex: widget.initialTab,
    );
    _fetchUserManagerProfiles();
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  /// جلب البروفايلات من اليوزر مانجر
  Future<void> _fetchUserManagerProfiles() async {
    setState(() {
      _isLoading = true;
      _progressMessage = 'جلب قائمة البروفايلات...';
    });

    try {
      // الأمر الجديد لجلب بروفايلات اليوزر مانجر
      final response = await widget.client.talk([
        '/tool/user-manager/profile/print',
        '=detail=true',
        '=without-paging=true',
      ]);

      final profiles =
          response
              .where((item) => item.containsKey('name'))
              .map((item) => item['name'] as String)
              .toList();

      if (profiles.isNotEmpty) {
        setState(() {
          _availableProfiles = profiles;
          _profile = profiles.first;
        });
      }
    } catch (e) {
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('خطأ في جلب البروفايلات: $e'),
            backgroundColor: Colors.red,
          ),
        );
      }
    } finally {
      if (mounted) {
        setState(() {
          _isLoading = false;
        });
      }
    }
  }

  /// توليد كلمة مرور عشوائية
  String _generateRandomPassword() {
    const chars = 'abcdefghijklmnopqrstuvwxyz0123456789';
    final random = Random.secure();
    return String.fromCharCodes(
      Iterable.generate(
        _passwordDigitsCount,
        (_) => chars.codeUnitAt(random.nextInt(chars.length)),
      ),
    );
  }

  /// توليد اسم مستخدم فقط (لكل مستخدم)
  String _generateUsernameOnly(int index, Set<String> usedUsernames) {
    final random = Random();
    String username;
    do {
      final number = random.nextInt(pow(10, _usernameDigitsCount).toInt());
      username =
          '$_usernamePrefix${number.toString().padLeft(_usernameDigitsCount, '0')}';
    } while (usedUsernames.contains(username));
    usedUsernames.add(username);
    return username;
  }

  /// توليد اسم مستخدم وكلمة مرور متشابهة
  Map<String, String> _generateSimilarCredentials(
    int index,
    Set<String> usedUsernames,
  ) {
    final random = Random();
    String username;
    do {
      final number = random.nextInt(pow(10, _usernameDigitsCount).toInt());
      username =
          '$_usernamePrefix${number.toString().padLeft(_usernameDigitsCount, '0')}';
    } while (usedUsernames.contains(username));
    usedUsernames.add(username);
    return {'username': username, 'password': username};
  }

  /// توليد اسم مستخدم وكلمة مرور مختلفتين
  Map<String, String> _generateUniqueCredentials(
    int index,
    Set<String> usedUsernames,
  ) {
    final random = Random.secure();
    String username;
    String password;

    do {
      final number = random.nextInt(pow(10, _usernameDigitsCount).toInt());
      username =
          '$_usernamePrefix${number.toString().padLeft(_usernameDigitsCount, '0')}';
      password = _generateRandomPassword();
    } while (usedUsernames.contains(username));
    usedUsernames.add(username);

    return {'username': username, 'password': password};
  }

  /// دالة إنشاء المستخدم الواحد أو الجماعي في اليوزر مانجر
  Future<void> _generateUserManagerCards() async {
    if (_backgroundImage == null) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('الرجاء اختيار صورة خلفية أولا'),
          backgroundColor: Colors.red,
        ),
      );
      return;
    }

    final formKey =
        _tabController.index == 0 ? _singleUserFormKey : _multiUserFormKey;
    if (!formKey.currentState!.validate()) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('الرجاء ملء جميع الحقول المطلوبة'),
          backgroundColor: Colors.red,
        ),
      );
      return;
    }

    if (_profile == null || _profile!.isEmpty) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('الرجاء اختيار البروفايل'),
          backgroundColor: Colors.red,
        ),
      );
      return;
    }

    setState(() {
      _isLoading = true;
      _progress = 0.0;
      _progressMessage = 'بدء إنشاء المستخدمين...';
      _generatedCards.clear();
    });

    final Set<String> uniqueUsernames = {};

    try {
      if (_tabController.index == 0) {
        // مستخدم واحد
        // إضافة مستخدم واحد مباشرة
        await widget.client.talk([
          '/tool/user-manager/user/add',
          '=customer=admin',
          '=disabled=no',
          '=username=$_username',
          '=password=$_password',
          '=shared-users=1',
        ]);

        _generatedCards.add({'username': _username, 'password': _password});
        setState(() {
          _progress = 1.0;
          _progressMessage = 'تم إنشاء المستخدم بنجاح.';
        });
      } else {
        // مجموعة مستخدمين: استخدام create-and-activate-profile للعدد الكبير
        if (_generationType == 'username_only' ||
            _generationType == 'similar_username' ||
            _generationType == 'unique_credentials') {
          // في حالة create-and-activate-profile لا يدعم إدخال كلمات مرور مخصصة للمستخدمين بشكل منفصل
          // لذلك نولد المستخدمين باستخدام نفس البروفايل وكميات...

          // نستطيع استخدام create-and-activate-profile للعدد مباشرة
          await widget.client.talk([
            '/tool/user-manager/user/create-and-activate-profile',
            '=customer=admin',
            '=numbers=$_numberOfCards',
            '=profile=$_profile',
          ]);

          // نولد أسماء مستخدمين وكلمات مرور للعرض فقط (لم يتم التحقق من الأسماء أو كلمات المرور الحقيقية من السيرفر)
          for (int i = 0; i < _numberOfCards; i++) {
            late String username;
            late String password;

            if (_generationType == 'username_only') {
              username = _generateUsernameOnly(i, uniqueUsernames);
              password = '';
            } else if (_generationType == 'similar_username') {
              final cred = _generateSimilarCredentials(i, uniqueUsernames);
              username = cred['username']!;
              password = cred['password']!;
            } else {
              final cred = _generateUniqueCredentials(i, uniqueUsernames);
              username = cred['username']!;
              password = cred['password']!;
            }

            _generatedCards.add({'username': username, 'password': password});
          }
          setState(() {
            _progress = 1.0;
            _progressMessage =
                'تم إنشاء $_numberOfCards مستخدم بنجاح عبر البروفايل.';
          });
        }
      }

      // (اختياري) إنشاء ملف PDF بالكروت

      await _generateAndSavePdf();
    } catch (e) {
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('خطأ أثناء إنشاء المستخدمين: $e'),
            backgroundColor: Colors.red,
          ),
        );
      }
    } finally {
      setState(() {
        _isLoading = false;
        _progress = 0.0;
      });
    }
  }

  /// اختيار صورة الخلفية
  Future<void> _pickBackgroundImage() async {
    final result = await FilePicker.platform.pickFiles(
      type: FileType.image,
      allowMultiple: false,
    );
    if (result != null && result.files.isNotEmpty) {
      final file = File(result.files.single.path!);
      final bytes = await file.readAsBytes();

      setState(() {
        _backgroundImage = file;
        _imageBytes = bytes;
      });
    }
  }

  /// إنشاء وحفظ ملف PDF للكروت
  Future<void> _generateAndSavePdf() async {
    if (_imageBytes == null) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text('الرجاء اختيار صورة خلفية أولاً'),
          backgroundColor: Colors.red,
        ),
      );
      return;
    }

    setState(() {
      _isLoading = true;
      _progressMessage = 'جاري إنشاء ملف PDF...';
    });

    try {
      final pdf = pw.Document(compress: true);
      final image = pw.MemoryImage(_imageBytes!);

      const pageFormat = PdfPageFormat.a4;
      const horizontalMargin = 5.0;
      const verticalMargin = 5.0;
      const spacingBetweenCards = 3.0;
      const spacingBetweenRows = 3.0;

      final availableWidth = pageFormat.width - (horizontalMargin * 2);
      final availableHeight = pageFormat.height - (verticalMargin * 2);

      final cardWidth =
          (availableWidth - ((_columnsPerPage - 1) * spacingBetweenCards)) /
          _columnsPerPage;
      final cardHeight =
          (availableHeight - ((_rowsPerPage - 1) * spacingBetweenRows)) /
          _rowsPerPage;

      final cardsPerPage = _rowsPerPage * _columnsPerPage;
      final totalPages = (_generatedCards.length / cardsPerPage).ceil();

      for (int pageNum = 0; pageNum < totalPages; pageNum++) {
        final startIndex = pageNum * cardsPerPage;
        final endIndex = min(startIndex + cardsPerPage, _generatedCards.length);
        final rows = <pw.Widget>[];

        for (int row = 0; row < _rowsPerPage; row++) {
          final cardIndex = startIndex + (row * _columnsPerPage);
          if (cardIndex >= endIndex) break;
          final rowCards = <pw.Widget>[];

          for (int col = 0; col < _columnsPerPage; col++) {
            final index = cardIndex + col;
            if (index >= endIndex) break;
            final card = _generatedCards[index];

            // الموضع بالنسبة للبطاقة
            final usernameX = _usernamePosition.dx * cardWidth;
            final usernameY = _usernamePosition.dy * cardHeight;

            rowCards.add(
              pw.Container(
                width: cardWidth,
                height: cardHeight,
                margin: pw.EdgeInsets.only(
                  right: col < _columnsPerPage - 1 ? spacingBetweenCards : 0,
                  bottom: row < _rowsPerPage - 1 ? spacingBetweenRows : 0,
                ),
                decoration: pw.BoxDecoration(
                  border: pw.Border.all(color: PdfColors.black, width: 0.5),
                  image: pw.DecorationImage(image: image, fit: pw.BoxFit.fill),
                ),
                child: pw.Stack(
                  children: [
                    pw.Positioned(
                      left: usernameX,
                      top: usernameY,
                      child: pw.Text(
                        card['username']!,
                        style: pw.TextStyle(
                          color: PdfColors.black,
                          fontSize: _usernameFontSize,
                          fontWeight: pw.FontWeight.bold,
                        ),
                      ),
                    ),
                    if (card['password'] != null &&
                        card['password']!.isNotEmpty)
                      pw.Positioned(
                        left: usernameX,
                        top: usernameY + 20,
                        child: pw.Text(
                          card['password']!,
                          style: pw.TextStyle(
                            color: PdfColors.black,
                            fontSize: _usernameFontSize - 4,
                            fontWeight: pw.FontWeight.bold,
                          ),
                        ),
                      ),
                  ],
                ),
              ),
            );
          }

          rows.add(pw.Row(children: rowCards));
        }

        pdf.addPage(
          pw.Page(
            margin: pw.EdgeInsets.symmetric(
              horizontal: horizontalMargin,
              vertical: verticalMargin,
            ),
            pageFormat: pageFormat,
            build:
                (pw.Context context) => pw.Column(
                  children: rows,
                  mainAxisAlignment: pw.MainAxisAlignment.start,
                ),
          ),
        );
      }

      final savePath = await FilePicker.platform.getDirectoryPath();
      if (savePath == null) {
        if (mounted) {
          ScaffoldMessenger.of(context).showSnackBar(
            const SnackBar(content: Text('لم يتم اختيار مسار للحفظ')),
          );
        }
        return;
      }

      final now = DateTime.now();
      final formattedTime =
          '${now.year}-${now.month.toString().padLeft(2, '0')}-${now.day.toString().padLeft(2, '0')}_'
          '${now.hour.toString().padLeft(2, '0')}-${now.minute.toString().padLeft(2, '0')}-${now.second.toString().padLeft(2, '0')}';

      final fileName = 'كروت_اليزر_مانجر_$formattedTime.pdf';
      final filePath = '$savePath/$fileName';

      final file = File(filePath);
      final pdfBytes = await pdf.save();
      await file.writeAsBytes(pdfBytes.toList());

      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('تم حفظ ملف PDF بنجاح في: $filePath'),
            backgroundColor: Colors.green,
          ),
        );

        OpenFile.open(filePath);
      }
    } catch (e) {
      if (mounted) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text('خطأ في حفظ ملف PDF: $e'),
            backgroundColor: Colors.red,
          ),
        );
      }
    } finally {
      if (mounted) {
        setState(() => _isLoading = false);
      }
    }
  }

  InputDecoration _buildInputDecoration(String labelText, {String? hintText}) =>
      InputDecoration(
        labelText: labelText,
        hintText: hintText,
        labelStyle: TextStyle(color: _textColor.withOpacity(0.8)),
        hintStyle: TextStyle(color: _textColor.withOpacity(0.5)),
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(8),
          borderSide: BorderSide(color: _textColor.withOpacity(0.2)),
        ),
        enabledBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(8),
          borderSide: BorderSide(color: _textColor.withOpacity(0.2)),
        ),
        focusedBorder: OutlineInputBorder(
          borderRadius: BorderRadius.circular(8),
          borderSide: BorderSide(color: _primaryColor),
        ),
        filled: true,
        fillColor: _textColor.withOpacity(0.05),
      );

  @override
  Widget build(BuildContext context) {
    return Directionality(
      textDirection: TextDirection.rtl,
      child: LayoutBuilder(
        builder: (context, constraints) {
          if (constraints.maxWidth > 800) {
            return _buildDesktopLayout(context);
          } else {
            return _buildMobileLayout(context);
          }
        },
      ),
    );
  }

  Widget _buildDesktopLayout(BuildContext context) {
    return Scaffold(
      backgroundColor: _backgroundColor,
      body: Row(
        children: [
          // الشريط الجانبي (يمكنك تخصيصه لاحقاً)
          Container(
            width: 280,
            height: MediaQuery.of(context).size.height,
            color: Colors.black54,
            child: SafeArea(
              child: Column(
                children: [
                  const SizedBox(height: 20),
                  Text(
                    'إضافة مستخدمين (يوزر مانجر)',
                    style: TextStyle(
                      color: _textColor,
                      fontSize: 20,
                      fontWeight: FontWeight.bold,
                    ),
                  ),
                ],
              ),
            ),
          ),
          Expanded(
            child: Container(
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topLeft,
                  end: Alignment.bottomRight,
                  colors: [
                    _backgroundColor.withOpacity(0.9),
                    _backgroundColor.withOpacity(0.7),
                  ],
                ),
              ),
              child: Column(
                children: [
                  Container(
                    height: 60,
                    color: Colors.white.withOpacity(0.05),
                    child: TabBar(
                      controller: _tabController,
                      indicatorColor: _primaryColor,
                      indicatorWeight: 3,
                      labelColor: _primaryColor,
                      unselectedLabelColor: Colors.white.withOpacity(0.5),
                      tabs: const [
                        Tab(icon: Icon(Icons.person_add), text: 'مستخدم واحد'),
                        Tab(
                          icon: Icon(Icons.group_add),
                          text: 'مجموعة مستخدمين',
                        ),
                      ],
                    ),
                  ),
                  Expanded(
                    child: Stack(
                      children: [
                        TabBarView(
                          controller: _tabController,
                          children: [
                            _buildSingleUserTab(),
                            _buildMultipleUsersTab(),
                          ],
                        ),
                        if (_isLoading) _buildLoadingOverlay(),
                      ],
                    ),
                  ),
                ],
              ),
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildMobileLayout(BuildContext context) {
    return Scaffold(
      backgroundColor: _backgroundColor,
      appBar: AppBar(
        title: Text(
          'إضافة مستخدمين (يوزر مانجر)',
          style: TextStyle(color: _textColor, fontSize: 20),
        ),
        centerTitle: true,
        backgroundColor: _backgroundColor,
        elevation: 0,
        iconTheme: IconThemeData(color: _textColor),
        bottom: TabBar(
          controller: _tabController,
          indicatorColor: _primaryColor,
          indicatorWeight: 3,
          labelColor: _primaryColor,
          unselectedLabelColor: Colors.white.withOpacity(0.5),
          tabs: const [
            Tab(icon: Icon(Icons.person_add), text: 'مستخدم واحد'),
            Tab(icon: Icon(Icons.group_add), text: 'مجموعة مستخدمين'),
          ],
        ),
      ),
      body: Stack(
        children: [
          Container(
            decoration: BoxDecoration(
              gradient: LinearGradient(
                begin: Alignment.topLeft,
                end: Alignment.bottomRight,
                colors: [
                  _backgroundColor.withOpacity(0.9),
                  _backgroundColor.withOpacity(0.7),
                ],
              ),
            ),
            child: TabBarView(
              controller: _tabController,
              children: [_buildSingleUserTab(), _buildMultipleUsersTab()],
            ),
          ),
          if (_isLoading) _buildLoadingOverlay(),
        ],
      ),
    );
  }

  Widget _buildLoadingOverlay() {
    return Positioned.fill(
      child: Container(
        color: Colors.black54,
        child: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              const CircularProgressIndicator(color: Colors.white),
              const SizedBox(height: 20),
              Text(
                _progressMessage,
                style: const TextStyle(color: Colors.white, fontSize: 18),
              ),
              const SizedBox(height: 10),
              if (_progress > 0)
                SizedBox(
                  width: 300,
                  child: LinearProgressIndicator(
                    value: _progress,
                    backgroundColor: Colors.grey[800],
                    valueColor: const AlwaysStoppedAnimation(Colors.white),
                  ),
                ),
            ],
          ),
        ),
      ),
    );
  }

  /// تبويب إنشاء مستخدم واحد
  Widget _buildSingleUserTab() {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Form(
        key: _singleUserFormKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            _buildCardSettings('إعدادات المستخدم', _buildSingleFormFields()),
            const SizedBox(height: 24),
            ElevatedButton(
              onPressed:
                  _isLoading
                      ? null
                      : () {
                        _numberOfCards = 1;
                        _generateUserManagerCards();
                      },
              style: ElevatedButton.styleFrom(
                backgroundColor: _primaryColor,
                foregroundColor: _textColor,
                padding: const EdgeInsets.symmetric(vertical: 16),
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(8),
                ),
                minimumSize: const Size(double.infinity, 50),
              ),
              child: const Text('إنشاء المستخدم'),
            ),
          ],
        ),
      ),
    );
  }

  /// حقول نموذج المستخدم الواحد
  Widget _buildSingleFormFields() {
    return Column(
      children: [
        TextFormField(
          initialValue: _username,
          style: TextStyle(color: _textColor),
          decoration: _buildInputDecoration('اسم المستخدم'),
          validator: (value) {
            if (value == null || value.trim().isEmpty) {
              return 'يجب إدخال اسم المستخدم';
            }
            return null;
          },
          onChanged: (val) => setState(() => _username = val.trim()),
        ),
        const SizedBox(height: 16),
        TextFormField(
          initialValue: _password,
          obscureText: true,
          style: TextStyle(color: _textColor),
          decoration: _buildInputDecoration('كلمة المرور'),
          validator: (value) {
            if (value == null || value.trim().isEmpty) {
              return 'يجب إدخال كلمة المرور';
            }
            return null;
          },
          onChanged: (val) => setState(() => _password = val.trim()),
        ),
        const SizedBox(height: 16),
        DropdownButtonFormField<String>(
          value: _profile,
          style: TextStyle(color: _textColor),
          items:
              _availableProfiles
                  .map(
                    (p) => DropdownMenuItem(
                      value: p,
                      child: Text(p, style: TextStyle(color: _textColor)),
                    ),
                  )
                  .toList(),
          onChanged: (val) => setState(() => _profile = val),
          decoration: _buildInputDecoration('اختر البروفايل'),
          dropdownColor: _cardColor,
        ),
      ],
    );
  }

  /// تبويب إنشاء مجموعة مستخدمين
  Widget _buildMultipleUsersTab() {
    return SingleChildScrollView(
      padding: const EdgeInsets.all(16),
      child: Form(
        key: _multiUserFormKey,
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: [
            _buildCardSettings(
              'إعدادات مجموعة المستخدمين',
              Column(
                children: [
                  TextFormField(
                    initialValue: _numberOfCards.toString(),
                    keyboardType: TextInputType.number,
                    style: TextStyle(color: _textColor),
                    decoration: _buildInputDecoration('عدد المستخدمين'),
                    validator: (value) {
                      if (value == null ||
                          value.isEmpty ||
                          int.tryParse(value) == null ||
                          int.parse(value) <= 0) {
                        return 'يجب إدخال عدد صحيح موجب';
                      }
                      return null;
                    },
                    onChanged:
                        (val) => setState(
                          () => _numberOfCards = int.tryParse(val) ?? 1,
                        ),
                  ),
                  const SizedBox(height: 16),
                  DropdownButtonFormField<String>(
                    value: _generationType,
                    style: TextStyle(color: _textColor),
                    items: const [
                      DropdownMenuItem(
                        value: 'username_only',
                        child: Text('اسم مستخدم فقط'),
                      ),
                      DropdownMenuItem(
                        value: 'similar_username',
                        child: Text('اسم مستخدم وكلمة سر متشابهين'),
                      ),
                      DropdownMenuItem(
                        value: 'unique_credentials',
                        child: Text('اسم مستخدم وكلمة سر مختلفين'),
                      ),
                    ],
                    onChanged: (val) {
                      setState(() => _generationType = val!);
                    },
                    decoration: _buildInputDecoration('نوع التوليد'),
                    dropdownColor: _cardColor,
                  ),
                  const SizedBox(height: 16),
                  Row(
                    children: [
                      Expanded(
                        child: TextFormField(
                          initialValue: _usernamePrefix,
                          maxLength: 2,
                          style: TextStyle(color: _textColor),
                          decoration: _buildInputDecoration(
                            'بادئة اسم المستخدم (اختياري)',
                          ),
                          onChanged:
                              (val) =>
                                  setState(() => _usernamePrefix = val.trim()),
                        ),
                      ),
                      const SizedBox(width: 16),
                      Expanded(
                        child: TextFormField(
                          initialValue: _usernameDigitsCount.toString(),
                          keyboardType: TextInputType.number,
                          style: TextStyle(color: _textColor),
                          decoration: _buildInputDecoration(
                            'عدد خانات اسم المستخدم',
                          ),
                          validator: (value) {
                            if (value == null ||
                                value.isEmpty ||
                                int.tryParse(value) == null ||
                                int.parse(value) <= 0) {
                              return 'يجب إدخال عدد صحيح موجب';
                            }
                            return null;
                          },
                          onChanged:
                              (val) => setState(
                                () =>
                                    _usernameDigitsCount =
                                        int.tryParse(val) ?? 7,
                              ),
                        ),
                      ),
                    ],
                  ),
                  const SizedBox(height: 16),
                  if (_generationType == 'unique_credentials')
                    TextFormField(
                      initialValue: _passwordDigitsCount.toString(),
                      keyboardType: TextInputType.number,
                      style: TextStyle(color: _textColor),
                      decoration: _buildInputDecoration(
                        'عدد خانات كلمة المرور',
                      ),
                      validator: (value) {
                        if (value == null ||
                            value.isEmpty ||
                            int.tryParse(value) == null ||
                            int.parse(value) <= 0) {
                          return 'يجب إدخال عدد صحيح موجب';
                        }
                        return null;
                      },
                      onChanged:
                          (val) => setState(
                            () => _passwordDigitsCount = int.tryParse(val) ?? 8,
                          ),
                    ),
                  const SizedBox(height: 16),
                  DropdownButtonFormField<String>(
                    value: _profile,
                    style: TextStyle(color: _textColor),
                    items:
                        _availableProfiles
                            .map(
                              (p) => DropdownMenuItem(
                                value: p,
                                child: Text(
                                  p,
                                  style: TextStyle(color: _textColor),
                                ),
                              ),
                            )
                            .toList(),
                    onChanged: (val) => setState(() => _profile = val),
                    decoration: _buildInputDecoration('اختر البروفايل'),
                    dropdownColor: _cardColor,
                  ),
                  const SizedBox(height: 16),
                  Row(
                    children: [
                      Expanded(
                        child: DropdownButtonFormField<int>(
                          value: _rowsPerPage,
                          items:
                              List.generate(20, (index) => index + 1)
                                  .map(
                                    (val) => DropdownMenuItem(
                                      value: val,
                                      child: Text(
                                        '$val صفوف',
                                        style: TextStyle(color: _textColor),
                                      ),
                                    ),
                                  )
                                  .toList(),
                          onChanged: (val) {
                            if (val != null) {
                              setState(() => _rowsPerPage = val);
                            }
                          },
                          decoration: _buildInputDecoration(
                            'عدد الصفوف في الصفحة',
                          ),
                          dropdownColor: _cardColor,
                        ),
                      ),
                      const SizedBox(width: 16),
                      Expanded(
                        child: DropdownButtonFormField<int>(
                          value: _columnsPerPage,
                          items:
                              [3, 4]
                                  .map(
                                    (val) => DropdownMenuItem(
                                      value: val,
                                      child: Text(
                                        '$val أعمدة',
                                        style: TextStyle(color: _textColor),
                                      ),
                                    ),
                                  )
                                  .toList(),
                          onChanged: (val) {
                            if (val != null) {
                              setState(() => _columnsPerPage = val);
                            }
                          },
                          decoration: _buildInputDecoration(
                            'عدد الأعمدة في الصفحة',
                          ),
                          dropdownColor: _cardColor,
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
            const SizedBox(height: 24),
            ElevatedButton(
              onPressed:
                  _isLoading
                      ? null
                      : () {
                        _generateUserManagerCards();
                      },
              style: ElevatedButton.styleFrom(
                backgroundColor: _primaryColor,
                foregroundColor: _textColor,
                padding: const EdgeInsets.symmetric(vertical: 16),
                shape: RoundedRectangleBorder(
                  borderRadius: BorderRadius.circular(8),
                ),
                minimumSize: const Size(double.infinity, 50),
              ),
              child: const Text('إنشاء المستخدمين'),
            ),
            const SizedBox(height: 24),
            _buildDesignCard(context),
          ],
        ),
      ),
    );
  }

  /// بطاقة الإعدادات العامة للنموذج
  Widget _buildCardSettings(String title, Widget child) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.white.withOpacity(0.05),
        borderRadius: BorderRadius.circular(15),
        border: Border.all(color: Colors.white.withOpacity(0.1)),
      ),
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            title,
            style: const TextStyle(
              fontSize: 18,
              fontWeight: FontWeight.bold,
              color: Colors.white,
            ),
          ),
          const SizedBox(height: 16),
          child,
        ],
      ),
    );
  }

  /// بطاقة المعاينة والتصميم
  Widget _buildDesignCard(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: _cardColor,
        borderRadius: BorderRadius.circular(15),
        border: Border.all(color: _textColor.withOpacity(0.1)),
        boxShadow: [
          BoxShadow(
            color: Colors.black.withOpacity(0.3),
            blurRadius: 10,
            offset: const Offset(0, 5),
          ),
        ],
      ),
      padding: const EdgeInsets.all(16),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            'تصميم الكرت',
            style: TextStyle(
              fontSize: 18,
              fontWeight: FontWeight.bold,
              color: _textColor,
            ),
          ),
          const SizedBox(height: 16),
          ElevatedButton.icon(
            onPressed: _pickBackgroundImage,
            icon: Icon(Icons.image, color: _textColor),
            label: Text('اختر صورة خلفية', style: TextStyle(color: _textColor)),
            style: ElevatedButton.styleFrom(
              backgroundColor: _primaryColor,
              foregroundColor: _textColor,
              padding: const EdgeInsets.symmetric(vertical: 12),
              shape: RoundedRectangleBorder(
                borderRadius: BorderRadius.circular(8),
              ),
              minimumSize: const Size(double.infinity, 50),
            ),
          ),
          const SizedBox(height: 16),
          if (_backgroundImage != null)
            LayoutBuilder(
              builder: (context, constraints) {
                final previewWidth = min(constraints.maxWidth - 32, 400);
                final previewHeight = previewWidth * 0.6;

                return Container(
                  width: previewWidth,
                  height: previewHeight,
                  decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(8),
                    image: DecorationImage(
                      image: FileImage(_backgroundImage!),
                      fit: BoxFit.cover,
                    ),
                  ),
                  child: Stack(
                    children: [
                      Positioned(
                        left: _usernamePosition.dx * previewWidth,
                        top: _usernamePosition.dy * previewHeight,
                        child: GestureDetector(
                          onPanUpdate: (details) {
                            setState(() {
                              _usernamePosition = Offset(
                                (_usernamePosition.dx +
                                        details.delta.dx / previewWidth)
                                    .clamp(0.0, 1.0),
                                (_usernamePosition.dy +
                                        details.delta.dy / previewHeight)
                                    .clamp(0.0, 1.0),
                              );
                            });
                          },
                          child: Container(
                            padding: const EdgeInsets.symmetric(
                              vertical: 3,
                              horizontal: 6,
                            ),
                            decoration: BoxDecoration(
                              color: Colors.white.withOpacity(0.7),
                              borderRadius: BorderRadius.circular(4),
                            ),
                            child: Text(
                              (_tabController.index == 0)
                                  ? _username.isEmpty
                                      ? 'اسم المستخدم'
                                      : _username
                                  : 'رمز الدخول',
                              style: const TextStyle(
                                color: Colors.black,
                                fontWeight: FontWeight.bold,
                                fontSize: 16,
                              ),
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                );
              },
            )
          else
            Container(
              height: 150,
              alignment: Alignment.center,
              decoration: BoxDecoration(
                color: _textColor.withOpacity(0.1),
                borderRadius: BorderRadius.circular(8),
              ),
              child: Text(
                'لا توجد صورة خلفية',
                style: TextStyle(color: _textColor.withOpacity(0.7)),
              ),
            ),
        ],
      ),
    );
  }
}


اعطيني الجزء السابق والجزء المراد استبدالة بة