Advertisement
Guest User

images_list_imgur

a guest
Oct 19th, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 4.21 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:imgur_flutter/imgur_api.dart';
  3. import 'package:imgur_flutter/imgur_img_widget.dart';
  4. import 'package:imgur_flutter/models/image_model.dart';
  5. import 'package:imgur_flutter/style/mycolors.dart';
  6.  
  7. class ImageList extends StatefulWidget {
  8.   final List<ImageModel> images;
  9.   final String title;
  10.   final bool dispSearch;
  11.   final ImgurApi api;
  12.   final bool showFavorite;
  13.  
  14.   ImageList({
  15.     @required this.images,
  16.     @required this.title,
  17.     @required this.dispSearch,
  18.     @required this.api,
  19.     @required this.showFavorite,
  20.   });
  21.  
  22.   @override
  23.   State<StatefulWidget> createState() => _ImageListState();
  24. }
  25.  
  26. class _ImageListState extends State<ImageList> {
  27.   final TextEditingController _filter = TextEditingController();
  28.   String _searchTxt = "";
  29.   List<ImageModel> _filteredList = List();
  30.   Icon _searchIcon = Icon(Icons.search);
  31.   Widget _appBarTitle;
  32.  
  33.   @override
  34.   void initState() {
  35.     super.initState();
  36.     _filteredList = widget.images;
  37.     _appBarTitle = Text(widget.title);
  38.   }
  39.  
  40.   @override
  41.   void dispose() {
  42.     _filter.dispose();
  43.     super.dispose();
  44.   }
  45.  
  46.   Widget _buildList(int itemCount) {
  47.     if (widget.images == null ||
  48.         (widget.images.isEmpty && widget.showFavorite)) {
  49.       return Container(
  50.         width: 70,
  51.         height: 70,
  52.         alignment: Alignment.center,
  53.         child: CircularProgressIndicator(),
  54.       );
  55.     }
  56.     return ListView.builder(
  57.       physics: NeverScrollableScrollPhysics(),
  58.       shrinkWrap: true,
  59.       itemCount: itemCount,
  60.       itemBuilder: (BuildContext context, int index) {
  61.         if (!widget.dispSearch || _searchTxt.isEmpty) {
  62.           return ImgurImgWidget(
  63.             widget.api,
  64.             widget.images[index],
  65.             widget.showFavorite,
  66.           );
  67.         } else {
  68.           return ImgurImgWidget(
  69.             widget.api,
  70.             _filteredList[index],
  71.             widget.showFavorite,
  72.           );
  73.         }
  74.       },
  75.     );
  76.   }
  77.  
  78.   @override
  79.   Widget build(BuildContext context) {
  80.     var itemCount;
  81.     if (widget.dispSearch && _searchTxt.isNotEmpty) {
  82.       itemCount = _filteredList == null ? 0 : _filteredList.length;
  83.     } else {
  84.       itemCount = widget.images == null ? 0 : widget.images.length;
  85.     }
  86.  
  87.     List<Widget> widgetList = [_buildList(itemCount)];
  88.  
  89.     return Container(
  90.       child: CustomScrollView(
  91.         slivers: <Widget>[
  92.           SliverAppBar(
  93.             title: _appBarTitle,
  94.             leading: widget.dispSearch
  95.                 ? IconButton(
  96.                     icon: _searchIcon,
  97.                     onPressed: _searchPressed,
  98.                   )
  99.                 : Container(),
  100.             automaticallyImplyLeading: false,
  101.             floating: true,
  102.             backgroundColor: MyColors.frame,
  103.             pinned: widget.dispSearch,
  104.           ),
  105.           SliverList(
  106.               delegate: SliverChildListDelegate(
  107.             <Widget>[Column(children: widgetList)],
  108.           )),
  109.         ],
  110.       ),
  111.     );
  112.   }
  113.  
  114.   _searchInGallery() async {
  115.     if (_filter.text.isEmpty) {
  116.       setState(() {
  117.         _searchTxt = "";
  118.         _filteredList = widget.images;
  119.       });
  120.     } else {
  121.       _searchTxt = _filter.text;
  122.       _filteredList = await widget.api.searchGallery(_searchTxt);
  123.       setState(() {});
  124.     }
  125.   }
  126.  
  127.   void _searchPressed() {
  128.     setState(() {
  129.       if (_searchIcon.icon == Icons.search) {
  130.         _searchIcon = Icon(Icons.close);
  131.         _appBarTitle = TextField(
  132.           style: TextStyle(color: Colors.white),
  133.           controller: _filter,
  134.           autofocus: true,
  135.           onSubmitted: (String value) {
  136.             _searchTxt = value;
  137.             _searchInGallery();
  138.           },
  139.           decoration: InputDecoration(
  140.             suffixIcon: IconButton(
  141.               icon: Icon(Icons.search),
  142.               onPressed: _searchInGallery,
  143.             ),
  144.             border: InputBorder.none,
  145.             hintText: "Search...",
  146.           ),
  147.         );
  148.       } else {
  149.         _searchIcon = Icon(Icons.search);
  150.         _appBarTitle = Text(widget.title);
  151.         _filteredList = widget.images;
  152.         _searchTxt = "";
  153.         _filter.clear();
  154.       }
  155.     });
  156.   }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement