Advertisement
Wolf2012

Refresh list

Jan 7th, 2021
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 4.24 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:my_app/ItemDetailsPage.dart';
  3. import 'package:my_app/item_model.dart';
  4. import 'package:flutter/scheduler.dart';
  5. import 'dart:convert';
  6.  
  7. class ItemsListPage extends StatefulWidget {
  8.   ItemsListPage({Key key, this.title}) : super(key: key);
  9.  
  10.   final String title;
  11.  
  12.   @override
  13.   _ItemsListPageState createState() => _ItemsListPageState();
  14.  
  15. }
  16.  
  17. class _ItemsListPageState extends State<ItemsListPage> {
  18.   List<ItemModel> _items = List();
  19. // Hard-coded list of [ItemModel] to be displayed on our page.
  20.   final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
  21.       new GlobalKey<RefreshIndicatorState>();
  22.  
  23.   Future _fetchData() async {
  24.     _items = [
  25.       ItemModel(0, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #1',
  26.           'Some info', 'вул. Тестова 25'),
  27.       ItemModel(1, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #2',
  28.           'Some info', 'просп. Генерала морських та сухопутних сил 254'),
  29.       ItemModel(2, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #3',
  30.           'Some info', 'вул. Тестова 13'),
  31.       ItemModel(3, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #4',
  32.           'Some info', 'вул. Вигадана 345'),
  33.       ItemModel(4, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #5',
  34.           'Some info', 'вул. Велика та дуже довга вулиця 235'),
  35.       ItemModel(5, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #6',
  36.           'Some info', 'вул. Тестова 35'),
  37.       ItemModel(6, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #7',
  38.           'Some info', 'вул. Тестова 79'),
  39.       ItemModel(7, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #8',
  40.           'Some info', 'вул. Тестова 23'),
  41.       ItemModel(8, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #9',
  42.           'Some info', 'вул. Тестова 456'),
  43.       ItemModel(9, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #10',
  44.           'Some info', 'вул. Тестова 456'),
  45.     ];
  46.   }
  47.  
  48.   @override
  49.   void initState() {
  50.     super.initState();
  51.     SchedulerBinding.instance.addPostFrameCallback((_) {
  52.       _refreshIndicatorKey.currentState?.show();
  53.     });
  54.   }
  55.  
  56.   @override
  57.   Widget build(BuildContext context) {
  58.     return RefreshIndicator(
  59.       key: _refreshIndicatorKey,
  60.       onRefresh: _fetchData,
  61.       child: ListView.builder(
  62.           // Widget which creates [ItemWidget] in scrollable list.
  63.           itemCount: _items.length, // Number of widget to be created.
  64.           itemBuilder: (context,
  65.                   itemIndex) => // Builder function for every item with index.
  66.               ItemWidget(_items[itemIndex], () {
  67.                 _onItemTap(context, itemIndex);
  68.               })),
  69.     );
  70.   }
  71.  
  72.   // Method which uses BuildContext to push (open) new MaterialPageRoute (representation of the screen in Flutter navigation model) with ItemDetailsPage (StateFullWidget with UI for page) in builder.
  73.   _onItemTap(BuildContext context, int itemIndex) {
  74.     Navigator.of(context).push(MaterialPageRoute(
  75.         builder: (context) => ItemDetailsPage(_items[itemIndex])));
  76.   }
  77. }
  78.  
  79. // StatelessWidget with UI for our ItemModel-s in ListView.
  80. class ItemWidget extends StatelessWidget {
  81.   const ItemWidget(this.model, this.onItemTap, {Key key}) : super(key: key);
  82.  
  83.   final ItemModel model;
  84.   final Function onItemTap;
  85.  
  86.   @override
  87.   Widget build(BuildContext context) {
  88.     return InkWell(
  89.       // Enables taps for child and add ripple effect when child widget is long pressed.
  90.       onTap: onItemTap,
  91.       child: Card(
  92.         child: ListTile(
  93.           // Useful standard widget for displaying something in ListView.
  94.           leading: Icon(
  95.             model.icon,
  96.             color: model.iconColor,
  97.             size: 30,
  98.           ),
  99.           title: Text(
  100.             model.title,
  101.             style: TextStyle(fontSize: 20),
  102.           ),
  103.           subtitle: Text(model.adress),
  104.           trailing: Icon(Icons.double_arrow_outlined),
  105.         ),
  106.       ),
  107.     );
  108.   }
  109. }
  110.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement