Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import 'package:flutter/material.dart';
- import 'package:my_app/ItemDetailsPage.dart';
- import 'package:my_app/item_model.dart';
- import 'package:flutter/scheduler.dart';
- import 'dart:convert';
- class ItemsListPage extends StatefulWidget {
- ItemsListPage({Key key, this.title}) : super(key: key);
- final String title;
- @override
- _ItemsListPageState createState() => _ItemsListPageState();
- }
- class _ItemsListPageState extends State<ItemsListPage> {
- List<ItemModel> _items = List();
- // Hard-coded list of [ItemModel] to be displayed on our page.
- final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
- new GlobalKey<RefreshIndicatorState>();
- Future _fetchData() async {
- _items = [
- ItemModel(0, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #1',
- 'Some info', 'вул. Тестова 25'),
- ItemModel(1, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #2',
- 'Some info', 'просп. Генерала морських та сухопутних сил 254'),
- ItemModel(2, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #3',
- 'Some info', 'вул. Тестова 13'),
- ItemModel(3, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #4',
- 'Some info', 'вул. Вигадана 345'),
- ItemModel(4, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #5',
- 'Some info', 'вул. Велика та дуже довга вулиця 235'),
- ItemModel(5, Icons.delivery_dining, Color(0xFF4006400), 'Замовлення #6',
- 'Some info', 'вул. Тестова 35'),
- ItemModel(6, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #7',
- 'Some info', 'вул. Тестова 79'),
- ItemModel(7, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #8',
- 'Some info', 'вул. Тестова 23'),
- ItemModel(8, Icons.delivery_dining, Color(0xFFd95d39), 'Замовлення #9',
- 'Some info', 'вул. Тестова 456'),
- ItemModel(9, Icons.delivery_dining, Color(0xFF4ffd700), 'Замовлення #10',
- 'Some info', 'вул. Тестова 456'),
- ];
- }
- @override
- void initState() {
- super.initState();
- SchedulerBinding.instance.addPostFrameCallback((_) {
- _refreshIndicatorKey.currentState?.show();
- });
- }
- @override
- Widget build(BuildContext context) {
- return RefreshIndicator(
- key: _refreshIndicatorKey,
- onRefresh: _fetchData,
- child: ListView.builder(
- // Widget which creates [ItemWidget] in scrollable list.
- itemCount: _items.length, // Number of widget to be created.
- itemBuilder: (context,
- itemIndex) => // Builder function for every item with index.
- ItemWidget(_items[itemIndex], () {
- _onItemTap(context, itemIndex);
- })),
- );
- }
- // 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.
- _onItemTap(BuildContext context, int itemIndex) {
- Navigator.of(context).push(MaterialPageRoute(
- builder: (context) => ItemDetailsPage(_items[itemIndex])));
- }
- }
- // StatelessWidget with UI for our ItemModel-s in ListView.
- class ItemWidget extends StatelessWidget {
- const ItemWidget(this.model, this.onItemTap, {Key key}) : super(key: key);
- final ItemModel model;
- final Function onItemTap;
- @override
- Widget build(BuildContext context) {
- return InkWell(
- // Enables taps for child and add ripple effect when child widget is long pressed.
- onTap: onItemTap,
- child: Card(
- child: ListTile(
- // Useful standard widget for displaying something in ListView.
- leading: Icon(
- model.icon,
- color: model.iconColor,
- size: 30,
- ),
- title: Text(
- model.title,
- style: TextStyle(fontSize: 20),
- ),
- subtitle: Text(model.adress),
- trailing: Icon(Icons.double_arrow_outlined),
- ),
- ),
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement