Перестройка виджета флаттера при нажатии или отпускании виджета TextField - PullRequest
0 голосов
/ 11 марта 2020

Я столкнулся с проблемой, которую виджет перестраивает всякий раз, когда я нажимаю на textField. а также при отпускании клавиатуры

я проверил этот ответ , но он не работает.

Вот виджет

class ListSearch extends StatefulWidget {
  @override
  _ListSearchState createState() _ListSearchState();
}

class _ListSearchState extends State<ListSearch> {
   @override
  Widget build(BuildContext context) { print('rebuild....'); 
    return MaterialApp(
        theme: ThemeData(fontFamily: "Lato"),
        home: Scaffold(
          appBar: AppBarBuilder.getAppBar(context, "Listings", null),
          body: SingleChildScrollView(
            child: Column(
              children: <Widget>[
                TextField(
                maxLines: 1,
                textInputAction: TextInputAction.search,
                onChanged: (val) {applyFilter(val); },
                cursorColor: Colors.blue,
                controller: searchController,
                style: TextStyle(
                  color: Colors.black,
                  fontSize: 16.0,
                ),
                decoration: InputDecoration(
                  focusedBorder: InputBorder.none,
                  border: InputBorder.none,
                  alignLabelWithHint: false,
                  hintText: "Search",
                ),
              ),
                Container(height: 600.0, child: buildLists()),
              ],
            ),
          ),
        ),
    );
  }
}

Есть ли какое-нибудь решение для этого?

Обновление

также при переходе на эту страницу он строит дважды

Navigator.of(context).push(MaterialPageRoute(builder: (context) => ListSearch()));

1 Ответ

1 голос
/ 11 марта 2020

Проверено, что ваш код не перестраивает виджет снова до горячей перезагрузки applyFilter метод, если вы используете setstate, он перезагрузит виджет

import 'package:flutter/material.dart';

class ListSearch extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return ListSearchState();
  }
}

class ListSearchState extends State<ListSearch> {

  TextEditingController _searchController = TextEditingController();
  @override
  Widget build(BuildContext context) {
   print('rebuild....');
  return MaterialApp(
    debugShowCheckedModeBanner: false,
    theme: ThemeData(fontFamily: "Lato"),
    home: Scaffold(
      appBar: AppBar(
        title: Text("Listing"),
        centerTitle: true,
      ),
      body: SingleChildScrollView(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: <Widget>[

           TextField(
                maxLines: 1,
                textInputAction: TextInputAction.search,
                onChanged: (val) {
                  //applyFilter(val);
                },
                cursorColor: Colors.blue,
                controller: _searchController,
                style: TextStyle(
                  color: Colors.black,
                  fontSize: 16.0,
                ),
                decoration: InputDecoration(
                  focusedBorder: InputBorder.none,
                  border: InputBorder.none,
                  alignLabelWithHint: false,
                  hintText: "Search",
                ),
              ),

            Container(height: 600.0, child: Text("Define you list widget")
           // buildLists()
            ),
          ],
        ),
      ),
    ),
  );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...