Как использовать пользовательское текстовое поле в другом классе StatefulWidget с большим количеством параметров?

#flutter #android-layout #flutter-layout #flutter-test

#flutter #android-layout #flutter-layout #flutter-тест

Вопрос:

Сегодня я создал собственное пользовательское текстовое поле и хочу использовать его на многих страницах, но оно содержит некоторые аргументы.
Вы можете увидеть здесь

 import 'package:flutter/material.dart';

class RequiredText extends StatefulWidget {

@override
_RequiredTextState createState() => _RequiredTextState();
}

class _RequiredTextState extends State<RequiredText> {
final myController = TextEditingController();

@override
void dispose() {
myController.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {
String LabelTextField;
String HelperTextField;
Color ColorBorder;
Color ColorField;
Color ColorCursor;

return Padding(
  padding: const EdgeInsets.only(left: 18.0),
  child: TextField(
    cursorColor: ColorCursor,
    style: TextStyle(
      color: ColorField,
    ),
    keyboardType: TextInputType.number,
    textInputAction: TextInputAction.next,
    controller: myController,
    decoration: InputDecoration(
        enabledBorder: new OutlineInputBorder(
            borderSide: BorderSide(width: 1.5, color: ColorBorder)),
        border: OutlineInputBorder(
            borderSide: new BorderSide(color: Colors.cyan[200]),
            borderRadius: new BorderRadius.all(Radius.circular(20.0))),
        helperText: HelperTextField,
        labelText: LabelTextField,
        labelStyle: TextStyle(
          color: Colors.black26,
          fontSize: 20.0,
          fontFamily: 'DancingScript',
        ),
        icon: Icon(
          Icons.apps,
        )),
  ),
);
}
}
  

Но я хочу использовать это в моем классе main.dart и на других страницах тоже.
Но он показывает ошибки

 import 'package:AllInOneCalci/CustomTextFields.dart';
import 'package:AllInOneCalci/customAppBar.dart';
import 'package:flutter/material.dart';

class BMICalcUI extends StatefulWidget {
@override
_BMICalcUIState createState() => _BMICalcUIState();
}

class _BMICalcUIState extends State<BMICalcUI> {
 @override
 Widget build(BuildContext context) {
 double AppBarHeight = MediaQuery.of(context).size.height;
 return Scaffold(
   appBar: customAppBar(
    height: (AppBarHeight / 3) * 0.4,
    child: Row(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Padding(
          padding: const EdgeInsets.only(top: 18.0),
          child: Text(
            'All In One Cali',
            style: TextStyle(
                color: Colors.black,
                fontSize: 35.0,
                fontFamily: 'DancingScript',
                fontWeight: FontWeight.bold),
          ),
        ),
      ],
    ),
  ),
  body: Padding(
    padding: const EdgeInsets.only(top: 18.0),
    child: Container(
      width: 300.0,
      child: Column(
        children: [
          RequiredText('Height', 'Input height in meters', Colors.cyan[200],
              Colors.redAccent, Colors.redAccent),
        ],
      ),
    ),
  ),
);
 }
}
  

Также я хочу использовать это на многих своих страницах. Можете ли вы помочь мне, как я могу это сделать?
Это было бы очень полезно для меня. Я застрял здесь

 RequiredText('Height', 'Input height in meters', Colors.cyan[200],
          Colors.redAccent, Colors.redAccent),
  

В этой строке отображается ошибка.

Ответ №1:

 String LabelTextField;
String HelperTextField;
Color ColorBorder;
Color ColorField;
Color ColorCursor;
  

вы упомянули параметр, но не инициализировали его ,
сделайте это таким образом

 class RequiredText extends StatefulWidget {
String LabelTextField;
String HelperTextField;
Color ColorBorder;
Color ColorField;
Color ColorCursor;
RequiredText(this.LabelTextField,this.HelperTextField,this.ColorBorder,this.ColorField,this.ColorCursor);
@override
_RequiredTextState createState() => _RequiredTextState();
}

class _RequiredTextState extends State<RequiredText> {
final myController = TextEditingController();

@override
void dispose() {
myController.dispose();
super.dispose();
}

@override
Widget build(BuildContext context) {


return Padding(
  padding: const EdgeInsets.only(left: 18.0),
  child: TextField(
    cursorColor: widget.ColorCursor,
    style: TextStyle(
      color: widget.ColorField,
    ),
    keyboardType: TextInputType.number,
    textInputAction: TextInputAction.next,
    controller: myController,
    decoration: InputDecoration(
        enabledBorder: new OutlineInputBorder(
            borderSide: BorderSide(width: 1.5, color: widget.ColorBorder)),
        border: OutlineInputBorder(
            borderSide: new BorderSide(color: Colors.cyan[200]),
            borderRadius: new BorderRadius.all(Radius.circular(20.0))),
        helperText: widget.HelperTextField,
        labelText: widget.LabelTextField,
        labelStyle: TextStyle(
          color: Colors.black26,
          fontSize: 20.0,
          fontFamily: 'DancingScript',
        ),
        icon: Icon(
          Icons.apps,
        )),
  ),
);
}
}