import 'package:cwtch/models/contact.dart'; import 'package:cwtch/models/profile.dart'; import 'package:cwtch/themes/opaque.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../settings.dart'; bool noFilter(ContactInfoState peer) { return true; } // Dropdown menu populated from Provider.of's contact list // Includes both peers and groups; begins empty/nothing selected // Displays nicknames to UI but uses handles as values // Pass an onChanged handler to access value class DropdownContacts extends StatefulWidget { DropdownContacts({ required this.onChanged, this.filter = noFilter, }); final Function(dynamic) onChanged; final bool Function(ContactInfoState) filter; @override _DropdownContactsState createState() => _DropdownContactsState(); } class _DropdownContactsState extends State { String? selected; @override Widget build(BuildContext context) { return DropdownButton( isExpanded: true, // magic property value: this.selected, items: Provider.of(context, listen: false).contactList.contacts.where(widget.filter).map>((ContactInfoState contact) { return DropdownMenuItem( value: contact.onion, child: Text( contact.nickname, style: Provider.of(context).scaleFonts(defaultTextStyle), )); }).toList(), onChanged: (String? newVal) { setState(() { this.selected = newVal; }); widget.onChanged(newVal); }); } }