Używam autouzupełniania textField w moim trzeprzewowym zastosowaniu. Podczas pisania tekstu w polu TextField użytkownik otrzymuje sugestie (Via JSON). Następnie użytkownik powinien kliknąć na sugestię i powinno być przekazywane do "po drugiej stronie". Jednocześnie kraj wybranego gracza powinien być również przekazany do "po drugiej stronie".

W części elementów próbowałem zintegrować mój plan, ale to nie działa. "Po drugiej stronie" nie zaczyna się. Czy możesz tutaj pomóc?

To jest mój kod:

@override
  Widget build(BuildContext context) {
  return Scaffold(
    resizeToAvoidBottomPadding: false,
    appBar: AppBar(
      title: Text('Search'),
    ),
    body: new Center(
        child: new Column(children: <Widget>[
          new Column(children: <Widget>[
            searchTextField = AutoCompleteTextField<PlayersForSearch>(
                style: new TextStyle(color: Colors.black, fontSize: 16.0),
                decoration: new InputDecoration(
                    suffixIcon: Container(
                      width: 85.0,
                      height: 60.0,
                    ),
                    contentPadding: EdgeInsets.fromLTRB(10.0, 30.0, 10.0, 20.0),
                    filled: true,
                    hintText: 'Search Player Name',
                    hintStyle: TextStyle(color: Colors.black)),
                itemSubmitted: (item) {
                  SecondPage(item.country);
                  MaterialPageRoute(builder: (context) => SecondPage(item.country));

                  setState(() => searchTextField.textField.controller.text =
                      item.autocompleteterm);
                },
                clearOnSubmit: false,
                key: key,
                suggestions: PlayerViewModel.player_search,
                itemBuilder: (context, item) {
                  return Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: <Widget>[
                      Text(item.autocompleteterm,
                        style: TextStyle(
                            fontSize: 16.0
                        ),),
                      Padding(
                        padding: EdgeInsets.all(15.0),
                      ),
                      Text(item.country,
                      )
                    ],
                  );
                },
                itemSorter: (a, b) {
                  return a.autocompleteterm.compareTo(b.autocompleteterm);
                },
                itemFilter: (item, query) {
                  return item.autocompleteterm
                      .toLowerCase()
                      .startsWith(query.toLowerCase());
                }),
          ]),
        ])));
  }
0
Timitrov 14 kwiecień 2021, 16:24

2 odpowiedzi

Najlepsza odpowiedź

Wierzę, czego brakuje Navigator.push MaterialPageRoute nie umiesz się na stos stron / tras.

Przykład

Po skupieniu się na polu tekstowym i naciśnij ENTER, przejdziemy do SecondPage za pomocą wartości TextFormField.

import 'package:flutter/material.dart';

class NavTextFieldPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nav TextField Submit'),
      ),
      body: NavTextfieldExample(),
    );
  }
}

class NavTextfieldExample extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.spaceEvenly,
      children: [
        TextFormField(
          decoration: InputDecoration(
            labelText: 'Navigate to next page',
          ),
          initialValue: 'Japan',
          onFieldSubmitted: (item) {
            /// Using default Navigator from Scaffold, *push* onto stack SecondPage
            Navigator.of(context).push(
                MaterialPageRoute(
                    builder: (context) => SecondPage(item)));
          },
        )
      ],
    );
  }
}

class SecondPage extends StatelessWidget {
  final String country;

  SecondPage(this.country);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Nav Second Page'),
      ),
      body: Center(
        child: Text('Country: $country'),
      ),
    );
  }
}

Powyższy element klucza to:

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

Który używa obiektu Navigator, aby pchnąć trasy na stosie tras (tj. Strony).

1
Baker 15 kwiecień 2021, 02:55

Spróbuj wykonać następujące czynności :

  1. . Utwórz sekundę.dart.
  2. . umieścić w widget bezstanowego lub stanowego
  3. . Utwórz trasę w materialapach ()
-1
Tommy lee kooseenlin 14 kwiecień 2021, 17:16