vietmap_reorderable_list 0.0.6 copy "vietmap_reorderable_list: ^0.0.6" to clipboard
vietmap_reorderable_list: ^0.0.6 copied to clipboard

A new Flutter reordable list package project.

example/lib/main.dart

import 'package:flutter/material.dart' hide ReorderableListView;
import 'package:intl/intl.dart';
import 'package:vietmap_reorderable_list/widgets/vietmap_reorderable_list.dart';

void main() => runApp(const ReorderableApp());

class ReorderableApp extends StatelessWidget {
  const ReorderableApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('ReorderableListView Sample')),
        body: const ReorderableExample(),
      ),
    );
  }
}

class MockData {
  final String name;

  final int timeStamp;
  MockData({required this.name, required this.timeStamp});
}

class ReorderableExample extends StatefulWidget {
  const ReorderableExample({super.key});

  @override
  State<ReorderableExample> createState() => _ReorderableListViewExampleState();
}

class _ReorderableListViewExampleState extends State<ReorderableExample> {
  final List<int> _items = List<int>.generate(50, (int index) => index);
  List<GlobalKey> itemKeys = [];
  ScrollController scrollController = ScrollController();
  final List<MockData> data = [
    MockData(name: 'Item 1', timeStamp: 1710992339000),
    MockData(name: 'Item 2', timeStamp: 1710993339000),
    MockData(name: 'Item 3', timeStamp: 1710994339000),
    MockData(name: 'Item 4', timeStamp: 1710995339000),
    MockData(name: 'Item 5', timeStamp: 1710996339000),
    MockData(name: 'Item 6', timeStamp: 1710997339000),
    MockData(name: 'Item 7', timeStamp: 1710998339000),
    MockData(name: 'Item 8', timeStamp: 1710999339000),
    MockData(name: 'Item 9', timeStamp: 1711000339000),
    MockData(name: 'Item 10', timeStamp: 1711001339000),
    MockData(name: 'Item 11', timeStamp: 1711002339000),
    MockData(name: 'Item 12', timeStamp: 1711003339000),
    MockData(name: 'Item 13', timeStamp: 1711004339000),
    MockData(name: 'Item 14', timeStamp: 1711005339000),
    MockData(name: 'Item 15', timeStamp: 1711006339000),
    MockData(name: 'Item 16', timeStamp: 1711007339000),
    MockData(name: 'Item 17', timeStamp: 1711008339000),
    MockData(name: 'Item 18', timeStamp: 1711009339000),
    MockData(name: 'Item 19', timeStamp: 1711010339000),
    MockData(name: 'Item 20', timeStamp: 1711011339000),
    MockData(name: 'Item 21', timeStamp: 1711012339000),
    MockData(name: 'Item 22', timeStamp: 1711013339000),
    MockData(name: 'Item 23', timeStamp: 1711014339000),
    MockData(name: 'Item 24', timeStamp: 1711015339000),
    MockData(name: 'Item 25', timeStamp: 1711016339000),
    MockData(name: 'Item 26', timeStamp: 1711017339000),
    MockData(name: 'Item 27', timeStamp: 1711018339000),
    MockData(name: 'Item 28', timeStamp: 1711019339000),
    MockData(name: 'Item 29', timeStamp: 1711020339000),
    MockData(name: 'Item 30', timeStamp: 1711021339000),
    MockData(name: 'Item 31', timeStamp: 1711022339000),
    MockData(name: 'Item 32', timeStamp: 1711023339000),
    MockData(name: 'Item 33', timeStamp: 1711024339000),
    MockData(name: 'Item 34', timeStamp: 1711025339000),
    MockData(name: 'Item 35', timeStamp: 1711026339000),
    MockData(name: 'Item 36', timeStamp: 1711027339000),
    MockData(name: 'Item 37', timeStamp: 1711028339000),
    MockData(name: 'Item 38', timeStamp: 1711029339000),
    MockData(name: 'Item 39', timeStamp: 1711030339000),
    MockData(name: 'Item 40', timeStamp: 1711031339000),
    MockData(name: 'Item 41', timeStamp: 1711032339000),
    MockData(name: 'Item 42', timeStamp: 1711033339000),
    MockData(name: 'Item 43', timeStamp: 1711034339000),
    MockData(name: 'Item 44', timeStamp: 1711035339000),
    MockData(name: 'Item 45', timeStamp: 1711036339000),
    MockData(name: 'Item 46', timeStamp: 1711037339000),
    MockData(name: 'Item 47', timeStamp: 1711038339000),
    MockData(name: 'Item 48', timeStamp: 1711039339000),
    MockData(name: 'Item 49', timeStamp: 1711040339000),
    MockData(name: 'Item 50', timeStamp: 1711041339000),
  ];
  @override
  void initState() {
    scrollController.addListener(() {
      // print('+++++++++++++++++++++++++++++++++++++++++');
      // print(scrollController.position.pixels);
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    final ColorScheme colorScheme = Theme.of(context).colorScheme;
    final Color oddItemColor = colorScheme.primary.withOpacity(0.05);
    final Color evenItemColor = colorScheme.primary.withOpacity(0.15);

    return Container(
      color: Colors.red.withOpacity(0.2),
      child: Stack(
        children: [
          Positioned(
            top: 0,
            left: 95,
            child: Container(
              width: 5,
              height: MediaQuery.sizeOf(context).height,
              color: Colors.red,
            ),
          ),
          VietmapReorderableListView(
            scrollController: scrollController,
            padding: const EdgeInsets.symmetric(horizontal: 40),
            onReorderStart: (index) {
              // print('-----------------zzz');
            },
            children: List.generate(50, (index) {
              itemKeys.add(GlobalKey());
              return Listener(
                onPointerMove: (event) {
                  // print(event.position.dy);
                  // print('-----------------Pointer Move-----------------');
                },
                key: itemKeys[index],
                // onVerticalDragUpdate: (details) {
                //   print('---------------d-----------------');
                // },
                child: ListTile(
                  contentPadding: EdgeInsets.zero,
                  tileColor: Colors.transparent,
                  leading: Text(formatTime(data[index].timeStamp)),
                  title: Container(
                      padding: const EdgeInsets.symmetric(
                          horizontal: 10, vertical: 15),
                      decoration: BoxDecoration(
                        color:
                            _items[index].isOdd ? oddItemColor : evenItemColor,
                      ),
                      child: Text('Item ${_items[index]}')),
                ),
              );
            }),
            onReordering: (index, dragIndex) {
              print('-----------------reordering$index, $dragIndex');

              MockData nearestTopData = data[dragIndex - 2];
              MockData currentData = data[dragIndex - 1];
              MockData nearestBottomData = data[dragIndex];
              // print(nearestTopData.name);
              // print(currentData.name);
              // print(nearestBottomData.name);
              // print('----------------------------------');
              // print(_getPosition(dragIndex - 2));
              // print(_getPosition(dragIndex - 1));
              // print(_getPosition(dragIndex));
              // print('--------------------enda--------------');
              // print(nearestTopData.timeStamp);

              // print(nearestBottomData.timeStamp);
            },
            onReorderEnd: (index) {
              // print('-----------------end');
            },
            onReorder: (int oldIndex, int newIndex) {
              setState(() {
                if (oldIndex < newIndex) {
                  newIndex -= 1;
                }
                final int item = _items.removeAt(oldIndex);
                _items.insert(newIndex, item);
                data.insert(newIndex, data.removeAt(oldIndex));
              });
            },
          ),
        ],
      ),
    );
  }

  double _getPosition(int index) {
    RenderBox box =
        itemKeys[index].currentContext!.findRenderObject() as RenderBox;
    Offset currentPosition =
        box.localToGlobal(Offset.zero); //this is global position
    double y = currentPosition.dy; //this is y - I think it's what you want
    return y;
  }

  String formatTime(int timeStamp) {
    return DateFormat('HH:mm aa')
        .format(DateTime.fromMillisecondsSinceEpoch(timeStamp));
  }
}
1
likes
135
points
36
downloads

Publisher

unverified uploader

Weekly Downloads

A new Flutter reordable list package project.

Homepage
Repository (GitHub)
View/report issues

Topics

#vietmap #map #flutter-map

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

flutter

More

Packages that depend on vietmap_reorderable_list