71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:dropdown_button2/dropdown_button2.dart';
 | 
						|
import 'package:easy_localization/easy_localization.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:island/models/realm.dart';
 | 
						|
import 'package:island/widgets/content/cloud_files.dart';
 | 
						|
import 'package:material_symbols_icons/symbols.dart';
 | 
						|
 | 
						|
class RealmSelectionDropdown extends StatelessWidget {
 | 
						|
  final SnRealm? value;
 | 
						|
  final List<SnRealm> realms;
 | 
						|
  final ValueChanged<SnRealm?> onChanged;
 | 
						|
  final bool isLoading;
 | 
						|
  final String? error;
 | 
						|
 | 
						|
  const RealmSelectionDropdown({
 | 
						|
    super.key,
 | 
						|
    required this.value,
 | 
						|
    required this.realms,
 | 
						|
    required this.onChanged,
 | 
						|
    this.isLoading = false,
 | 
						|
    this.error,
 | 
						|
  });
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    return DropdownButtonHideUnderline(
 | 
						|
      child: DropdownButton2<SnRealm?>(
 | 
						|
        isExpanded: true,
 | 
						|
        hint: Text('realmSelection').tr(),
 | 
						|
        value: value,
 | 
						|
        items: [
 | 
						|
          DropdownMenuItem<SnRealm?>(
 | 
						|
            value: null,
 | 
						|
            child: Row(
 | 
						|
              children: [
 | 
						|
                const CircleAvatar(
 | 
						|
                  radius: 16,
 | 
						|
                  child: Icon(Symbols.person, fill: 1),
 | 
						|
                ),
 | 
						|
                const SizedBox(width: 12),
 | 
						|
                Text('individual').tr(),
 | 
						|
              ],
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
          if (!isLoading && error == null)
 | 
						|
            ...realms.map(
 | 
						|
              (realm) => DropdownMenuItem<SnRealm?>(
 | 
						|
                value: realm,
 | 
						|
                child: Row(
 | 
						|
                  children: [
 | 
						|
                    ProfilePictureWidget(
 | 
						|
                      fileId: realm.picture?.id,
 | 
						|
                      fallbackIcon: Symbols.workspaces,
 | 
						|
                      radius: 16,
 | 
						|
                    ),
 | 
						|
                    const SizedBox(width: 12),
 | 
						|
                    Text(realm.name),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
            ),
 | 
						|
        ],
 | 
						|
        onChanged: onChanged,
 | 
						|
        buttonStyleData: const ButtonStyleData(
 | 
						|
          padding: EdgeInsets.only(left: 4, right: 16),
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |