Skip to content

Instantly share code, notes, and snippets.

@viveky259259
Created October 1, 2020 06:53
Show Gist options
  • Save viveky259259/5495fe8fdefb5fef9da9b8f5b215917b to your computer and use it in GitHub Desktop.
Save viveky259259/5495fe8fdefb5fef9da9b8f5b215917b to your computer and use it in GitHub Desktop.
MultiSelect Widget
// Needed: add http: as dependency
import 'dart:convert';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart';
void main() {
runApp(App());
}
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Multi Select Widget',
home: MultiSelectWidget(),
);
}
}
class MultiSelectWidget extends StatefulWidget {
@override
_MultiSelectWidgetState createState() => _MultiSelectWidgetState();
}
class _MultiSelectWidgetState extends State<MultiSelectWidget> {
Language language;
Map<String, LanguageData> selectedLanguage;
@override
void initState() {
super.initState();
selectedLanguage = {};
WidgetsBinding.instance.addPostFrameCallback((_) {
get('http://rashmikotian.com/artist/api/artists/index').then((result) {
language = Language.fromJson(json.decode(result.body));
setState(() {});
}).catchError((e) {
print(e);
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Multi Select Widget'),
actions: [
IconButton(
onPressed: () {
if (selectedLanguage.length != language.languageData.length) {
language.languageData.forEach((each) {
selectedLanguage[each.hashCode.toString()] = each;
});
} else {
selectedLanguage.clear();
}
setState(() {});
},
icon: Icon(Icons.swap_horiz),
)
],
),
body: Builder(
builder: (_) {
if (language == null) {
return Center(child: CircularProgressIndicator());
} else {
return ListView.builder(
itemBuilder: (context, index) {
return ListTile(
title:
Text(language.languageData[index].toJson().toString()),
trailing: IconButton(
onPressed: () {
if (!selectedLanguage.containsKey(
language.languageData[index].hashCode.toString())) {
selectedLanguage[language.languageData[index].hashCode
.toString()] = language.languageData[index];
} else {
selectedLanguage.remove(
language.languageData[index].hashCode.toString());
}
setState(() {});
},
icon: Builder(
builder: (_) {
if (selectedLanguage.containsKey(language
.languageData[index].hashCode
.toString())) {
return Icon(Icons.check_box);
} else
return Icon(Icons.check_box_outline_blank);
},
),
));
},
itemCount: language.languageData.length,
);
}
},
),
);
}
}
class Language {
List<LanguageData> languageData;
List<TagsData> tagsData;
List<WorkPreferenceData> workPreferenceData;
Language({this.languageData, this.tagsData, this.workPreferenceData});
Language.fromJson(Map<String, dynamic> json) {
if (json['language_data'] != null) {
languageData = new List<LanguageData>();
json['language_data'].forEach((v) {
languageData.add(new LanguageData.fromJson(v));
});
}
if (json['tags_data'] != null) {
tagsData = new List<TagsData>();
json['tags_data'].forEach((v) {
tagsData.add(new TagsData.fromJson(v));
});
}
if (json['work_preference_data'] != null) {
workPreferenceData = new List<WorkPreferenceData>();
json['work_preference_data'].forEach((v) {
workPreferenceData.add(new WorkPreferenceData.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.languageData != null) {
data['language_data'] = this.languageData.map((v) => v.toJson()).toList();
}
if (this.tagsData != null) {
data['tags_data'] = this.tagsData.map((v) => v.toJson()).toList();
}
if (this.workPreferenceData != null) {
data['work_preference_data'] =
this.workPreferenceData.map((v) => v.toJson()).toList();
}
return data;
}
}
class LanguageData {
String id;
String name;
String createdOn;
String modifiedOn;
String createdBy;
String modifiedBy;
String status;
LanguageData(
{this.id,
this.name,
this.createdOn,
this.modifiedOn,
this.createdBy,
this.modifiedBy,
this.status});
LanguageData.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
createdOn = json['created_on'];
modifiedOn = json['modified_on'];
createdBy = json['created_by'];
modifiedBy = json['modified_by'];
status = json['status'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['created_on'] = this.createdOn;
data['modified_on'] = this.modifiedOn;
data['created_by'] = this.createdBy;
data['modified_by'] = this.modifiedBy;
data['status'] = this.status;
return data;
}
}
class TagsData {
String id;
String name;
String createdOn;
String modifiedOn;
String createdBy;
String modifiedBy;
String status;
TagsData(
{this.id,
this.name,
this.createdOn,
this.modifiedOn,
this.createdBy,
this.modifiedBy,
this.status});
TagsData.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
createdOn = json['created_on'];
modifiedOn = json['modified_on'];
createdBy = json['created_by'];
modifiedBy = json['modified_by'];
status = json['status'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
data['created_on'] = this.createdOn;
data['modified_on'] = this.modifiedOn;
data['created_by'] = this.createdBy;
data['modified_by'] = this.modifiedBy;
data['status'] = this.status;
return data;
}
}
class WorkPreferenceData {
String id;
String name;
WorkPreferenceData({this.id, this.name});
WorkPreferenceData.fromJson(Map<String, dynamic> json) {
id = json['id'];
name = json['name'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['name'] = this.name;
return data;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment