Skip to content

Commit 1dd35e5

Browse files
committed
fix a bunch of bugs
1 parent ca533a9 commit 1dd35e5

14 files changed

+301
-43
lines changed

2022/freedom/README.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,9 @@ A new Flutter project.
55
## Getting Started
66

77
```bash
8-
flutter pub run flutter_launcher_icons:main
9-
```
8+
flutter pub get -v
9+
10+
flutter run
11+
12+
flutter build apk --release
13+
```

2022/freedom/lib/components/card.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class MyCard extends StatelessWidget {
5050
GestureDetector(
5151
onTap: () async {
5252
sqlite_database_controlelr.deleteMessage(message);
53-
sqlite_database_controlelr.sync_messages_data_to_view();
53+
memory_database_controller.refresh_the_list_view();
5454
},
5555
child: Icon(
5656
Icons.delete_outline,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import 'package:easy_debounce/easy_debounce.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:freedom/components/card.dart';
4+
import 'package:freedom/store/store.dart';
5+
6+
class LoadingAndRefreshList extends StatefulWidget {
7+
const LoadingAndRefreshList({Key? key}) : super(key: key);
8+
9+
@override
10+
_LoadingAndRefreshListState createState() => _LoadingAndRefreshListState();
11+
}
12+
13+
class _LoadingAndRefreshListState extends State<LoadingAndRefreshList> {
14+
bool? loadingSuccess;
15+
16+
@override
17+
initState() {
18+
super.initState();
19+
20+
loadingSuccess = true;
21+
}
22+
23+
@override
24+
void dispose() {
25+
super.dispose();
26+
}
27+
28+
// void _onRefresh() async {}
29+
30+
void _onLoading() async {
31+
await memory_database_controller.load_more_messages();
32+
}
33+
34+
@override
35+
Widget build(BuildContext context) {
36+
Widget theWidgetWeReturn = Container();
37+
38+
// var theMessageList =
39+
// memory_database_controller.messageList.reversed.toList();
40+
var theMessageList = memory_database_controller.messageList.toList();
41+
42+
if (loadingSuccess != null) {
43+
if (loadingSuccess == true) {
44+
theWidgetWeReturn = Container(
45+
padding: EdgeInsets.all(10.0),
46+
decoration: BoxDecoration(
47+
border: Border(
48+
bottom: BorderSide(
49+
color: Colors.grey,
50+
style: BorderStyle.solid,
51+
width: 0.3))),
52+
child: NotificationListener<ScrollNotification>(
53+
onNotification: (ScrollNotification scrollInfo) {
54+
if (scrollInfo.metrics.pixels ==
55+
scrollInfo.metrics.maxScrollExtent) {
56+
EasyDebounce.debounce(
57+
'home: call_loading_function', // <-- An ID for this particular debouncer
58+
Duration(milliseconds: 500), // <-- The debounce duration
59+
() {
60+
print("require loading");
61+
_onLoading();
62+
} // <-- The target method
63+
);
64+
}
65+
return true;
66+
},
67+
child: CustomScrollView(
68+
shrinkWrap: false,
69+
slivers: [
70+
SliverList(
71+
delegate: SliverChildBuilderDelegate(
72+
(BuildContext context, int index) {
73+
return Column(
74+
children: [
75+
if ((index != 0)) ...[
76+
Divider(
77+
thickness: 0.4,
78+
color: Colors.grey,
79+
),
80+
],
81+
ConstrainedBox(
82+
constraints: BoxConstraints(
83+
minHeight: 50.0,
84+
),
85+
child: MyCard(message: theMessageList[index]),
86+
),
87+
],
88+
);
89+
},
90+
childCount: theMessageList.length, // 1000 list items
91+
),
92+
),
93+
// SliverToBoxAdapter(
94+
// child: Center(child: Text("loading...")),
95+
// )
96+
],
97+
),
98+
),
99+
);
100+
} else {
101+
theWidgetWeReturn = Container(
102+
color: Colors.white,
103+
child: Center(child: Text("Loading...")),
104+
);
105+
}
106+
}
107+
108+
return Container(
109+
color: Colors.white,
110+
child: theWidgetWeReturn,
111+
);
112+
}
113+
}

2022/freedom/lib/components/lists.dart

+2-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ class _MessageListViewState extends State<MessageListView> {
2121

2222
@override
2323
Widget build(BuildContext context) {
24-
var theMessageList = widget.messageList.reversed.toList();
24+
// var theMessageList = widget.messageList.reversed.toList();
25+
var theMessageList = widget.messageList.toList();
2526
return Container(
2627
padding: EdgeInsets.all(10.0),
2728
decoration: BoxDecoration(

2022/freedom/lib/main.dart

+7-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
7979
tabController.addListener(() async {
8080
if (tabController.index == 0) {
8181
//print("home tab");
82-
await sqlite_database_controlelr.sync_messages_data_to_view();
82+
// await sqlite_database_controlelr.sync_messages_data_to_view();
83+
await memory_database_controller.show_default_message_list();
8384
} else if (tabController.index == 1) {
8485
//print("search tab");
8586
await memory_database_controller.syncMessageList(newMessageList: []);
@@ -250,6 +251,11 @@ class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
250251
),
251252
floatingActionButton: FloatingActionButton(
252253
onPressed: () async {
254+
// await sqlite_database_controlelr
255+
// .get_message_list_by_page_number_and_page_size(
256+
// page_number: 1, page_size: 3);
257+
// return;
258+
253259
Get.toNamed(RouterRoutings.editing,
254260
arguments: RouterArguments(
255261
editingPageArguments:

2022/freedom/lib/pages/editing.dart

+5-3
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,15 @@ class _EditingPageState extends State<EditingPage> {
9393

9494
if (oldMessage != null) {
9595
await sqlite_database_controlelr.updateMessage(msg);
96+
await memory_database_controller.refresh_the_list_view();
9697
} else {
9798
await sqlite_database_controlelr.insertMessage(msg);
99+
await memory_database_controller
100+
.show_default_message_list();
98101
}
99102

100-
await sqlite_database_controlelr.sync_messages_data_to_view();
101-
102-
Get.offAndToNamed(RouterRoutings.home);
103+
//Get.offAndToNamed(RouterRoutings.home);
104+
Navigator.of(context).pop();
103105

104106
EasyLoading.dismiss();
105107
}

2022/freedom/lib/pages/home.dart

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
2-
import 'package:freedom/components/lists.dart';
2+
// import 'package:freedom/components/lists.dart';
3+
import 'package:freedom/components/general_loading_list.dart';
34
import 'package:get/get.dart';
45
import 'package:freedom/store/store.dart';
56

@@ -11,9 +12,12 @@ class HomeTab extends StatelessWidget {
1112
return Container(
1213
child: Obx(() {
1314
memory_database_controller.messageList.toList();
14-
return MessageListView(
15-
messageList: memory_database_controller.messageList,
16-
);
15+
16+
return LoadingAndRefreshList();
17+
18+
// return MessageListView(
19+
// messageList: memory_database_controller.messageList,
20+
// );
1721
}),
1822
);
1923
}

2022/freedom/lib/pages/settings.dart

+5-5
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,14 @@ class _SettingPageState extends State<SettingPage> {
7575
Checkbox(
7676
checkColor: Colors.white,
7777
fillColor: MaterialStateProperty.all<Color>(Colors.green),
78-
value:
79-
sqlite_database_controlelr.onlyShowTodayInHistory.value,
80-
onChanged: (bool? value) {
78+
value: sqlite_database_controlelr.onlyShowTodayInHistory,
79+
onChanged: (bool? value) async {
8180
if (value != null) {
82-
sqlite_database_controlelr.onlyShowTodayInHistory
83-
.trigger(value);
8481
sqlite_database_controlelr.box
8582
.put("onlyShowTodayInHistory", value);
83+
sqlite_database_controlelr.onlyShowTodayInHistory = value;
84+
await memory_database_controller
85+
.show_default_message_list();
8686
setState(() {});
8787
}
8888
},

2022/freedom/lib/store/json_export_and_import_controller.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ class JsonExportAndImportControlelr extends GetxController {
6666
await sqlite_database_controlelr.clean_database();
6767
await sqlite_database_controlelr.insert_a_list_of_messages(new_messages);
6868

69-
await sqlite_database_controlelr.sync_messages_data_to_view();
69+
await memory_database_controller.show_default_message_list();
7070
}
7171
}

2022/freedom/lib/store/memory_database_controller.dart

+70-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import 'package:freedom/tools/time_tools.dart';
1+
import 'package:freedom/store/store.dart';
22
import 'package:get/get.dart';
33
import 'package:freedom/data_structures/message.dart';
44

@@ -7,15 +7,80 @@ class MemoryDatabaseController extends GetxController {
77
print("memory database controller initialized");
88
}
99

10+
int stream_size_for_a_bunch_of_messages = 3;
1011
RxList<Message> messageList = RxList([]);
1112

1213
Future<void> syncMessageList({required List<Message> newMessageList}) async {
1314
RxList<Message> tempMessageList = RxList();
1415

15-
tempMessageList.addAll(newMessageList.map((e) => e));
16-
newMessageList.forEach((element) {
17-
print(convertStringToTime(time: element.date));
18-
});
16+
tempMessageList.addAll(newMessageList);
17+
18+
messageList.assignAll(tempMessageList);
19+
}
20+
21+
Future<void> add_new_message_list_in(
22+
{required List<Message> new_message_list}) async {
23+
RxList<Message> tempMessageList = RxList();
24+
25+
tempMessageList.addAll(this.messageList);
26+
tempMessageList.addAll(new_message_list);
27+
28+
messageList.assignAll(tempMessageList);
29+
}
30+
31+
Future<void> show_default_message_list() async {
32+
if (sqlite_database_controlelr.onlyShowTodayInHistory) {
33+
//show history in today
34+
var message_list = await sqlite_database_controlelr
35+
.search_messages_that_sent_on_the_same_day_of_the_years(
36+
go_back_to_past_order: true);
37+
await syncMessageList(newMessageList: message_list);
38+
return;
39+
}
40+
41+
RxList<Message> tempMessageList = RxList();
42+
43+
var first_20_messages =
44+
await sqlite_database_controlelr.get_message_list_by_offset_and_limit(
45+
offset: 0, limit: 3, go_back_to_past_order: true);
46+
47+
tempMessageList.addAll(first_20_messages);
48+
print(first_20_messages);
49+
50+
messageList.assignAll(tempMessageList);
51+
}
52+
53+
Future<void> load_more_messages() async {
54+
if (sqlite_database_controlelr.onlyShowTodayInHistory) {
55+
// we show all history-in-today message
56+
// no need to load more
57+
return;
58+
}
59+
60+
var current_messages_number = memory_database_controller.messageList.length;
61+
62+
List<Message> new_msg_list =
63+
await sqlite_database_controlelr.get_message_list_by_offset_and_limit(
64+
offset: current_messages_number,
65+
limit: stream_size_for_a_bunch_of_messages,
66+
go_back_to_past_order: true);
67+
68+
await add_new_message_list_in(new_message_list: new_msg_list);
69+
}
70+
71+
Future<void> refresh_the_list_view() async {
72+
RxList<Message> tempMessageList = RxList();
73+
74+
for (Message msg_ in this.messageList) {
75+
Message? the_msg = await sqlite_database_controlelr
76+
.search_message_by_type_and_date(msg: msg_);
77+
if (the_msg != null) {
78+
// update database message to memory
79+
tempMessageList.add(the_msg);
80+
} else {
81+
// delete memory message if it not in database
82+
}
83+
}
1984

2085
messageList.assignAll(tempMessageList);
2186
}

0 commit comments

Comments
 (0)