57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:flutter_hbb/common.dart';
 | |
| import 'package:flutter_hbb/models/platform_model.dart';
 | |
| 
 | |
| typedef AudioINputSetDevice = void Function(String device);
 | |
| typedef AudioInputBuilder = Widget Function(
 | |
|     List<String> devices, String currentDevice, AudioINputSetDevice setDevice);
 | |
| 
 | |
| class AudioInput extends StatelessWidget {
 | |
|   final AudioInputBuilder builder;
 | |
| 
 | |
|   const AudioInput({Key? key, required this.builder}) : super(key: key);
 | |
| 
 | |
|   static String getDefault() {
 | |
|     if (isWindows) return translate('System Sound');
 | |
|     return '';
 | |
|   }
 | |
| 
 | |
|   static Future<String> getValue() async {
 | |
|     String device = await bind.mainGetOption(key: 'audio-input');
 | |
|     if (device.isNotEmpty) {
 | |
|       return device;
 | |
|     } else {
 | |
|       return getDefault();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   static Future<void> setDevice(String device) async {
 | |
|     if (device == getDefault()) device = '';
 | |
|     await bind.mainSetOption(key: 'audio-input', value: device);
 | |
|   }
 | |
| 
 | |
|   static Future<Map<String, Object>> getDevicesInfo() async {
 | |
|     List<String> devices = (await bind.mainGetSoundInputs()).toList();
 | |
|     if (isWindows) {
 | |
|       devices.insert(0, translate('System Sound'));
 | |
|     }
 | |
|     String current = await getValue();
 | |
|     return {'devices': devices, 'current': current};
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return futureBuilder(
 | |
|       future: getDevicesInfo(),
 | |
|       hasData: (data) {
 | |
|         String currentDevice = data['current'];
 | |
|         List<String> devices = data['devices'] as List<String>;
 | |
|         if (devices.isEmpty) {
 | |
|           return const Offstage();
 | |
|         }
 | |
|         return builder(devices, currentDevice, setDevice);
 | |
|       },
 | |
|     );
 | |
|   }
 | |
| }
 |