#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