Skip to content

Repository files navigation

Direct Select

pub package

This package allows you to scroll/select the value directly from the dropdown with less effort and time.

Inspired by Virgil Panashot

Samples

Light

Dark

Getting started

You should ensure that you add the router as a dependency in your flutter project.

dependencies:
direct_select: "^1.0.3"

You should then run flutter packages upgrade or update your packages in IntelliJ.

Example Project

There is an example project in the example folder. Check it out. Otherwise, keep reading to get up and running.

Usage

Sample 1

import'package:flutter/material.dart';
import'package:direct_select/direct_select.dart';
class_MyHomePageStateextendsState<MyHomePage> {
final elements1 = [
"Breakfast",
"Lunch",
"2nd Snack",
"Dinner",
"3rd Snack",
];
final elements2 = [
"Cheese Steak",
"Chicken",
"Salad",
];
final elements3 = [
"7am - 10am",
"11am - 2pm",
"3pm - 6pm",
"7pm-10pm",
];
final elements4 = [
"Lose fat",
"Gain muscle",
"Keep in weight",
];
int selectedIndex1 =0,
selectedIndex2 =0,
selectedIndex3 =0,
selectedIndex4 =0;
List<Widget> _buildItems1() {
return elements1
.map((val) =>MySelectionItem(
title: val,
))
.toList();
}
List<Widget> _buildItems2() {
return elements2
.map((val) =>MySelectionItem(
title: val,
))
.toList();
}
List<Widget> _buildItems3() {
return elements3
.map((val) =>MySelectionItem(
title: val,
))
.toList();
}
List<Widget> _buildItems4() {
return elements4
.map((val) =>MySelectionItem(
title: val,
))
.toList();
}
@overrideWidgetbuild(BuildContext context) {
returnScaffold(
appBar:AppBar(
title:Text(widget.title),
),
body:Padding(
padding:constEdgeInsets.all(15.0),
child:Center(
child:Column(
mainAxisAlignment:MainAxisAlignment.start,
crossAxisAlignment:CrossAxisAlignment.stretch,
children:<Widget>[
Padding(
padding:constEdgeInsets.only(left:10.0),
child:Text(
"To which meal?",
style:TextStyle(
color:Colors.grey, fontWeight:FontWeight.w500),
),
),
DirectSelect(
itemExtent:35.0,
selectedIndex: selectedIndex1,
backgroundColor:Colors.red,
child:MySelectionItem(
isForList:false,
title: elements1[selectedIndex1],
),
onSelectedItemChanged: (index) {
setState(() {
selectedIndex1 = index;
});
},
items:_buildItems1()),
Padding(
padding:constEdgeInsets.only(left:10.0, top:20.0),
child:Text(
"Search our database by name",
style:TextStyle(
color:Colors.grey, fontWeight:FontWeight.w500),
),
),
DirectSelect(
itemExtent:35.0,
selectedIndex: selectedIndex2,
child:MySelectionItem(
isForList:false,
title: elements2[selectedIndex2],
),
onSelectedItemChanged: (index) {
setState(() {
selectedIndex2 = index;
});
},
items:_buildItems2()),
Padding(
padding:constEdgeInsets.only(left:10.0, top:20.0),
child:Text(
"Select your workout schedule",
style:TextStyle(
color:Colors.grey, fontWeight:FontWeight.w500),
),
),
DirectSelect(
itemExtent:35.0,
selectedIndex: selectedIndex3,
child:MySelectionItem(
isForList:false,
title: elements3[selectedIndex3],
),
onSelectedItemChanged: (index) {
setState(() {
selectedIndex3 = index;
});
},
items:_buildItems3()),
Padding(
padding:constEdgeInsets.only(left:10.0, top:20.0),
child:Text(
"Select your goal",
style:TextStyle(
color:Colors.grey, fontWeight:FontWeight.w500),
),
),
DirectSelect(
itemExtent:35.0,
selectedIndex: selectedIndex4,
child:MySelectionItem(
isForList:false,
title: elements4[selectedIndex4],
),
onSelectedItemChanged: (index) {
setState(() {
selectedIndex4 = index;
});
},
items:_buildItems4()),
]),
),
),
);
}
}
//You can use any WidgetclassMySelectionItemextendsStatelessWidget {
finalString title;
finalbool isForList;
constMySelectionItem({Key key, this.title, this.isForList =true})
:super(key: key);
@overrideWidgetbuild(BuildContext context) {
returnSizedBox(
height:60.0,
child: isForList
?Padding(
child:_buildItem(context),
padding:EdgeInsets.all(10.0),
)
:Card(
margin:EdgeInsets.symmetric(horizontal:10.0),
child:Stack(
children:<Widget>[
_buildItem(context),
Align(
alignment:Alignment.centerRight,
child:Icon(Icons.arrow_drop_down),
)
],
),
),
);
}
_buildItem(BuildContext context) {
returnContainer(
width:MediaQuery.of(context).size.width,
alignment:Alignment.center,
child:Text(title),
);
}
}

You can follow me on twitter @diegoveloper

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages