Flutter передает ввод текстового поля другому виджету через навигацию.push

#flutter

#flutter

Вопрос:

Мне нужно передать любой пользовательский тип в текстовом поле, а затем использовать его в другом виджете с отслеживанием состояния. Как я могу передать данные в MyController текстового поля. Я использую это для поиска API на основе пользовательского ввода и должен передавать эти данные во время перехода на другой экран

 TextField(
controller: myController,
decoration: InputDecoration.collapsed(
hintText: ' Search by Product Name',),
onSubmitted: (value) { Navigator.push(context, MaterialPageRoute(builder: (context)=> ProductBySearch()));},),
 
 class ProductBySearch extends StatefulWidget {
  @override
  _ProductBySearchState createState() => _ProductBySearchState();
}

class _ProductBySearchState extends State<ProductBySearch> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(

      body: FutureBuilder<List<Product>>(
        future: getProductByBanner1(http.Client(), mycontroller),
        builder: (context, snapshot) {
          if (snapshot.hasError) print(snapshot.error);
          if (snapshot.hasData) {
            return ProductByBanner1Grid(
              product: snapshot.data,
            );
          } else {
            return Center(
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    CircularProgressIndicator(),
                    Container(
                      height: 15,
                      width: double.infinity,
                    ),
                    Text('Factory2Homes'),
                  ],
                ));
          }
        },
      ),
    );
  }
}
 

Ответ №1:

Вы можете передать данные в конструктор Widget встроенного MaterialPageRoute конструктора. Эти данные являются самими myController.text собой.

 class ProductBySearch extends StatefulWidget {
  const ProductBySearch({Key key, @required this.productName}) : super(key: key);

  final String productName;

  // (...)
}
 

И затем

 MaterialPageRoute(builder: (context) => ProductBySearch(
  productName: myController.text,
))
 

Я приглашаю вас прочитать руководство по отправке данных на новый экран Flutter Cookbook. Это должно достаточно хорошо объяснить вам концепцию.

Комментарии:

1. Спас мой день! 🙂 . Я был смущен тем, как передавать данные, если нет такого класса, как Todo