A Flutter package that builds a list view and notifies when the widgets are on screen.

Overview

inview_notifier_list

Build Status pub package

A Flutter package that builds a ListView or CustomScrollView and notifies when the widgets are on screen within a provided area.

Example 1 Example 2 Example 3(Auto-play video)
ezgif com-gif-maker (1) ezgif com-video-to-gif (1) ezgif com-video-to-gif (2)
Example 4(Custom Scroll View)
csv_example

Index

Use-cases

  • To auto-play a video when a user scrolls.

  • To add real-time update listeners from database to the posts/content only within an area visible to the user.

    Note: If you have other use cases please update this section and create a PR.

Installation

Just add the package to your dependencies in the pubspec.yaml file:

dependencies:
  inview_notifier_list: ^1.0.0

Basic Usage

Step 1:

Add the InViewNotifierList to your widget tree

import 'package:flutter/material.dart';
import 'package:inview_notifier_list/inview_notifier_list.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: InViewNotifierList(
		...
      ),
    );
  }
}
Step 2:

Add the required property isInViewPortCondition to the InViewNotifierList widget. This is the function that defines the area which the widgets overlap should be notified as currently in-view.

typedef bool IsInViewPortCondition(
  double deltaTop,
  double deltaBottom,
  double viewPortDimension,
);

It takes 3 parameters:

  1. deltaTop: It is the distance from top of the widget to be notified in the list view to top of the viewport(0.0).

  2. deltaBottom: It is the distance from bottom of the widget to be notified in the list view to top of the viewport(0.0).

  3. viewPortDimension: The height or width of the viewport depending on the srollDirection property provided. The image below showcases the values if the srollDirection is Axis.vertical.

    Untitled Diagram

Here is an example that returns true only when the widget's top is above the halfway of the viewport and the widget's bottom is below the halfway of the viewport. It is shown in example1.

InViewNotifierList(
  isInViewPortCondition:
      (double deltaTop, double deltaBottom, double viewPortDimension) {
    return deltaTop < (0.5 * viewPortDimension) &&
        deltaBottom > (0.5 * viewPortDimension);
  },
),
step 3:

Add the IndexedWidgetBuilder , which builds the children on demand. It is just like the ListView.builder.

InViewNotifierList(
    isInViewPortCondition:(...){...},
    itemCount: 10,
    builder: (BuildContext context, int index) {
      return child;
    }

),
step 4:

Use the InViewNotifierWidget to get notified if the required widget is currently in-view or not.

The InViewNotifierWidget consists of the following properties:

  1. id: a required String property. This should be unique for every widget that wants to get notified.
  2. builder : Signature for a function that creates a widget for a given index. The function that defines and returns the widget that should be notified as inView. See InViewNotifierWidgetBuilder.
  3. child: The child widget to pass to the builder.
InViewNotifierWidget(
  id: 'unique-Id',
  builder: (BuildContext context, bool isInView, Widget child) {
    return Container(
      child: Text(
        isInView ? 'in view' : 'not in view',
      ),
    );
  },
)

That's it, done!

A complete code:

InViewNotifierList(
  isInViewPortCondition:
      (double deltaTop, double deltaBottom, double vpHeight) {
    return deltaTop < (0.5 * vpHeight) && deltaBottom > (0.5 * vpHeight);
  },
  itemCount: 10,
  builder: (BuildContext context, int index) {
    return InViewNotifierWidget(
      id: '$index',
      builder: (BuildContext context, bool isInView, Widget child) {
        return Container(
          height: 250.0,
          color: isInView ? Colors.green : Colors.red,
          child: Text(
            isInView ? 'Is in view' : 'Not in view',
          ),
        );
      },
    );
  },
);

Run the example app provided and check out the folder for complete code.

Types of Notifiers

  1. InViewNotifierList: builds a ListView and notifies when the widgets are on screen within a provided area.
  2. InViewNotifierCustomScrollView: builds a CustomScrollView and notifies when the widgets are on screen within a provided area.

Properties

  • isInViewPortCondition: [Required] The function that defines the area within which the widgets should be notified as in-view.

  • initialInViewIds: The String list of unique ids of the child widgets that should be initialized as in-view when the list view is built for the first time.

  • contextCacheCount: The number of widget's contexts the InViewNotifierList should stored/cached for the calculations thats needed to be done to check if the widgets are in-view or not. Defaults to 10 and should be greater than 1. This is done to reduce the number of calculations being performed.

    If using a InViewNotifierCustomScrollView with a SliverGrid increase the contextCacheCount to more than number of grid items visible in the screen. See Custom Scroll View example in example folder.

  • endNotificationOffset: The distance from the bottom of the list where the onListEndReached should be invoked. Defaults to the end of the list i.e 0.0.

  • onListEndReached: The function that is invoked when the list scroll reaches the end or the endNotificationOffset if provided.

  • throttleDuration: The duration to be used for throttling the scroll notification. Defaults to 200 milliseconds.

Migration from v0.0.4 to v1.0.0

  • The InViewNotifierList uses an IndexWidgetBuilder instead of the children property just like the ListView.builder. The rest all properties as same as the ListView.builder.

  • Previously you had to add the widget's context and its String id to the InViewState that you want to be notified whether it is in-view or not. Now you can directly make use of the InViewNotifierWidget to get notified if the required widget is currently in-view or not. Check the example provided.

Credits:

Thanks to Didier Boelens for the raw solution.

Comments
  • Unhandled Exception: Cannot get renderObject of inactive element.

    Unhandled Exception: Cannot get renderObject of inactive element.

    In latest version 2.5.0 stable find new problem...

    [VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: Cannot get renderObject of inactive element.
    In order for an element to have a valid renderObject, it must be active, which means it is part of the tree.
    Instead, this element is in the _ElementLifecycle.defunct state.
    If you called this method from a State object, consider guarding it with State.mounted.
    The findRenderObject() method was called for the following element:
    opened by getpu 20
  • Pause video when i scroll

    Pause video when i scroll

    Hey there,

    Just wanted to know how do i pause those video which are not active For now in the given example of video there is a widget which uses future builder but i don't want to initialize every video when i scroll please let me know

    i am trying to implement feature like instagram when user scrolls video pause not re initialized please anyone have faced this problem please help me out

    opened by AdnanKazi 8
  • Pause video when a page is pushed or change tabview

    Pause video when a page is pushed or change tabview

    I've implemented the auto-play and pause video list when in-view along with this plugin. I'm using AutomaticKeepAliveClientMixin to save my state when I'm changing tabs. Now, I am puzzled on how to pause the current playing video when a navigator is pushed or switching to another tabview. I've tried using VisibilityDetector but it only works on the first video widget. I also used RouteObserver to listen whenever a route is pushed and popped but it doesn't work on this plugin, the video still plays. Is there a way on how to make this possible? TIA!

    opened by chiekkored 4
  • inView doesn't calculate until scrolled

    inView doesn't calculate until scrolled

    Hi there,

    This is a great plugin. Very useful. One problem that I've found is that the inView variable isn't calculated until the user scrolls the list. I'm making a reorderable drag & drop feature, and it would be nice if I could determine if an item is inView before the user actually begins to scroll.

    opened by skylerknight 4
  • Inview Notifier List not working in nested ListBuilder, or in another ScrollView

    Inview Notifier List not working in nested ListBuilder, or in another ScrollView

    My requirement is to use ListBuilder in ScrollView. But Inview Notifier doesn't work here

    Code is:-

    
    import 'package:flutter/material.dart';
    import 'package:inview_notifier_list/inview_notifier_list.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(home: Home());
      }
    }
    
    class Home extends StatefulWidget {
      @override
      _HomeState createState() => _HomeState();
    }
    
    class _HomeState extends State<Home> {
      final ScrollController _controller =
          ScrollController(initialScrollOffset: 0.0, keepScrollOffset: true);
      bool shouldRender(ScrollController controller) {
        return controller.offset >= (controller.position.maxScrollExtent - 100);
      }
    
      int length = 0;
      @override
      void initState() {
        super.initState();
        _controller.addListener(() {
          if (shouldRender(_controller)) {
            loadMore();
          }
        });
        length = 5;
      }
    
      void loadMore() async {
        await Future.delayed(Duration(seconds: 1));
        length += 5;
        setState(() {});
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          body: CustomScrollView(
            
            slivers: <Widget>[
              SliverList(
                  delegate: SliverChildListDelegate([
                FlatButton(
                    onPressed: () {
                      print('You pressed me :)');
                    },
                    child: Text('Press me')),
                InViewNotifierList(
                  controller: _controller,
                  initialInViewIds: ['0'],
                  isInViewPortCondition:
                      (double deltaTop, double deltaBottom, double vpHeight) {
                    return deltaTop < (0.5 * vpHeight) &&
                        deltaBottom > (0.5 * vpHeight);
                  },
                  itemCount: length + 1,
                  shrinkWrap: true,
                  builder: (BuildContext context, int index) {
                    if (index == length) {
                      return CircularProgressIndicator();
                    }
                    return InViewNotifierWidget(
                      id: '$index',
                      builder: (BuildContext context, bool isInView, Widget child) {
                        print('Viewing $index :$isInView');
                        return Container(
                          height: 400.0,
                          color: isInView ? Colors.green : Colors.red,
                          child: Text(
                            isInView ? '$index Is in view' : '$index Not in view',
                          ),
                        );
                      },
                    );
                  },
                ),
              ]))
            ],
          ),
        );
      }
    }
    
    
    opened by ameeratgithub 4
  • Not working when having ListView as one of the Children widget

    Not working when having ListView as one of the Children widget

    I have a screen where I was using SingleChildScrollView and inside it I have multiple ListViews. Now to implement this library I just put all the children widgets of SingleChildScrollView into InViewNotifierList children widget list.

    It works fine if I didn't have any ListView inside children widgets list but when I put a ListView it somehow always assume that ListView starts from top of screen regardless of views that are present above it. That means it gives multiple views same time and inside inViewList.

    If I use Column instead of ListView, then it works fine but that isn't appropriate from user experience point of view.

    Any help regarding this issue will be appreciated.

    Thanks

    opened by sahilkis 4
  • fix #42: disposed widgets were not removed from contexts of InViewState

    fix #42: disposed widgets were not removed from contexts of InViewState

    Builders that use generating Widgets automatically dispose widgets when not visible. This leads to the contexts having widgets that currently are not part of the render tree. To prevent this the widgets should be stateful and remove themselves when they are disposed

    opened by SteepSheep 2
  • Mute Video , Play and Pause.

    Mute Video , Play and Pause.

    Hi ,

    I am using this plugin in my app and along with scrolling and inView play and pause , i want to allow users to mute and play pause video. Play pause i want to give on longPress on video for mute i want to show icon.

    How can i implement it in this plugin?

    Thanks in advance.

    opened by ShrutiThakur01 2
  • InViewNotifierWidget not working inside PageView.builder()

    InViewNotifierWidget not working inside PageView.builder()

            PageView.builder(
                  controller: _pageController,
                  scrollDirection: Axis.vertical,
                  itemBuilder: (context, index) => Stack(
                    children: <Widget>[
                      InViewNotifierWidget(
                        id: videos[index].url,
                        builder: (context, isInView, child) => KeepAlive(
                          key: ValueKey<int>(index),
                          child: MyVideoPlayer(play: InViewNotifierList.of(context).inView('$index')),
                    ],
                  ),
                  itemCount: videos.length,
                )
              ),
    

    I am trying to pause the video_player whenever it is not in view (when scrolled to next video as well as when a new page is pushed on top of the videoplayer screen).

    The following is the error response.

    I/flutter (15334): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
    I/flutter (15334): The following NoSuchMethodError was thrown building InViewNotifierWidget(dirty):
    I/flutter (15334): The getter 'widget' was called on null.
    I/flutter (15334): Receiver: null
    I/flutter (15334): Tried calling: widget
    I/flutter (15334): 
    I/flutter (15334): The relevant error-causing widget was:
    I/flutter (15334):   InViewNotifierWidget
    I/flutter (15334):   file:///home/abhayvashokan/Productivity/Projects/Flair/flair/lib/screens/feeds_screen.dart:112:19
    I/flutter (15334): 
    I/flutter (15334): When the exception was thrown, this was the stack:
    I/flutter (15334): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
    I/flutter (15334): #1      InViewNotifierList.of (package:inview_notifier_list/src/inview_notifier_list.dart:59:10)
    I/flutter (15334): #2      InViewNotifierWidget.build (package:inview_notifier_list/src/inview_notifier_list.dart:161:44)
    I/flutter (15334): #3      StatelessElement.build (package:flutter/src/widgets/framework.dart:4576:28)
    I/flutter (15334): #4      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
    I/flutter (15334): #5      Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
    I/flutter (15334): #6      ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4481:5)
    I/flutter (15334): #7      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4476:5)
    I/flutter (15334): #8      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
    I/flutter (15334): #9      MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:5947:32)
    I/flutter (15334): ...     Normal element mounting (33 frames)
    I/flutter (15334): #42     Element.inflateWidget (package:flutter/src/widgets/framework.dart:3446:14)
    I/flutter (15334): #43     Element.updateChild (package:flutter/src/widgets/framework.dart:3214:18)
    I/flutter (15334): #44     SliverMultiBoxAdaptorElement.updateChild (package:flutter/src/widgets/sliver.dart:1162:36)
    I/flutter (15334): #45     SliverMultiBoxAdaptorElement.createChild.<anonymous closure> (package:flutter/src/widgets/sliver.dart:1147:20)
    I/flutter (15334): #46     BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2607:19)
    I/flutter (15334): #47     SliverMultiBoxAdaptorElement.createChild (package:flutter/src/widgets/sliver.dart:1140:11)
    I/flutter (15334): #48     RenderSliverMultiBoxAdaptor._createOrObtainChild.<anonymous closure> (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:354:23)
    I/flutter (15334): #49     RenderObject.invokeLayoutCallback.<anonymous closure> (package:flutter/src/rendering/object.dart:1866:58)
    I/flutter (15334): #50     PipelineOwner._enableMutationsToDirtySubtrees (package:flutter/src/rendering/object.dart:918:15)
    I/flutter (15334): #51     RenderObject.invokeLayoutCallback (package:flutter/src/rendering/object.dart:1866:13)
    I/flutter (15334): #52     RenderSliverMultiBoxAdaptor._createOrObtainChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:343:5)
    I/flutter (15334): #53     RenderSliverMultiBoxAdaptor.addInitialChild (package:flutter/src/rendering/sliver_multi_box_adaptor.dart:427:5)
    I/flutter (15334): #54     RenderSliverFixedExtentBoxAdaptor.performLayout (package:flutter/src/rendering/sliver_fixed_extent_list.dart:197:12)
    I/flutter (15334): #55     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #56     RenderSliverEdgeInsetsPadding.performLayout (package:flutter/src/rendering/sliver_padding.dart:135:11)
    I/flutter (15334): #57     _RenderSliverFractionalPadding.performLayout (package:flutter/src/widgets/sliver_fill.dart:168:11)
    I/flutter (15334): #58     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #59     RenderViewportBase.layoutChildSequence (package:flutter/src/rendering/viewport.dart:452:13)
    I/flutter (15334): #60     RenderViewport._attemptLayout (package:flutter/src/rendering/viewport.dart:1444:12)
    I/flutter (15334): #61     RenderViewport.performLayout (package:flutter/src/rendering/viewport.dart:1353:20)
    I/flutter (15334): #62     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #63     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #64     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #65     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #66     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #67     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #68     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #69     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #70     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #71     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #72     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #73     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #74     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #75     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #76     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #77     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #78     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #79     RenderProxyBoxMixin.performLayout (package:flutter/src/rendering/proxy_box.dart:111:13)
    I/flutter (15334): #80     RenderObject.layout (package:flutter/src/rendering/object.dart:1767:7)
    I/flutter (15334): #81     MultiChildLayoutDelegate.layoutChild (package:flutter/src/rendering/custom_layout.dart:171:11)
    I/flutter (15334): #82     _ScaffoldLayout.performLayout (package:flutter/src/material/scaffold.dart:484:7)
    I/flutter (15334): #83     MultiChildLayoutDelegate._callPerformLayout (package:flutter/src/rendering/custom_layout.dart:240:7)
    I/flutter (15334): #84     RenderCustomMultiChildLayoutBox.performLayout (package:flutter/src/rendering/custom_layout.dart:399:14)
    I/flutter (15334): #85     RenderObject._layoutWithoutResize (package:flutter/src/rendering/object.dart:1630:7)
    I/flutter (15334): #86     PipelineOwner.flushLayout (package:flutter/src/rendering/object.dart:887:18)
    I/flutter (15334): #87     RendererBinding.drawFrame (package:flutter/src/rendering/binding.dart:402:19)
    I/flutter (15334): #88     WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:884:13)
    I/flutter (15334): #89     RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:284:5)
    I/flutter (15334): #90     SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1113:15)
    I/flutter (15334): #91     SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1052:9)
    I/flutter (15334): #92     SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:968:5)
    I/flutter (15334): #96     _invoke (dart:ui/hooks.dart:261:10)
    I/flutter (15334): #97     _drawFrame (dart:ui/hooks.dart:219:3)
    I/flutter (15334): (elided 3 frames from dart:async)
    

    I also appreciate if you tell me how to add pull down to refresh in PageView.

    opened by AbhayVAshokan 2
  • [Bug] Currently visible contexts are deleted in horizontal views

    [Bug] Currently visible contexts are deleted in horizontal views

    I've spotted, that some visible contexts are deleted, when:

    1. user is scrolling fast
    2. items are small

    I removed 'removeContexts()' method, 'cause it seems culprit to me. Instead I mark contexts 'removable', when I can't find them by 'findRenderObject' @rvamsikrishna Check it out here

    Also I found InViewNotifier pretty useful for cases, where you would like to listen for 'inview' events outside of list. Kind of 'advanced usage'.

    I've not made a pull request, 'cause these changes are untested and specific for my case. Maybe you will find something useful in my code to apply in your package)

    opened by AlexanderFarkas 1
  • Inview_notifier + betterplayer

    Inview_notifier + betterplayer

    I want to precache video file to reduce bandwidth. any solutions? I find that betterplayer has function but I can't use with inview_notifier. got null error all times

    opened by threepat1 1
  • Can't use this package on Huaweill mobile and Samsung A30

    Can't use this package on Huaweill mobile and Samsung A30

    I have webview that check when scroll on it then show detail, it work when use in IOS and other android, but it did't work when use in Huaweii and Samsung A30.

    opened by lek-sennalabs 0
  • Expose InViewNotifier to support customized widget #47

    Expose InViewNotifier to support customized widget #47

    Seeing #47 that refresh and loading is a common use-case, I made this pr in hope to help solve this issue.

    • Expose InViewNotifier and change ScrollView to Widget to support customized widget
    • Add RefreshList with SmartRefresh example to demo refreshing and loading
    opened by dreamer2q 5
  • Please add cacheExtent to InViewNotifierList

    Please add cacheExtent to InViewNotifierList

    Problem I have list of images and videos(like feed) and when I scroll up and down - listview reloads them(items are getting redrawn)

    Solution I would like to add cacheExtent property - is the size of the area that is drawn before being in the visible part of the screen. But unfortunately this plugin does not provide this functionality. Could you please add it to InViewNotifierList properties and than to ListView when you build it.

    If you have better solution how to avoid such behaviour, I would be thankful.

    enhancement 
    opened by rekonvald 2
  • isInView not working when using physics: NeverScrollableScrollPhysics()

    isInView not working when using physics: NeverScrollableScrollPhysics()

    I,am using InViewNotifierList inside SingleChildScrollView and set physics: NeverScrollableScrollPhysics() but not working. Is there a workaround regarding that and how can I do it?

    opened by SyahrirMbojo 1
Owner
Vamsi Krishna
Vamsi Krishna
Reorderable table, row, column, wrap, and sliver list that allow drag and drop of the children. https://pub.dartlang.org/packages/reorderables

** Kindly submit PR if you encounter issues and please make sure you're using stable channel releases. ** Maintaining open source software ain't easy.

Hansheng 575 Jan 5, 2023
Build basic Flutter layouts and widgets with the help of Row, Column, Stack, Expanded, Container, ListView, and GridView in Flutter.

Build basic Flutter layouts and widgets with the help of Row, Column, Stack, Expanded, Container, ListView, and GridView in Flutter.

Johannes Milke 28 Mar 30, 2022
This package allows you to draw dotted lines with Flutter. You can draw a beautiful dotted line.

This package allows you to draw dotted lines with Flutter. You can draw a beautiful dotted line.

Tushar Nikam 1 Feb 9, 2022
Flutter plugin that allows you to showcase your features on iOS and Android. 👌🔝🎉

ShowCaseView A Flutter package allows you to Showcase/Highlight your widgets step by step. It is inspired from Fluttery's Flutter challange. Preview I

Simform Solutions 1.1k Jan 7, 2023
Compare your design and current flutter layout.

pixel_perfect Put a semi-transparent image with the design over the top of the developed layout. It helps you to compare original design and current p

Kherel 45 Oct 24, 2022
A flutter plugin for bluebooth ble device connect and control.

flutter_blue_elves A flutter plugin witch includes platform-specific implementation code for Android and/or iOS to connect and control bluetooth ble d

PineappleOilPrince 29 Dec 30, 2022
🎥 Movie app which is developed using flutter and powered by tmdb.

Fluttery Filmy ?? Movie app which is developed using flutter and powered by tmdb. Preview Screenshot Listing Screen Detail Screen What's next? Movies

Bhavik Makwana 197 Dec 28, 2022
🔁 A custom refresh indicator for flutter.

Liquid Pull To Refresh A beautiful and custom refresh indicator for flutter highly inspired from Ramotion Pull Down to Refresh. Table of contents Inst

Ayush Agarwal 1.1k Dec 23, 2022
Flutter Infinite ListView - ListView with items that can be scrolled infinitely in both directions. Maintainer: @slightfoot

Flutter Infinite ListView ListView with items that can be scrolled infinitely in both directions. Quick Usage Replace your existing ListView with Infi

Flutter Community 257 Jan 8, 2023
scroll to index with fixed/variable row height inside Flutter scrollable widget

scroll-to-index This package provides the scroll to index mechanism for fixed/variable row height for Flutter scrollable widget. Getting Started In th

