From c285f8e733d448555209f95fd76eedbeef5d9e24 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Tue, 2 Jun 2020 22:17:22 +0530 Subject: Adds application list component in apps view --- lib/components/AppList.dart | 33 ++++++++++++++++++++++++++++ lib/components/FixedContainer.dart | 34 +++++++++++++++++++++++++++++ lib/components/SearchableAppList.dart | 41 +++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 lib/components/FixedContainer.dart (limited to 'lib/components') diff --git a/lib/components/AppList.dart b/lib/components/AppList.dart index e69de29..5b54b04 100644 --- a/lib/components/AppList.dart +++ b/lib/components/AppList.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:device_apps/device_apps.dart'; + +class AppList extends StatelessWidget { + List appList; + void Function(Application) openApp; + void Function(Application) openOptionsMenu; + + AppList({ this.appList, this.openApp, this.openOptionsMenu }): super(); + + @override + Widget build(BuildContext ctx) { + return ListView.builder( + itemCount: appList.length, + itemBuilder: (ctx, index) { + Application app = appList[index]; + return Column( + children: [ + ListTile( + contentPadding: const EdgeInsets.symmetric(vertical: 0.0, horizontal: 16.0), + dense: true, + title: Text('${app.appName}', style: const TextStyle(fontSize: 16)), + onTap: () => openApp(app), + onLongPress: () => openOptionsMenu(app), + ), + Divider(height: 1.0), + ], + ); + }, + ); + } +} + diff --git a/lib/components/FixedContainer.dart b/lib/components/FixedContainer.dart new file mode 100644 index 0000000..99db1c8 --- /dev/null +++ b/lib/components/FixedContainer.dart @@ -0,0 +1,34 @@ +import 'package:flutter/material.dart'; +import 'package:device_apps/device_apps.dart'; + +import '../components/AppList.dart'; + +class FixedContainer extends StatelessWidget { + EdgeInsets padding; + Widget child; + + FixedContainer({ this.padding, this.child }): super(); + + @override + Widget build(BuildContext ctx) { + return LayoutBuilder( + builder: (BuildContext context, BoxConstraints viewportConstraints) { + return SingleChildScrollView( + child: ConstrainedBox( + constraints: BoxConstraints( + minHeight: viewportConstraints.maxHeight, + ), + child: IntrinsicHeight( + child: Container( + padding: padding, + height: viewportConstraints.maxHeight, + child: child, + ) + ), + ), + ); + } + ); + } +} + diff --git a/lib/components/SearchableAppList.dart b/lib/components/SearchableAppList.dart index e69de29..8f9da2f 100644 --- a/lib/components/SearchableAppList.dart +++ b/lib/components/SearchableAppList.dart @@ -0,0 +1,41 @@ +import 'package:flutter/material.dart'; +import 'package:device_apps/device_apps.dart'; + +import 'AppList.dart'; + +class SearchableAppList extends StatelessWidget { + Future> appListF; + void Function(Application) openApp; + void Function(Application) openOptionsMenu; + + SearchableAppList({ this.appListF, this.openApp, this.openOptionsMenu }): super(); + + int _appSorter(Application a, Application b) { + return a.appName.compareTo(b.appName); + } + + @override + Widget build(BuildContext ctx) { + return Column( + children: [ + Text('My text input'), + Expanded(child: FutureBuilder( + future: appListF, + builder: (ctx, AsyncSnapshot> snap) { + if (!snap.hasData) { + return Text('Loading...'); + } + + snap.data.sort(_appSorter); + return AppList( + appList: snap.data, + openApp: openApp, + openOptionsMenu: openOptionsMenu, + ); + } + )), + ], + ); + } +} + -- cgit v1.3.1