Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions loading_compute.dart → bin/loading_compute.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,20 @@ Future<void> loadDataFromCompute() async {
}

// alternative way
result = await compute((int count) async {
List<Map<String, dynamic>> list = [];
for (int i = 0; i < 10; i++) {
list.add(await fetchData(count));
}
return list;
}, 5,);
result = await compute(
(int count) async {
List<Map<String, dynamic>> list = [];
for (int i = 0; i < 10; i++) {
list.add(await fetchData(count));
}
return list;
},
5,
);
}

Future<Map<String, dynamic>> fetchData(int requestCount) async {
final url = Uri.parse('https://api.example.com/data');
final url = Uri.parse('http://headers.jsontest.com/');
List<Future<http.Response>> futures = [];
for (int j = 0; j < requestCount; j++) {
futures.add(http.get(url));
Expand All @@ -45,4 +48,4 @@ Future<Map<String, dynamic>> fetchData(int requestCount) async {
print('An error occurred: $e');
}
return {};
}
}
3 changes: 2 additions & 1 deletion loading_isolate.dart → bin/loading_isolate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Future<void> loadDataFromIsolate() async {
List<Map<String, dynamic>> result = [];
final receivePort = ReceivePort();
final isolate = await Isolate.spawn(fetchDataIsolate, receivePort.sendPort);
print(isolate.debugName);
await for (var response in receivePort) {
if (response == null) {
break; // Exit the loop on completion signal
Expand All @@ -29,7 +30,7 @@ void fetchDataIsolate(SendPort sendPort) async {
}

Future<Map<String, dynamic>> fetchData({int requestCount = 1}) async {
final url = Uri.parse('https://api.example.com/data');
final url = Uri.parse('http://headers.jsontest.com/');
List<Future<http.Response>> futures = [];
for (int j = 0; j < requestCount; j++) {
futures.add(http.get(url));
Expand Down
4 changes: 2 additions & 2 deletions loading_main_thread.dart → bin/loading_main_thread.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Future<void> loadDataFromMainThread() async {
}

Future<Map<String, dynamic>> fetchData({int requestCount = 1}) async {
final url = Uri.parse('https://api.example.com/data');
final url = Uri.parse('http://headers.jsontest.com/');
List<Future<http.Response>> futures = [];
for (int j = 0; j < requestCount; j++) {
futures.add(http.get(url));
Expand All @@ -34,4 +34,4 @@ Future<Map<String, dynamic>> fetchData({int requestCount = 1}) async {
print('An error occurred: $e');
}
return {};
}
}
1 change: 1 addition & 0 deletions lib/main.dart
23 changes: 15 additions & 8 deletions search_compute.dart → lib/search_compute.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:math';
import 'package:compute/compute.dart';

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

List<Map<String, dynamic>> list = []; // computedData
List<Map<String, dynamic>> filteredList = [];
Expand All @@ -18,12 +19,14 @@ Future<void> searchFromCompute() async {
searching = true;
final input = inputController.text;
if (input.isNotEmpty && list.isNotEmpty) {
await compute(() {
filteredList.clear();
filteredList.addAll(list.where((Map<String, dynamic> map) {
return map.values.where((e) => e.value.contains(input)).isNotEmpty;
}).toList());
} as ComputeCallback<void, dynamic>, null);
await compute(
() {
filteredList.clear();
filteredList.addAll(list.where((Map<String, dynamic> map) {
return map.values.where((e) => e.value.contains(input)).isNotEmpty;
}).toList());
} as ComputeCallback<void, dynamic>,
null);
}
searching = false;
}
Expand All @@ -33,7 +36,11 @@ Future<void> emulateTextInput() async {
for (int i = 0; i < list.length; i++) {
words.addAll(list[i].values.map((e) => e.value as String).toSet().toList());
}
words = words.map((String word) => word.substring(0, min(word.length, 3))).toSet().take(3).toList();
words = words
.map((String word) => word.substring(0, min(word.length, 3)))
.toSet()
.take(3)
.toList();

for (var word in words) {
final List<String> letters = word.split('');
Expand All @@ -57,4 +64,4 @@ Future<void> inputText(String word) async {
inputController.value = TextEditingValue(text: word);
await Future.delayed(const Duration(milliseconds: 500));
}
}
}
10 changes: 8 additions & 2 deletions search_isolate.dart → lib/search_isolate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:isolate';
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

List<Map<String, dynamic>> list = []; // computedData
List<Map<String, dynamic>> filteredList = [];
Expand All @@ -18,6 +19,7 @@ Future<void> searchFromIsolate() async {
searching = true;
final ReceivePort receivePort = ReceivePort();
final isolate = await Isolate.spawn(filterDataIsolate, receivePort.sendPort);
print(isolate.debugName);
await for (var response in receivePort) {
if (response == null) {
break;
Expand All @@ -43,7 +45,11 @@ Future<void> emulateTextInput() async {
for (int i = 0; i < list.length; i++) {
words.addAll(list[i].values.map((e) => e.value as String).toSet().toList());
}
words = words.map((String word) => word.substring(0, min(word.length, 3))).toSet().take(3).toList();
words = words
.map((String word) => word.substring(0, min(word.length, 3)))
.toSet()
.take(3)
.toList();

for (var word in words) {
final List<String> letters = word.split('');
Expand All @@ -67,4 +73,4 @@ Future<void> inputText(String word) async {
inputController.value = TextEditingValue(text: word);
await Future.delayed(const Duration(milliseconds: 500));
}
}
}
9 changes: 7 additions & 2 deletions search_main_thread.dart → lib/search_main_thread.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

List<Map<String, dynamic>> list = []; // computedData
List<Map<String, dynamic>> filteredList = [];
Expand Down Expand Up @@ -30,7 +31,11 @@ Future<void> emulateTextInput() async {
for (int i = 0; i < list.length; i++) {
words.addAll(list[i].values.map((e) => e.value as String).toSet().toList());
}
words = words.map((String word) => word.substring(0, min(word.length, 3))).toSet().take(3).toList();
words = words
.map((String word) => word.substring(0, min(word.length, 3)))
.toSet()
.take(3)
.toList();

for (var word in words) {
final List<String> letters = word.split('');
Expand All @@ -54,4 +59,4 @@ Future<void> inputText(String word) async {
inputController.value = TextEditingValue(text: word);
await Future.delayed(const Duration(milliseconds: 500));
}
}
}
34 changes: 34 additions & 0 deletions pubspec.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: isolate_examples
version: 0.1.0

description:
Isolate examples

homepage: https://github.com/jwinarske/isolates.dart

environment:
sdk: '>=3.5.0 <4.0.0'

platforms:
linux:

dependencies:
args: ^2.5.0
compute: ^1.0.2
ffi: ^2.1.3
flutter:
sdk: flutter
http: ^1.2.2

dev_dependencies:
lints: ^4.0.0
test: ^1.25.8
test_cov: ^1.0.1

executables:
loading-compute: loading_compute
loading-isolate: loading_isolate
loading-main-thread: loading_main_thread
search-compute: search_compute
search-isolate: search_isolate
search-main-thread: search_main_thread