Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A discrete RangeSlider is not draggable inside a ListView. #51620

Open
Tracked by #125329
serhii-k opened this issue Feb 28, 2020 · 14 comments
Open
Tracked by #125329

A discrete RangeSlider is not draggable inside a ListView. #51620

serhii-k opened this issue Feb 28, 2020 · 14 comments
Labels
f: material design flutter/packages/flutter/material repository. found in release: 3.7 Found to occur in 3.7 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on team-design Owned by Design Languages team triaged-design Triaged by Design Languages team

Comments

@serhii-k
Copy link

A RangeSlider is awesome. But when its discrete version is put inside a ListView, an annoying bug arises. For simplicity, let's say we're using the Left-to-Right directionality.

  1. Let's visually cut the Starting Thumb vertically on 2 halves: if you touch its right half and begin to drag this thumb to the right - it doesn't start to move...
  2. The same happens with the Ending Thumb, if you touch its left half and begin to drag it to the left.
import 'package:flutter/material.dart';

class SimpleTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        padding: const EdgeInsets.only(top: 100.0),
        children: <Widget>[
          RangeTest(),
        ],
      ),
    );
  }
}

class RangeTest extends StatefulWidget {
  @override
  _RangeTestState createState() => _RangeTestState();
}

class _RangeTestState extends State<RangeTest> {
  var _values = RangeValues(2.0, 8.0);

  @override
  Widget build(BuildContext context) {
    return RangeSlider(
      values: _values,
      onChanged: (rangeValues) => setState(() {
        _values = rangeValues;
      }),
      min: 0.0,
      max: 10.0,
      divisions: 10,
    );
  }
}
@VladyslavBondarenko
Copy link

Hi @serhii-k
Could you please provide your flutter doctor -v and record a video with this bug?
I tested with stable v1.12.13+hotfix.8 on android emulator and the RangeSlider behavior inside of a ListView was the same as outside

@VladyslavBondarenko VladyslavBondarenko added the waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds label Feb 28, 2020
@serhii-k
Copy link
Author

serhii-k commented Feb 28, 2020