Quire 415 Jan 6, 2023
Effortless property builder for composing maintainable Flutter UI

Niku Effortless property builder for composing maintainable Flutter UI Why Creating UI in Flutter is easy. Its declarative enables developers to contr

SaltyAom 218 Dec 30, 2022
Device Preview For Flutter

Approximate how your app looks and performs on another device. Main features Preview any device from any device Change the device orientation Dynamic

null 3 May 14, 2022
NuConta Marketplace For Flutter

NuConta Marketplace telegram-cloud-document-1-5136388785566646724.mp4 Layout based in this drible project A Flutter project made using: Clean Dart tha

David Araujo 5 Nov 27, 2022
适用于 Flutter 的云片行为验证插件

flutter_yunpian_captcha 适用于 Flutter 的云片行为验证插件 屏幕截图 快速开始 安装 用法 获取 SDK 版本 初始化 SDK 开始验证 相关链接 许可证 屏幕截图 快速开始 安装 将此添加到包的 pubspec.yaml 文件中: dependencies: f

LeanFlutter 5 Mar 16, 2021
Tour guide App UI in Flutter Consist of Three Pages. First Screen is Splash Screen , Second is welcome screen routing to third Screen and Third screen consist of details , navigation, places, and responsive UI.

Tour Guide // Tourism App Ui in Flutter. Tour Guid App Ui in Flutter. Visit Website Features State Management Navigation Bar Responsive Design Hybrid

Habib ullah 2 Nov 14, 2022
Flutter list view - An unofficial list view for flutter

Flutter List View I don't like official list view. There are some features don't

null 24 Dec 15, 2022
A Flutter app that notifies patients of nearby hospitals and the estimated time of arrival of the ambulance

TRACKIUM ?? An Ambulance Tracking System! A mobile application built using Flutter that notifies patients of nearby hospitals and the estimated time o

Lakshmi Warrier 13 Jan 4, 2023
A nice clean onboarding screen for your e-commerce app that can run both Andriod and iOS devices because it builds with flutter

A nice clean onboarding screen for your e-commerce app that can run both Andriod and iOS devices because it builds with flutter

null 23 Dec 4, 2022
Flutter package to create list of radio button, by providing a list of objects it can be a String list or list of Map.

Custom Radio Group List Flutter package to create list of radio button, by providing a list of objects it can be a String list or list of Map. Feature

Ashok Kumar Verma 0 Nov 30, 2021
Flutter Web application having splash screen and providing Web view Using web view packege.

Webview with Splash Screen in Flutter Flutter Web View With Splash Screen. Subscribe Our YouTube Channel. Visit Website Demo OutPut ?? Links Getting S

Habib ullah 1 Dec 7, 2021