You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Dart
		
	
import 'package:flutter/material.dart';
 | 
						|
 | 
						|
import 'package:flutter_gen/gen_l10n/l10n.dart';
 | 
						|
import 'package:matrix/matrix.dart';
 | 
						|
 | 
						|
import 'package:fluffychat/pages/chat/add_widget_tile_view.dart';
 | 
						|
 | 
						|
class AddWidgetTile extends StatefulWidget {
 | 
						|
  final Room room;
 | 
						|
 | 
						|
  const AddWidgetTile({super.key, required this.room});
 | 
						|
 | 
						|
  @override
 | 
						|
  State<AddWidgetTile> createState() => AddWidgetTileState();
 | 
						|
}
 | 
						|
 | 
						|
class AddWidgetTileState extends State<AddWidgetTile> {
 | 
						|
  final TextEditingController urlController = TextEditingController();
 | 
						|
  final TextEditingController nameController = TextEditingController();
 | 
						|
  String widgetType = 'm.etherpad';
 | 
						|
 | 
						|
  late final bool initiallyExpanded;
 | 
						|
 | 
						|
  String? nameError;
 | 
						|
  String? urlError;
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    initiallyExpanded = widget.room.widgets.isEmpty;
 | 
						|
    super.initState();
 | 
						|
  }
 | 
						|
 | 
						|
  void setWidgetType(String value) => setState(() => widgetType = value);
 | 
						|
 | 
						|
  void addWidget() {
 | 
						|
    try {
 | 
						|
      nameError = null;
 | 
						|
      urlError = null;
 | 
						|
 | 
						|
      final room = widget.room;
 | 
						|
      final name = nameController.text;
 | 
						|
      final uri = Uri.tryParse(urlController.text);
 | 
						|
 | 
						|
      if (name.length < 3) {
 | 
						|
        setState(() {
 | 
						|
          nameError = L10n.of(context)!.widgetNameError;
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
 | 
						|
      if (uri == null || uri.scheme != 'https') {
 | 
						|
        setState(() {
 | 
						|
          urlError = L10n.of(context)!.widgetUrlError;
 | 
						|
        });
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      setState(() {});
 | 
						|
 | 
						|
      late MatrixWidget matrixWidget;
 | 
						|
      switch (widgetType) {
 | 
						|
        case 'm.etherpad':
 | 
						|
          matrixWidget = MatrixWidget.etherpad(room, name, uri);
 | 
						|
          break;
 | 
						|
        case 'm.jitsi':
 | 
						|
          matrixWidget = MatrixWidget.jitsi(room, name, uri);
 | 
						|
          break;
 | 
						|
        case 'm.video':
 | 
						|
          matrixWidget = MatrixWidget.video(room, name, uri);
 | 
						|
          break;
 | 
						|
        default:
 | 
						|
          matrixWidget = MatrixWidget.custom(room, name, uri);
 | 
						|
          break;
 | 
						|
      }
 | 
						|
      widget.room.addWidget(matrixWidget);
 | 
						|
      Navigator.of(context).pop();
 | 
						|
    } catch (e) {
 | 
						|
      ScaffoldMessenger.of(context).showSnackBar(
 | 
						|
        SnackBar(content: Text(L10n.of(context)!.errorAddingWidget)),
 | 
						|
      );
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) => AddWidgetTileView(controller: this);
 | 
						|
}
 |