<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ratratatyu</title>
    <description>The latest articles on DEV Community by Ratratatyu (@ratratatyu).</description>
    <link>https://dev.to/ratratatyu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3779642%2F979954a4-b024-4f96-9249-ffeaaccdaeb6.png</url>
      <title>DEV Community: Ratratatyu</title>
      <link>https://dev.to/ratratatyu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ratratatyu"/>
    <language>en</language>
    <item>
      <title>Dev Challenge. Solo Learning — Gamified Productivity Tracker</title>
      <dc:creator>Ratratatyu</dc:creator>
      <pubDate>Sun, 01 Mar 2026 17:30:48 +0000</pubDate>
      <link>https://dev.to/ratratatyu/dev-challenge-solo-learning-gamified-productivity-tracker-33d4</link>
      <guid>https://dev.to/ratratatyu/dev-challenge-solo-learning-gamified-productivity-tracker-33d4</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;This project inspired by observing how quickly motivation can drop among my peers—not just in programming, but in other activities as well. Many people struggle to see the results of their efforts immediately, which often makes it hard to stay consistent. I wanted to create a tool that helps users track their time spent on tasks or learning sessions, while also giving instant feedback and a sense of progression.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built Solo Learning, an app that gamifies productivity and learning. Users can set timers for their tasks, and after completing each timer, they earn XP (experience points) and level up—similar to a game. This system allows users to visually see their progress and stay motivated, even for tasks that take time or effort to complete.&lt;/p&gt;

