Skip to content

Commit

Permalink
fix: long list scaffold
Browse files Browse the repository at this point in the history
  • Loading branch information
pd4d10 committed Jun 5, 2021
1 parent af52d55 commit 17b6fd5
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 34 deletions.
2 changes: 1 addition & 1 deletion lib/models/github.dart
Expand Up @@ -166,7 +166,7 @@ class GithubNotificationItemSubject {
int? _number;
int? get number {
if (_number == null) {
_number = int.parse(url?.split('/')?.last ?? '0');
_number = int.parse(url?.split('/').last ?? '0');
}
return _number;
}
Expand Down
38 changes: 19 additions & 19 deletions lib/scaffolds/long_list.dart
Expand Up @@ -9,17 +9,17 @@ import '../widgets/link.dart';
import '../widgets/error_reload.dart';

class LongListPayload<T, K> {
T? header;
int? totalCount;
String? cursor;
List<K>? leadingItems;
T header;
int totalCount;
String cursor;
List<K> leadingItems;
List<K>? trailingItems;

LongListPayload({
this.header,
this.totalCount,
this.cursor,
this.leadingItems,
required this.header,
required this.totalCount,
required this.cursor,
required this.leadingItems,
this.trailingItems,
});
}
Expand Down Expand Up @@ -51,12 +51,12 @@ class LongListStatefulScaffold<T, K> extends StatefulWidget {
}

class _LongListStatefulScaffoldState<T, K>
extends State<LongListStatefulScaffold<T?, K>> {
extends State<LongListStatefulScaffold<T, K>> {
late bool loading;
bool loadingMore = false;
String error = '';

LongListPayload<T?, K>? payload;
LongListPayload<T, K>? payload;

@override
void initState() {
Expand Down Expand Up @@ -94,7 +94,7 @@ class _LongListStatefulScaffoldState<T, K>
await widget.onLoadMore(payload!.cursor);
payload!.totalCount = _payload.totalCount;
payload!.cursor = _payload.cursor;
payload!.leadingItems!.addAll(_payload.leadingItems!);
payload!.leadingItems.addAll(_payload.leadingItems);
} finally {
if (mounted) {
setState(() {
Expand All @@ -113,11 +113,11 @@ class _LongListStatefulScaffoldState<T, K>

int realIndex = index ~/ 2;

if (realIndex < payload!.leadingItems!.length) {
return widget.itemBuilder(payload!.leadingItems![realIndex]);
} else if (realIndex == payload!.leadingItems!.length) {
var count = payload!.totalCount! -
payload!.leadingItems!.length +
if (realIndex < payload!.leadingItems.length) {
return widget.itemBuilder(payload!.leadingItems[realIndex]);
} else if (realIndex == payload!.leadingItems.length) {
var count = payload!.totalCount -
payload!.leadingItems.length +
payload!.trailingItems!.length;
return Container(
padding: CommonStyle.padding,
Expand Down Expand Up @@ -150,13 +150,13 @@ class _LongListStatefulScaffoldState<T, K>
);
} else {
return widget.itemBuilder(payload!
.trailingItems![realIndex - payload!.leadingItems!.length - 1]);
.trailingItems![realIndex - payload!.leadingItems.length - 1]);
}
}

int get _itemCount {
int count = payload!.leadingItems!.length + payload!.trailingItems!.length;
if (payload!.totalCount! > count) {
int count = payload!.leadingItems.length + payload!.trailingItems!.length;
if (payload!.totalCount > count) {
count++;
}
return 2 * count; // including bottom border
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/ge_search.dart
Expand Up @@ -25,7 +25,7 @@ class _GeSearchScreenState extends State<GeSearchScreen> {
List<List> _payloads = [[], [], []];

TextEditingController? _controller;
String get _keyword => _controller!.text?.trim() ?? '';
String get _keyword => _controller!.text.trim();

@override
void initState() {
Expand Down
18 changes: 8 additions & 10 deletions lib/screens/gh_issue.dart
Expand Up @@ -87,7 +87,7 @@ class GhIssueScreen extends StatelessWidget {
);
}

Future<GIssueData_repository?> _queryIssue(BuildContext context,
Future<GIssueData_repository> _queryIssue(BuildContext context,
{String? cursor}) async {
final req = GIssueReq((b) {
b.vars.owner = owner;
Expand All @@ -97,7 +97,7 @@ class GhIssueScreen extends StatelessWidget {
});
OperationResponse<GIssueData, GIssueVars?> res =
await context.read<AuthModel>().gqlClient!.request(req).first;
return res.data!.repository;
return res.data!.repository!;
}

@override
Expand Down Expand Up @@ -257,15 +257,14 @@ class GhIssueScreen extends StatelessWidget {
},
itemBuilder: (p) => TimelineItem(p),
onRefresh: () async {
final res =
await (_queryIssue(context) as Future<GIssueData_repository>);
final res = await _queryIssue(context);
if (res.issueOrPullRequest!.G__typename == 'Issue') {
final issue = res.issueOrPullRequest
as GIssueData_repository_issueOrPullRequest__asIssue;
return LongListPayload(
header: res,
totalCount: issue.timelineItems.totalCount,
cursor: issue.timelineItems.pageInfo.endCursor,
cursor: issue.timelineItems.pageInfo.endCursor!,
leadingItems: issue.timelineItems.nodes!.toList(),
trailingItems: [],
);
Expand All @@ -275,22 +274,21 @@ class GhIssueScreen extends StatelessWidget {
return LongListPayload(
header: res,
totalCount: pr.timelineItems.totalCount,
cursor: pr.timelineItems.pageInfo.endCursor,
cursor: pr.timelineItems.pageInfo.endCursor!,
leadingItems: pr.timelineItems.nodes!.toList(),
trailingItems: [],
);
}
},
onLoadMore: (_cursor) async {
final res = await (_queryIssue(context, cursor: _cursor)
as Future<GIssueData_repository>);
final res = await _queryIssue(context, cursor: _cursor);
if (res.issueOrPullRequest!.G__typename == 'Issue') {
final issue = res.issueOrPullRequest
as GIssueData_repository_issueOrPullRequest__asIssue;
return LongListPayload(
header: res,
totalCount: issue.timelineItems.totalCount,
cursor: issue.timelineItems.pageInfo.endCursor,
cursor: issue.timelineItems.pageInfo.endCursor!,
leadingItems: issue.timelineItems.nodes!.toList(),
);
} else {
Expand All @@ -299,7 +297,7 @@ class GhIssueScreen extends StatelessWidget {
return LongListPayload(
header: res,
totalCount: pr.timelineItems.totalCount,
cursor: pr.timelineItems.pageInfo.endCursor,
cursor: pr.timelineItems.pageInfo.endCursor!,
leadingItems: pr.timelineItems.nodes!.toList(),
);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/gh_repo.dart
Expand Up @@ -270,7 +270,7 @@ class GhRepoScreen extends StatelessWidget {
leftIconData: Octicons.history,
text: Text(AppLocalizations.of(context)!.commits),
rightWidget: Text(
((ref.target as GRepoCommit).history?.totalCount ?? 0)
((ref.target as GRepoCommit).history.totalCount)
.toString()),
url: '/github/$owner/$name/commits/${ref.name}',
),
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/gh_search.dart
Expand Up @@ -25,7 +25,7 @@ class _GhSearchScreenState extends State<GhSearchScreen> {

TextEditingController? _controller;

String get _keyword => _controller!.text?.trim() ?? '';
String get _keyword => _controller!.text.trim();

@override
void initState() {
Expand Down
2 changes: 1 addition & 1 deletion lib/screens/gl_search.dart
Expand Up @@ -26,7 +26,7 @@ class _GlSearchScreenState extends State<GlSearchScreen> {

TextEditingController? _controller;

String get _keyword => _controller!.text?.trim() ?? '';
String get _keyword => _controller!.text.trim();

@override
void initState() {
Expand Down

0 comments on commit 17b6fd5

Please sign in to comment.