class SearchViewModel ( searchRepository : SearchRepository ) : ViewModel() {
val query = MutableLiveData < String >()
@FlowPreview
@ExperimentalCoroutinesApi
val repo = query.asFlow()
.debounce( 300 )
.filter {
it.trim().isEmpty(). not ()
}
.distinctUntilChanged()
.flatMapLatest {
searchRepository.searchRepo(it).asFlow()
}.asLiveData()
}
الارتداد: هنا، يتم استخدام عامل الارتداد مع ثابت زمني. يعالج عامل الارتداد الحالة عندما يكتب المستخدم "a"، "ab"، "abc"، في وقت قصير جدًا. لذلك سيكون هناك الكثير من مكالمات الشبكة. لكن المستخدم مهتم أخيرًا بنتيجة البحث "abc". لذلك، يجب عليك تجاهل نتائج "أ" و"أب". من الناحية المثالية، يجب ألا تكون هناك مكالمات شبكة لـ "a" و"ab" حيث يقوم المستخدم بكتابتها في وقت قصير جدًا. لذلك، يأتي مشغل الارتداد للإنقاذ. سينتظر الارتداد الوقت المحدد لفعل أي شيء، وإذا جاء أي استعلام بحث آخر بين ذلك الوقت، فسوف يتجاهل العنصر السابق ويبدأ انتظار ذلك الوقت مرة أخرى مع استعلام البحث الجديد. إذا لم يأت أي شيء جديد خلال هذا الوقت الثابت المحدد، فسيتم متابعة استعلام البحث هذا لمزيد من المعالجة. لذلك، لا يُصدر الارتداد إلا عنصرًا من عنصر يمكن ملاحظته إذا مرت فترة زمنية معينة دون أن ينبعث منه عنصر آخر.
عامل التصفية: يتم استخدام عامل التصفية لتصفية السلسلة غير المرغوب فيها مثل السلسلة الفارغة في هذه الحالة لتجنب استدعاء الشبكة غير الضروري.
DistinctUntilChanged: يتم استخدام عامل التشغيل DifferentUntilChanged لتجنب مكالمات الشبكة المكررة. لنفترض أن آخر استعلام بحث مستمر كان "abc" وقام المستخدم بحذف "c" وكتب "c" مرة أخرى. لذلك مرة أخرى هو "اي بي سي". لذا، إذا كانت مكالمة الشبكة جارية بالفعل باستخدام استعلام البحث "abc"، فلن يتم إجراء المكالمة المكررة مرة أخرى مع استعلام البحث "abc". لذا، فإن متميزUntilChanged يمنع العناصر المتتالية المكررة المنبعثة من المصدر الذي يمكن ملاحظته.
flatMapLatest: هنا، يتم استخدام عامل التشغيل SwitchMap لتجنب نتائج مكالمات الشبكة التي ليست هناك حاجة إليها لعرضها للمستخدم. لنفترض أن استعلام البحث الأخير كان "ab" وهناك اتصال مستمر بالشبكة لـ "ab" وقام المستخدم بكتابة "abc". فأنت لم تعد مهتمًا بنتيجة "ab". أنت مهتم فقط بنتيجة "abc". لذلك، يأتي SwitchMap للإنقاذ. إنه يوفر فقط نتيجة آخر استعلام بحث (الأحدث) ويتجاهل الباقي.
Copyright 2019 Hari Singh Kulhari
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.