Переменная Flutter Pass в классе SearchDelegate дает ошибку - PullRequest
0 голосов
/ 09 июля 2019

Я новичок в трепетании, у меня проблема с передачей данных в мой класс делегата поиска. Проблема в том, что у меня есть две вкладки, и я хочу искать в активной вкладке. Поэтому я пытаюсь отправить переменную, которая сообщает, какая это вкладка и какую таблицу искать.

Вот как выглядит мой код:

    class HomePage extends StatefulWidget {
                  static final String routeName = 'home';

                  @override
                  State<StatefulWidget> createState() {
                    return new _HomePageState();
                  }
                }

                class _HomePageState extends State<HomePage> with TickerProviderStateMixin {

                  var activeTab = "activity";

                  var _authToken, _id, _name, _emails, _userImage;

                  @override
                  void initState() {
                    super.initState();
                    tabController = TabController(vsync: this, length: 2)..addListener(() {
                        setState(() {
                          switch (tabController.index) {
                            case 0:
                              activeTab = "activity";
                              break;
                            case 1:
                              activeTab = "subparticipants";
                              break;
                          }
                        });
                      });
                  }



                  @override
                  Widget build(BuildContext context) {
                    return new Scaffold(
                      key: _scaffoldKey,
                      // appBar: new AppBar(
                      //   title: Text('Dashboard'),
                      // ),
                      body: DefaultTabController(
                        length: 2,
                        child: Scaffold(
                          appBar: AppBar(
                            bottom: TabBar(
                              labelColor: Color(0xFFFFFFFF),
                              indicatorSize: TabBarIndicatorSize.tab,
                              tabs: [
                                //Tab(icon: Icon(Icons.directions_car)),
                                Tab(
                                  text: "Activity Zone",
                                ),
                                Tab(
                                  text: "Sub Participant",
                                )
                              ],
                              controller: tabController,
                            ),
                            title: Text(
                              'Dashboard',
                              style: new TextStyle(
                                color: const Color(0xFFFFFFFF),
                                fontSize: 20.0,
                                fontWeight: FontWeight.w600,
                                letterSpacing: 0.3,
                              ),
                            ),
                            actions: <Widget>[
                              IconButton(
                                icon: Icon(Icons.search),
                                onPressed: () {
                                  showSearch(context: context, delegate: DataSearch(activeTab));
                                },
                              )
                            ],
                          ),
                          body: TabBarView(
                            controller: tabController,
                            children: [
                              TabActivity(),
                              TabSubparticipant(),
                            ],
                          ),
                          floatingActionButton: FloatingActionButton(
                              onPressed: () {
                                print(
                                    'Current Index: $activeTab');
                              },
                            ),
                          drawer: _buildDrawer(context),
                        ),
                      ),
                    );
                  }
                }
     class DataSearch extends SearchDelegate{
              final String activeTab;
              DataSearch(this.activeTab);

              @override
              List<Widget> buildActions(BuildContext context){
                return [
                  IconButton(
                    icon: Icon(Icons.arrow_back),
                    onPressed: (){
                      query=activeTab;
                    },
                  )
                ];
              }

              @override
              Widget buildLeading(BuildContext context) => IconButton(
                    icon: Icon(Icons.close),
                    onPressed: () => Navigator.of(context).pop(),
                  );

              @override
              Widget buildResults(BuildContext context) => Text('Result');

              @override
              Widget buildSuggestions(BuildContext context) {
                return Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text(
                    'Search by job id, asset name, client name $query',
                    style: new TextStyle(
                        color: Colors.black, fontWeight: FontWeight.bold, fontSize: 22.0),
                  ),
                );
              }
            }

Когда я пытаюсь получить $ activeTab и показать его в запросе или где-то еще, он просто выдает ошибку:

flutter: The following assertion was thrown building _SearchPage<dynamic>(dirty, dependencies:
flutter: [_LocalizationsScope-[GlobalKey#a02e3], _InheritedTheme], state: _SearchPageState<dynamic>#eceaa):
flutter: 'package:flutter/src/widgets/basic.dart': Failed assertion: line 6173 pos 15: 'child != null': is

Я немного запутался, как мне передать ему значение. Я видел некоторые подобные вопросы, но они не помогают. Как этот или этот вопрос . Ни у одного из них нет ни одной из этих ошибок. Подскажите, пожалуйста, что я делаю не так. В чем проблема? Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 июля 2019

Ну, для кого-то, кто глуп, как я, и имеет ту же проблему, что и я, вот как вы можете решить эту проблему, Поэтому я не передавал правильное значение делегату поиска и не собирал его должным образом. Вот фиксированная часть кода

   class DataSearch extends SearchDelegate {
      DataSearch({
        @required this.activeTab,
      });

  final activeTab;

@override
  Widget buildResults(BuildContext context) {
        if (activeTab == "subparticipants") {
...... .
....
..




...