// ignore_for_file: must_be_immutable

import 'package:flutter/material.dart';
import 'device_type.dart';

// ignore: camel_case_types, 
class inputText extends StatefulWidget {
  //内容
  String value;
  //跟在后面的单位,默认为空
  String? endValue;
  //控制焦点
  FocusNode? focusNode;
  //控制长度
  double inputLength;
  //控制键盘类型,默认为数字0,其他参数都是字符串
  int keyboardType;
  //回调数据变化后返回新值
  double fontsize;
  double inputHeight;
  final ValueChanged<String>? onChanged;
  final Function()? onTap;
  inputText(
      {super.key,
      required this.value,
      required this.focusNode,
      required this.onChanged,
      this.endValue = "",
      this.inputLength = 200,
      this.keyboardType = 0,
      this.fontsize = 20,
      this.inputHeight = 40,
      this.onTap});

  @override
  State<inputText> createState() => _inputTextState();
}

// ignore: camel_case_types
class _inputTextState extends State<inputText> {
  //控制默认文本
  TextEditingController? _controller;
  //传入的值,作为显示的初始值
  String _inputTextContext = "";
  //字体
  late double _fontSize;
  // late double _inputHeight;
   Color _fontcolor = Colors.black;
  @override
  void initState() {
    super.initState();
    _inputTextContext = widget.value;
    _controller = TextEditingController(text: _inputTextContext);
    _fontSize = widget.fontsize;
    // _inputHeight = widget.inputHeight;
  }

  @override
  Widget build(BuildContext context) {
    final isDarkMode = Theme.of(context).brightness == Brightness.dark;
    _fontcolor = isDarkMode ? Colors.white : Colors.black;
    final deviceType = getDeviceType(context);
    double dynamicWidth = deviceType == DeviceType.mobile ? 0 : 50;
    return Row(
      children: [
        Container(
          margin: const EdgeInsets.only(bottom: 5),
          width: widget.endValue != ""
              ? widget.inputLength + dynamicWidth - 5
              : widget.inputLength + dynamicWidth,
          height: widget.inputHeight,
          child: TextField(
            keyboardType: widget.keyboardType == 0
                ? TextInputType.number
                : TextInputType.text,
            clipBehavior: Clip.hardEdge,
            focusNode: widget.focusNode,
            controller: _controller,
            style: TextStyle(fontSize: _fontSize, color: _fontcolor),
            onChanged: (value) {
              setState(() {
                _inputTextContext = value;
              });
              // 调用回调函数,通知外部数据变化
              if (widget.onChanged != null) {
                widget.onChanged!(value);
              }
            },
            decoration: InputDecoration(
                contentPadding: const EdgeInsets.only(left: 10),
                hintText: _inputTextContext,
                border: const OutlineInputBorder(
                    borderSide: BorderSide(width: 1, color: Colors.black))),
            onTap: widget.onTap,
          ),
        ),
        Container(
          padding: const EdgeInsets.only(left: 10),
          child: Transform.translate(
            offset: const Offset(-35.0, 0.0),
            child: Text(
              "${widget.endValue}",
              style: TextStyle(fontSize: _fontSize, color: _fontcolor),
            ),
          ),
        )
      ],
    );
  }
}

class DropDown extends StatefulWidget {
  List<String> optionList = [];
  double listLength;
  double fontSize;
  double listHeight;
  final void Function(String?) onValueChanged;
  DropDown(
      {super.key,
      required this.optionList,
      this.listLength = 200,
      this.fontSize = 20,
      this.listHeight = 50,
      required this.onValueChanged});

  @override
  State<DropDown> createState() => _DropDownState();
}

class _DropDownState extends State<DropDown> {
  List<String> optionList = [];
  String? dropdownValue;
  @override
  void initState() {
    super.initState();
    optionList = widget.optionList;
    // dropdownValue = widget.optionList.isNotEmpty ? widget.optionList[0] : null;
    dropdownValue = optionList[0];

    //  widget.onValueChanged(optionList[0]);
    WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
      widget.onValueChanged(dropdownValue);
    });
  }

  @override
  Widget build(BuildContext context) {
    return SizedBox(
        height: widget.listHeight,
        width: widget.listLength,
        child: DropdownButton<String>(
          value: dropdownValue,
          style: TextStyle(fontSize: widget.fontSize, color: Colors.black),
          onChanged: (String? newValue) {
            setState(() {
              dropdownValue = newValue!;
            });
            widget.onValueChanged(newValue);
          },
          items: optionList.map<DropdownMenuItem<String>>((String value) {
            return DropdownMenuItem<String>(
              value: value,
              child: Text(value),
            );
          }).toList(),
        ));
  }
}