2019-02-02 17:28:51 +01:00
|
|
|
import 'package:flutter/material.dart';
|
2019-01-23 12:52:51 +01:00
|
|
|
import 'package:flutter/cupertino.dart';
|
2019-09-02 15:52:32 +02:00
|
|
|
import 'package:git_touch/models/theme.dart';
|
2019-09-11 13:59:47 +02:00
|
|
|
import 'package:git_touch/widgets/app_bar_title.dart';
|
2019-09-02 15:52:32 +02:00
|
|
|
import 'package:provider/provider.dart';
|
2019-09-08 14:07:35 +02:00
|
|
|
import 'package:git_touch/models/settings.dart';
|
2019-02-10 06:42:02 +01:00
|
|
|
import '../scaffolds/simple.dart';
|
|
|
|
import '../utils/utils.dart';
|
2019-09-23 12:28:33 +02:00
|
|
|
import 'package:git_touch/widgets/repository_item.dart';
|
2019-02-10 06:42:02 +01:00
|
|
|
import '../widgets/loading.dart';
|
2019-01-23 12:52:51 +01:00
|
|
|
|
2019-02-02 17:28:51 +01:00
|
|
|
class SearchScreen extends StatefulWidget {
|
2019-01-23 12:52:51 +01:00
|
|
|
@override
|
2019-02-02 17:28:51 +01:00
|
|
|
_SearchScreenState createState() => _SearchScreenState();
|
|
|
|
}
|
|
|
|
|
|
|
|
class _SearchScreenState extends State<SearchScreen> {
|
|
|
|
int active = 0;
|
2019-02-10 06:42:02 +01:00
|
|
|
bool loading = false;
|
|
|
|
List repos = [];
|
2019-01-23 12:52:51 +01:00
|
|
|
|
2019-02-10 06:42:02 +01:00
|
|
|
_onSubmitted(String value) async {
|
|
|
|
setState(() {
|
|
|
|
loading = true;
|
|
|
|
});
|
|
|
|
try {
|
|
|
|
// TODO: search other types
|
2019-09-08 14:07:35 +02:00
|
|
|
var data = await Provider.of<SettingsModel>(context).query('''
|
2019-02-10 06:42:02 +01:00
|
|
|
{
|
|
|
|
search(first: $pageSize, type: REPOSITORY, query: "$value") {
|
|
|
|
nodes {
|
|
|
|
... on Repository {
|
|
|
|
$repoChunk
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
''');
|
|
|
|
repos = data['search']['nodes'];
|
|
|
|
} finally {
|
|
|
|
setState(() {
|
|
|
|
loading = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Widget _buildInput() {
|
2019-09-02 15:52:32 +02:00
|
|
|
switch (Provider.of<ThemeModel>(context).theme) {
|
2019-09-19 15:10:50 +02:00
|
|
|
case AppThemeType.cupertino:
|
2019-02-10 06:42:02 +01:00
|
|
|
return CupertinoTextField(
|
|
|
|
// padding: EdgeInsets.all(10),
|
|
|
|
placeholder: 'Type to search',
|
|
|
|
clearButtonMode: OverlayVisibilityMode.editing,
|
|
|
|
onSubmitted: _onSubmitted,
|
2019-02-02 17:28:51 +01:00
|
|
|
);
|
|
|
|
default:
|
2019-02-10 06:42:02 +01:00
|
|
|
return TextField(onSubmitted: _onSubmitted);
|
2019-02-02 17:28:51 +01:00
|
|
|
}
|
2019-01-23 12:52:51 +01:00
|
|
|
}
|
2019-02-10 06:42:02 +01:00
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return SimpleScaffold(
|
2019-09-11 13:59:47 +02:00
|
|
|
title: AppBarTitle('Search GitHub Repositories'),
|
2019-02-10 06:42:02 +01:00
|
|
|
bodyBuilder: () {
|
2019-09-02 15:52:32 +02:00
|
|
|
return Column(
|
|
|
|
children: <Widget>[
|
|
|
|
Container(padding: EdgeInsets.all(8), child: _buildInput()),
|
|
|
|
loading
|
|
|
|
? Loading()
|
|
|
|
: Column(
|
2019-09-23 12:28:33 +02:00
|
|
|
children:
|
|
|
|
repos.map((repo) => RepositoryItem(repo)).toList(),
|
2019-09-02 15:52:32 +02:00
|
|
|
)
|
|
|
|
],
|
|
|
|
);
|
2019-02-10 06:42:02 +01:00
|
|
|
},
|
|
|
|
);
|
|
|
|
}
|
2019-01-23 12:52:51 +01:00
|
|
|
}
|