Firebase AI Logic | Firebase Genkit | |
---|---|---|
Integration | Client-side SDK (Flutter, Web, Android, iOS, Unity) | Backend framework (Node.js, Go, Python); client apps call backend |
Dart/Flutter Support | ✅ Full SDK for Flutter | ❌ No native SDK; use via HTTP/cloud backend |
Deployment | No backend needed (uses Firebase proxy) | Requires backend deployment (Cloud Functions/Run/custom server) |
Model Providers | Google on |
Remember the wonder of looking through a kaleidoscope as a child, watching patterns shift and transform? That same sense of magic exists in today's tech world. We're still those curious kids—only now, we're watching AI reshape our digital landscapes, with fragments of code and data rearranging at every turn of innovation. But unlike childhood toys, we're not just observers; we shape the patterns ourselves.
The magic isn’t in finding permanent solutions (we all know those don’t last in tech) but in bringing our creativity to each new formation. That nostalgia for simple wonder inspired me to create my Flutter kaleidoscope—where emojis become the fragments of an ever-changing digital reflection of how we communicate. Playful, ephemeral, yet meaningful in their brief alignments.
I wanted this piece to feel like looking through a real kaleidoscope—something hypnotic, a momentary escape from the day’s worries, draw
/// Designed as a submission for Flutteristas Code Challenge 2023, the SnowflakeCanvas | |
/// is a simple Flutter app that creates a visual simulation of snowflakes | |
/// falling at different speeds. It uses a `CustomPainter` and a `Koch curve` | |
/// to draw snowflakes on a canvas, with each snowflake having a unique size and | |
/// falling speed. The snowflakes enter the screen smoothly from the top and reset | |
/// their position once they fall off the bottom, creating an endless snowfall effect. | |
/// This app uses basic animation techniques with `setState` and is designed to work | |
/// in environments with limited animation capabilities such as DartPad. | |
import 'dart:async'; |
import 'dart:convert'; | |
import 'package:flutter/material.dart'; | |
import 'package:shared_preferences/shared_preferences.dart'; | |
import 'highscore.dart'; | |
void main() { | |
runApp(const MyApp()); | |
} |
import 'dart:convert'; | |
import 'package:shared_preferences/shared_preferences.dart'; | |
class HighScore { | |
final String username; | |
final int difficulty; | |
final int score; | |
HighScore( |
import 'package:flutter/material.dart'; | |
void main() => runApp(new MyApp()); | |
class MyApp extends StatelessWidget { | |
// This widget is the root of your application. | |
@override | |
Widget build(BuildContext context) { | |
return new MaterialApp( | |
title: 'Flutter Demo', |
<?xml version="1.0" encoding="utf-8"?> | |
<!-- | |
Copyright 2014 Google, Inc. | |
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 |
<?xml version="1.0" encoding="utf-8"?> | |
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
android:id="@+id/main_scroll_view" | |
android:layout_width="match_parent" | |
android:layout_height="match_parent" | |
tools:context=".MainActivity"> | |
<LinearLayout | |
android:id="@+id/main_linear" |
package com.example.android.friendsquiz; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.content.res.Configuration; | |
import android.os.Build; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.text.TextUtils; | |
import android.util.Log; |
package com.example.android.friendsquiz; | |
import android.content.Intent; | |
import android.content.res.Configuration; | |
import android.support.v7.app.AppCompatActivity; | |
import android.os.Bundle; | |
import android.text.TextUtils; | |
import android.util.Log; | |
import android.view.Gravity; | |
import android.view.View; |