&lt;p&gt;This is an MVP version, and while I had many more ideas for features like multiple timers, progress charts, and advanced analytics, I was limited by the two-day timeframe and my current level of experience with Flutter. Despite these limitations, I focused on creating a working prototype that clearly demonstrates the core concept of motivating users through visualized progress and gamification.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mjm79aynhjzde13e2q0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mjm79aynhjzde13e2q0.png" alt="This is a main screen. Here you can see your level, how much xp you need before the next one, and a motivational block (it was planned to make a diagram there to show how much time was spent, but I didn’t have time to implement it)" width="555" height="1071"&gt;&lt;/a&gt;&lt;br&gt;
This is a main screen. Here you can see your level, how much xp you need before the next one, and a motivational block (it was planned to make a diagram there to show how much time was spent, but I didn’t have time to implement it)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgy6yt4c9qptahveqgmm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgy6yt4c9qptahveqgmm.png" alt="This is a screen with a timer. After the timer ends, the user receives xp" width="559" height="1064"&gt;&lt;/a&gt;&lt;br&gt;
This is a screen with a timer. After the timer ends, the user receives xp&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqq7p8ngyj1wa2a9szsky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqq7p8ngyj1wa2a9szsky.png" alt="This is a congratulations screen where it is indicated that the user has earned 50 xp" width="537" height="1076"&gt;&lt;/a&gt;&lt;br&gt;
This is a congratulations screen where it is indicated that the user has earned 50 xp&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9lgj26ygy5jpwfwdk99.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9lgj26ygy5jpwfwdk99.png" alt="This is the level up congratulations screen." width="553" height="1053"&gt;&lt;/a&gt;&lt;br&gt;
This is the level up congratulations screen.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;The project is available on GitHub: (&lt;a href="https://github.com/RatRatatyu/SoloLearningApp" rel="noopener noreferrer"&gt;https://github.com/RatRatatyu/SoloLearningApp&lt;/a&gt;)&lt;/p&gt;
&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;I built this project entirely in Flutter, using Provider for state management. I focused on creating a clean and responsive interface with interactive components like timers, progress indicators, and level-up notifications. The gamification elements were designed to be simple yet engaging, allowing users to see immediate rewards for completing tasks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
class stateProvider extends ChangeNotifier{
  bool isLevelUp = false;
  int levelNow = 1;
  late int nextLevelXp = 100;
  int totalXpNow = 0;

  void levelUp(){
    levelNow++;
    isLevelUp = true;
    nextLevelXp = levelNow * 100;
    notifyListeners();
  }

  void resetLevelUp(){
    isLevelUp = false;
    notifyListeners();
  }

  void xpUp(int xp){
    totalXpNow += xp;
    if (totalXpNow &amp;gt;= nextLevelXp){
      totalXpNow -= nextLevelXp;
      levelUp();
    }
    notifyListeners();
  }

}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I created a stateProvider class that handles XP, levels, and level-up logic. Functions like xpUp(), levelUp(), and resetLevelUp() manage the user’s progress. This way, all the core data is centralized and easy to track.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;final isLevelUp = context.select((stateProvider p) =&amp;gt; p.isLevelUp);
    if (isLevelUp) {
      WidgetsBinding.instance.addPostFrameCallback((_) async {
        await Navigator.push(
          context,
          MaterialPageRoute(builder: (_) =&amp;gt; levelUpWidget()),
        );
        if (!context.mounted) return;

        context.read&amp;lt;stateProvider&amp;gt;().resetLevelUp();
      });
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On the main screen, I monitor whether the provider has been updated and whether the level has increased, which would show a screen with rewards&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;timer = Timer.periodic(const Duration(seconds: 1), (t) {
      if (remainingTime.inSeconds &amp;gt; 0) {
        setState(() {
          remainingTime -= const Duration(seconds: 1);
        });
      } else {
        t.cancel();
        setState(() {
          isRunning = false;
        });
        Navigator.push(context, MaterialPageRoute(builder: (context)=&amp;gt; xpUpWidget()));
      }
    });
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the timer has expired I show the user a screen to increase xp&lt;/p&gt;

&lt;p&gt;Also, pictures with cats were created using AI&lt;/p&gt;

&lt;p&gt;Although this is my first submission to a challenge like this, it has been an invaluable learning experience. I now understand more clearly the areas where I need to improve and the tools I want to explore further. I plan to continue developing this app beyond the competition, adding features such as multiple timers, progress charts, more interactive animations, and overall polish for a future release.&lt;/p&gt;

&lt;p&gt;I also want to wish good luck to all other participants! For me, the main goal was not only competing but testing my skills, learning, and gaining experience, and I look forward to participating in similar challenges in the future.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Flutter for Beginners: Where to Start?</title>
      <dc:creator>Ratratatyu</dc:creator>
      <pubDate>Sun, 22 Feb 2026 17:13:18 +0000</pubDate>
      <link>https://dev.to/ratratatyu/flutter-for-beginners-where-to-start-142a</link>
      <guid>https://dev.to/ratratatyu/flutter-for-beginners-where-to-start-142a</guid>
      <description>&lt;p&gt;&lt;strong&gt;Who this article is for:&lt;/strong&gt; for those who are just starting their journey in Flutter framework development&lt;/p&gt;

&lt;p&gt;Hello everyone! This is an introductory guide to Flutter. We will cover the basic concepts and break down the code that Flutter generates when creating a new project. I started mobile app development with Flutter — without knowing architecture and without experience in Kotlin or Swift. Only later, when I figured out the basics, did I move on to native development. I can say: if you already write in Kotlin or Swift, it will be very easy for you. And vice versa — Flutter will simplify learning native development. &lt;/p&gt;

&lt;h2&gt;
  
  
  What is Flutter?
&lt;/h2&gt;

&lt;p&gt;Flutter is a cross-platform framework from Google. In simple terms: we write one code and can run the application on Android, iOS, Web, and other platforms. Development is done in the Dart language, which is also created by Google. It's important to understand: Flutter is not just a library, but a full-fledged UI engine that renders the interface itself. &lt;/p&gt;

&lt;p&gt;First, let's discuss what I consider the most important part — &lt;em&gt;architecture&lt;/em&gt;. Flutter uses its own rendering engine, unlike React Native, which renders native platform components. In Flutter, there is the ability to call native code through platform channels, but personally, I haven't encountered situations where this was necessary — the framework covers the vast majority of tasks. During development, you have access to two sets of widgets: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Cupertino — for iOS style &lt;/li&gt;
&lt;li&gt;Material — for Android style &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may know that Android and iOS have different interface patterns and animations. The human brain gets used to consistency: a user who has been on Android for years won't immediately figure out iOS. Therefore, when developing, it's important to consider user comfort and adapt the UI for both platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Widgets
&lt;/h2&gt;

&lt;p&gt;When you open the Flutter documentation, you'll see the phrase: "In Flutter, everything is a widget." A class, text, button — absolutely everything is a widget. But behind this simple statement lies a complex architecture of three trees:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Widget Tree — the widget tree. Lives briefly, serves to describe the UI configuration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Element Tree — the element tree. Lives longer, links widgets to their render objects. When a widget is recreated, the element persists and monitors its widget.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Render Object Tree — the rendering tree. This is where the actual drawing on the screen happens. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Flutter uses a declarative approach: we describe what the UI should look like, and the rendering tree handles the drawing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analizing code
&lt;/h2&gt;

&lt;p&gt;Let's look at the code that is offered to us when creating the project and then improve it&lt;/p&gt;

&lt;p&gt;First, we connect the library with components&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The main function is the entry point to the application. runApp launches it, accepting the root widget&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void main() {
  runApp(const MyApp());
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creating the First Class&lt;br&gt;
It inherits from &lt;em&gt;StatelessWidget&lt;/em&gt; — meaning it has no state and doesn't redraw itself. Here we set general settings: theme, colors, and specify which widget to show first&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the home parameter, we pass MyHomePage and give it a title — we'll use it later.&lt;br&gt;
Next MyHomePage this is a &lt;em&gt;StatefulWidget&lt;/em&gt; — it has state and can redraw. In the class itself, we only create this state&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  @override
  State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState();
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The constructor requires title (required) and saves it to a variable. Widgets can accept any values and use them internally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Everything Happens: State&lt;/strong&gt; &lt;br&gt;
In the _MyHomePageState class, we describe the UI and logic. State can be stored in different ways — here it's simple, so we use setState:&lt;br&gt;
Breaking it down in order&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: &amp;lt;Widget&amp;gt;[
            const Text('You have pushed the button this many times:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scaffold — the "foundation" of the screen. We add AppBar (header), navigation, and body to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;setState — triggers a redraw. But only the build method redraws, not the entire widget. The variable won't reset to zero.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Theme.of(context) — we pull the theme from anywhere in the tree. We set it in MyApp — we use it here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Positioning: Center aligns to the center, inside it Column — a column of elements. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;mainAxisAlignment: MainAxisAlignment.center aligns children to the center vertically.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Strings with variables: '$_counter' — in Dart, this is how we insert variables into text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;FloatingActionButton — a round button in the bottom right corner. In onPressed — our function, tooltip is needed for accessibility (read by screen readers), in child — a plus icon. Flutter gives many icons out of the box, but you can find libraries or draw your own.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice: Improving the Counter
&lt;/h2&gt;

&lt;p&gt;Theory is important, but practice is everything. Let's refine the starter project: add a decrement button and change the layout. Here's what we got&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  @override
  State&amp;lt;MyHomePage&amp;gt; createState() =&amp;gt; _MyHomePageState();
}

class _MyHomePageState extends State&amp;lt;MyHomePage&amp;gt; {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  void _decrementCounter() {
    setState(() {
      _counter--;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: &amp;lt;Widget&amp;gt;[
            const Text('You have pushed the button this many times:'),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
            const SizedBox(height: 20),
            Row(
              mainAxisAlignment: MainAxisAlignment.center,
              children: [
                ElevatedButton(
                  onPressed: _decrementCounter,
                  child: const Icon(Icons.remove),
                ),
                const SizedBox(width: 20),
                ElevatedButton(
                  onPressed: _incrementCounter,
                  child: const Icon(Icons.add),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What We Changed and How It Works&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Added a Decrement Function
Just like _incrementCounter, but we decrement by 1. setState tells Flutter: "data has changed, redraw the screen".
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void _decrementCounter() {
  setState(() {
    _counter--;
  });
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Removed FloatingActionButton&lt;br&gt;
Was: one button in the bottom right corner.&lt;br&gt;
Became: two buttons in the center of the screen.&lt;br&gt;
FloatingActionButton is convenient for one main action. But we now have two actions — plus and minus. So we moved the buttons into the screen body.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Added a Row with Buttons&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Row(
  mainAxisAlignment: MainAxisAlignment.center,
  children: [
    ElevatedButton(
      onPressed: _decrementCounter,
      child: const Icon(Icons.remove),
    ),
    const SizedBox(width: 20),
    ElevatedButton(
      onPressed: _incrementCounter,
      child: const Icon(Icons.add),
    ),
  ],
),

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Row — arranges elements in a row (horizontally). mainAxisAlignment: MainAxisAlignment.spaceAround — aligns elements with equal space between them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ElevatedButton — a button with "elevation" (shadow, material design).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;onPressed — we pass the function directly, without parentheses: _incrementCounter, not _incrementCounter(). Otherwise Flutter will call the function immediately during build, not on press.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this article, we broke down the basic Flutter starter project and refined it a bit — added a second button and played with the layout. But this is only the tip of the iceberg. In real development, there's much more to understand.&lt;br&gt;
The main thing to remember is that Flutter is built on three pillars: widgets, state, and context. Everything is a widget. State changes through setState (or more complex tools). Context gives access to theme, navigation, and parent data.&lt;br&gt;
Practice, experiment, break code and fix it. That's the only way understanding comes.&lt;br&gt;
Good luck in development! 🚀&lt;/p&gt;

</description>
      <category>programming</category>
      <category>beginners</category>
      <category>flutter</category>
      <category>dart</category>
    </item>
  </channel>
</rss>
