как добавить панель поиска к дрожанию экрана / дротику - PullRequest
0 голосов
/ 14 июля 2020

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

Например, если я вставлю «Париж» в строку поиска, он покажет мне все виджеты, содержащие это слово «Париж», но не другие виджеты.

Виджеты загружаются в ListViewBuilder

Вот код, используемый для этого экрана.

import 'package:flutter/material.dart';
import 'package:taamin/components/loading_widget.dart';
import 'package:taamin/components/offer_widget.dart';
import 'package:taamin/constants/toast.dart';
import 'package:taamin/repository/offers_repository.dart';
import 'package:provider/provider.dart';
import 'package:align_positioned/align_positioned.dart';


class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  ScrollController _scrollController = ScrollController();
  OffersRepository _offers;
  bool _getData = true;
  bool _first = true;

  @override
  void initState() {
    _scrollController.addListener(() async {
      if (_scrollController.position.maxScrollExtent -
          _scrollController.position.pixels <=
          -50 &&
          _getData == true) {
        print('GET MORE MORE');
        _getData = false;
        if (await _offers.getOffers(_offers.list.last.id)) {
          _getData = true;
        } else {
          toast('Nothing to load');
        }
      }
    });
    super.initState();
  }
  @override
  Widget build(BuildContext context) {
    _offers = Provider.of<OffersRepository>(context);
    print(_offers.list.length.toString() + ' length');
    if (_offers.list.isEmpty && _first) {
      _first = false;
      _offers.getOffers(_offers.list.length);
      return Container(child: LoadingWidget());
    }

    return Container(
      padding: EdgeInsets.fromLTRB(5, 5, 5, 0),
      child: Stack(children: <Widget>[
        ListView.builder(
            physics: BouncingScrollPhysics(),
            itemCount: _offers.list.length,
            controller: _scrollController,
            itemBuilder: (context, index) => OfferWidget(_offers.list[index])),
        _offers.state == OffersPageState.Loading
            ? AlignPositioned(
            alignment: Alignment.bottomCenter,
            child: Container(height: 50, width: 50, child: LoadingWidget()))
            : Container()
      ]),
    );
  }
  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }
}
'''





Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...