Skip to content

Instantly share code, notes, and snippets.

View ValeryPonomarenko's full-sized avatar
:octocat:
Coding

Valery ValeryPonomarenko

:octocat:
Coding
  • Toronto
View GitHub Profile
@override
void paint(Canvas canvas, Size size) {
final center = size.bottomCenter(Offset(0, -dotRadius));
var radius = startBarRadius;
for (var layer = 0; layer < layers; layer++) {
final lengthOfHalfCircle = pi * radius;
final dotsNumber = (lengthOfHalfCircle / _dotsSizeWithSpacing).floor();
@override
void paint(Canvas canvas, Size size) {
final center = size.bottomCenter(Offset(0, -dotRadius));
final lengthOfHalfCircle = pi * startBarRadius;
final dotsNumber = (lengthOfHalfCircle / _dotsSizeWithSpacing).floor();
final angleStep = _halfCircle / (dotsNumber - 1);
var angle = _startAngle;
class _DiagramPainter extends CustomPainter {
_DiagramPainter({
required this.dotRadius,
required this.startBarRadius,
required this.layers,
required this.layersSpacing,
required this.dotsSpacing,
required this.progress,
required Color dotColor,
required Color progressDotColor,
class HalfCircleProgressBar extends StatelessWidget {
const HalfCircleProgressBar({
Key? key,
required this.progress,
required this.dotColor,
required this.progressDotColor,
this.dotRadius = _defaultDotRadius,
this.startBarRadius = _defaultStartBarRadius,
this.layers = _defaultLayers,
this.layersSpacing = _defaultLayersSpacing,
@ValeryPonomarenko
ValeryPonomarenko / DestinationFragment.kt
Created April 24, 2019 21:37
Rendering a Screen Based On Its ViewState
class DestinationFragment : Fragment() {
//code...
@Inject
internal lateinit var renderer: Renderer<DestinationViewState>
private val viewModel by lazy { /* code ... */ }
//code...
//EmptyQuery state
class EmptyQueryViewStateRenderer @Inject constructor(): ViewStateRenderer<DestinationViewState> {
override fun render(view: View, viewState: DestinationViewState) {
view.text_message.visibility = View.VISIBLE
view.progress.visibility = View.GONE
view.recyclerView_destinations.visibility = View.GONE
view.text_message.text = "Enter the city you want to flight"
}
}
@ValeryPonomarenko
ValeryPonomarenko / DestinationViewStateRendererPicker.kt
Created April 24, 2019 19:01
DestinationViewStateRendererPicker
class DestinationViewStateRendererPicker : ViewStateRendererPicker<DestinationViewState> {
override fun pick(viewState: DestinationViewState): KClass<out ViewStateRenderer<DestinationViewState>> =
when {
viewState.query.isBlank() -> EmptyQueryViewStateRenderer::class
viewState.isLoading -> LoadingViewStateRenderer::class
viewState.destinations.isEmpty() -> EmptyViewStateRenderer::class
else -> RegularViewStateRenderer::class
}
}
@ValeryPonomarenko
ValeryPonomarenko / DestinationViewState.kt
Created April 24, 2019 18:40
Rendering a Screen Based On Its ViewState
data class DestinationViewState(
val destinations: List<SpannableCity> = listOf(),
val query: String = "",
val isLoading: Boolean = false
)
@ValeryPonomarenko
ValeryPonomarenko / ViewStateRenderer.kt
Last active April 24, 2019 19:04
Rendering a Screen Based On Its ViewState
interface ViewStateRenderer<VS> {
fun render(view: View, viewState: VS)
}
@ValeryPonomarenko
ValeryPonomarenko / ViewStateRendererPicker.kt
Created April 10, 2019 12:39
Rendering a Screen Based On Its ViewState
interface ViewStateRendererPicker<VS> {
fun pick(viewState: VS): KClass<out ViewStateRenderer<VS>>
}