Hi @VladyslavBondarenko
Thank you for your reply!
Here is the flutter doctor -v (I'm testing on Android emulator api 27):

[✓] Flutter (Channel stable, v1.12.13+hotfix.8, on Mac OS X 10.12.6 16G2136, locale en-UA)
    • Flutter version 1.12.13+hotfix.8 at /Users/Project/development/flutter
    • Framework revision 0b8abb4724 (2 недели назад), 2020-02-11 11:44:36 -0800
    • Engine revision e1e6ced81d
    • Dart version 2.7.0

[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/Project/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-29, build-tools 29.0.3
    • ANDROID_HOME = /Users/Project/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 9.2)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 9.2, Build version 9C40b
    ✗ Flutter requires a minimum Xcode version of 11.0.0.
      Download the latest version or update via the Mac App Store.
    ! CocoaPods 1.5.3 out of date (1.6.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade:
        sudo gem install cocoapods

[✓] Android Studio (version 3.5)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 43.0.1
    • Dart plugin version 191.8593
    • Java version OpenJDK Runtime Environment (build 1.8.0_202-release-1483-b49-5587405)

[!] IntelliJ IDEA Community Edition (version 2017.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
    • For information about installing plugins, see
      https://flutter.dev/intellij-setup/#installing-the-plugins

[✓] Connected device (1 available)
    • Android SDK built for x86 • emulator-5554 • android-x86 • Android 8.1.0 (API 27) (emulator)

! Doctor found issues in 2 categories.

And a recording:

@no-response no-response bot removed the waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds label Feb 28, 2020
@serhii-k
Copy link
Author

By the way, I've also added onChangeStart and onChangeEnd callbacks. And here's the output (following this video):
1st wrong attempt (left thumb):
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(2.0, 8.0)
2nd wrong attempt (left thumb):
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(2.0, 8.0)
3rd wrong attempt (right thumb):
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(2.0, 8.0)
4th wrong attempt (right thumb):
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(2.0, 8.0)
1st correct attempt (left thumb):
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(2.0, 8.0)
I/flutter ( 8011): started RangeValues(2.0, 8.0)
I/flutter ( 8011): ended RangeValues(3.0, 8.0)
2nd correct attempt (right thumb):
I/flutter ( 8011): started RangeValues(3.0, 8.0)
I/flutter ( 8011): ended RangeValues(3.0, 8.0)
I/flutter ( 8011): started RangeValues(3.0, 8.0)
I/flutter ( 8011): ended RangeValues(3.0, 7.0)

So even for the last two correct attempts, there are unnecessary intermediate callbacks.

@VladyslavBondarenko
Copy link

VladyslavBondarenko commented Feb 28, 2020

@serhii-k
I managed to reproduce it.
The only case when I can't move it is when I click nearby the border of the circle from the center side and move to the center. The same with real device.
And yes, it doesn't happen when the RangeSlider isn't inside of a ListView

ezgif com-video-to-gif (1)

@VladyslavBondarenko VladyslavBondarenko added f: material design flutter/packages/flutter/material repository. framework flutter/packages/flutter repository. See also f: labels. labels Feb 28, 2020
@serhii-k
Copy link
Author

serhii-k commented Feb 28, 2020

A temporary workaround.

  1. Copy range_slider.dart completely to your project. Delete wrong imports. Import 'package:flutter/material.dart' instead.
  2. Find this initialization:
    _drag = HorizontalDragGestureRecognizer()
    Additionally add:
    ..dragStartBehavior = DragStartBehavior.down
    to it.

This is just a temporary solution. When in a scrollable parent, there is some issue with gesture recognizers inside the _RenderRangeSlider class.

Notice: this solution triggers some unnecessary intermediate calls to onChangeEnd() and onChangeStart() (_tap.onTapCancel followed by _drag.onStart).

@hiroshihorie
Copy link

hiroshihorie commented May 13, 2020

I think I'm having the same issue. RangeSlider in a Scrollable parent is such a common use case. I can't believe it still exists in 1.17 "Stable".

@VladyslavBondarenko VladyslavBondarenko added has reproducible steps The issue has been confirmed reproducible and is ready to work on found in release: 1.17 Found to occur in 1.17 found in release: 1.19 Found to occur in 1.19 labels May 13, 2020
@markusaksli-nc markusaksli-nc added the found in release: 1.21 Found to occur in 1.21 label Jul 20, 2020
@claudiorgh
Copy link

I'm still having this problem in:
[√] Flutter (Channel stable, 1.22.5, on Microsoft Windows

@ps-tech
Copy link

ps-tech commented Aug 19, 2022

Still having this prob!
Thanks for life saving solution @serhii-k

@koodimetsa
Copy link

Commenting to add visibility to this issue.

@maheshmnj
Copy link
Member

maheshmnj commented Jan 4, 2023

Hi @serhii-k, I verified the issue on the latest master 3.7 and it doesn't seem to reproduce. I believe the bug is fixed.

Screen.Recording.2023-01-03.at.9.27.01.PM.mov
code sample
import 'package:flutter/material.dart';

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

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

  static const String _title = 'Flutter Code Sample';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: _title,
      home: Scaffold(
        appBar: AppBar(title: const Text(_title)),
        body: const SimpleTest(),
      ),
    );
  }
}

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView(
        padding: const EdgeInsets.only(top: 100.0),
        children: const <Widget>[
          RangeTest(),
        ],
      ),
    );
  }
}

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

  @override
  _RangeTestState createState() => _RangeTestState();
}

class _RangeTestState extends State<RangeTest> {
  var _values = const RangeValues(2.0, 8.0);

  @override
  Widget build(BuildContext context) {
    return RangeSlider(
      values: _values,
      onChanged: (rangeValues) => setState(() {
        _values = rangeValues;
      }),
      min: 0.0,
      max: 10.0,
      divisions: 10,
    );
  }
}
flutter doctor -v (mac)
[✓] Flutter (Channel master, 3.7.0-13.0.pre.131, on macOS 13.1 22C65 darwin-arm64, locale en-IN)
    • Flutter version 3.7.0-13.0.pre.131 on channel master at /Users/mahesh/Development/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 0196e6050b (2 days ago), 2022-12-31 11:10:23 -0500
    • Engine revision 932591ec04
    • Dart version 3.0.0 (build 3.0.0-76.0.dev)
    • DevTools version 2.20.0
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks
      and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.74.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.56.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 13.1 22C65 darwin-arm64
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 108.0.5359.124

[✓] HTTP Host Availability
    • All required HTTP hosts are available
    
• No issues found!
[✓] Flutter (Channel stable, 3.3.9, on macOS 12.6 21G115 darwin-arm, locale en-IN)
    • Flutter version 3.3.9 on channel stable at /Users/mahesh/Development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b8f7f1f986 (24 hours ago), 2022-11-23 06:43:51 +0900
    • Engine revision 8f2221fbef
    • Dart version 2.18.5
    • DevTools version 2.15.0

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.70.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.53.20221101

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.6 21G115 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 107.0.5304.110

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

cc: @koodimetsa

Closing as this is no longer reproducible, Incase anyone still encounters the issue, then please feel free to write in the comments and we will reopen it.

Thank you.

@maheshmnj maheshmnj added the r: fixed Issue is closed as already fixed in a newer version label Jan 4, 2023
@maheshmnj maheshmnj changed the title A discrete RangeSlider inside a ListView. A discrete RangeSlid is not draggable inside a ListView. Jan 4, 2023
@koodimetsa
Copy link

@maheshmnj
Checked with 3.7 and this seems to still happen. To reproduce: a scrollable parent element(e.g. SingleChildScrollView) needs to have a child that has height enough for scroll to happen.

In this case RangeSlider doesn't work reliably.

@maheshmnj
Copy link
Member

@koodimetsa were you able to reproduce with the code sample I shared?
Also, does this reproduce on any specific device?

@koodimetsa
Copy link

koodimetsa commented Jan 25, 2023

@maheshmnj Yes, I used that code sample 👍🏼 It seems, that if the touch event starts from "inside" of the range slider, the drag event abruptly ends.
I have reproduced this with iOS simulator(latest version) and iPhone 13 mini running iOS 16.3.

Here is a video with an example:

Screen.Recording.2023-01-25.at.17.22.51.mov

@maheshmnj
Copy link
Member

maheshmnj commented Jan 26, 2023

Thanks for the update @koodimetsa, I was able to reproduce the issue on stable 3.7 and the master channel.

Screen.Recording.2023-01-26.at.3.13.33.PM.mov
flutter doctor -v
[✓] Flutter (Channel stable, 3.7.0, on macOS 13.1 22C65 darwin-arm64, locale en-IN)
    • Flutter version 3.7.0 on channel stable at /Users/mahesh/Development/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b06b8b2710 (3 days ago), 2023-01-23 16:55:55 -0800
    • Engine revision b24591ed32
    • Dart version 2.19.0
    • DevTools version 2.20.1

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.74.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.58.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 13.1 22C65
      darwin-arm64
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome
      109.0.5414.119

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!
[!] Flutter (Channel master, 3.7.0-28.0.pre.13, on macOS 13.1 22C65 darwin-arm64, locale en-IN)
    • Flutter version 3.7.0-28.0.pre.13 on channel master at /Users/mahesh/Development/flutter_master
    ! Warning: `flutter` on your path resolves to /Users/mahesh/Development/flutter/bin/flutter, which is not inside
      your current Flutter SDK checkout at /Users/mahesh/Development/flutter_master. Consider adding
      /Users/mahesh/Development/flutter_master/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/mahesh/Development/flutter/bin/dart, which is not inside your
      current Flutter SDK checkout at /Users/mahesh/Development/flutter_master. Consider adding
      /Users/mahesh/Development/flutter_master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision a04ab7129b (20 minutes ago), 2023-01-26 12:01:12 -0800
    • Engine revision 04f22beebb
    • Dart version 3.0.0 (build 3.0.0-166.0.dev)
    • DevTools version 2.20.1
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git"
      directly to perform update checks and upgrades.

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc4)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-33, build-tools 33.0.0-rc4
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Build 14A400
    • CocoaPods version 1.11.3

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.12+0-b1504.28-7817840)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.74.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.58.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • 026D5789-9E78-4AD5-B1B2-3F8D4E7F65E4 • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 13.1 22C65 darwin-arm64
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 109.0.5414.119

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

@maheshmnj maheshmnj reopened this Jan 26, 2023
@maheshmnj maheshmnj added found in release: 3.7 Found to occur in 3.7 and removed found in release: 1.17 Found to occur in 1.17 found in release: 1.19 Found to occur in 1.19 found in release: 1.21 Found to occur in 1.21 labels Jan 26, 2023
@maheshmnj maheshmnj removed the r: fixed Issue is closed as already fixed in a newer version label Jan 26, 2023
@maheshmnj maheshmnj changed the title A discrete RangeSlid is not draggable inside a ListView. A discrete RangeSlider is not draggable inside a ListView. Jan 26, 2023
@TahaTesser TahaTesser self-assigned this May 4, 2023
@TahaTesser TahaTesser removed their assignment Jun 19, 2023
@flutter-triage-bot flutter-triage-bot bot added multiteam-retriage-candidate team-design Owned by Design Languages team triaged-design Triaged by Design Languages team labels Jul 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
f: material design flutter/packages/flutter/material repository. found in release: 3.7 Found to occur in 3.7 framework flutter/packages/flutter repository. See also f: labels. has reproducible steps The issue has been confirmed reproducible and is ready to work on team-design Owned by Design Languages team triaged-design Triaged by Design Languages team
Projects
None yet
Development

No branches or pull requests

10 participants