🧑‍💻Функции-стрелки

пять примеров использования функций-стрелок (arrow functions) в Flutter с StatefulWidget. Функции-стрелки удобны для создания коротких функций, особенно в ситуациях, где просто нужно возвращать результат выражения или в анонимных функциях (например, для обработчиков событий).


Пример 1: Упрощенный обработчик события нажатия

Функция-стрелка используется здесь для обработки нажатия кнопки.

import 'package:flutter/material.dart';

class CounterApp extends StatefulWidget {
  @override
  _CounterAppState createState() => _CounterAppState();
}

class _CounterAppState extends State<CounterApp> {
  int counter = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Counter Example")),
      body: Center(child: Text("Count: $counter", style: TextStyle(fontSize: 24))),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setState(() => counter++),
        child: Icon(Icons.add),
      ),
    );
  }
}

Объяснение: Здесь используется функция-стрелка для простого увеличения counter на 1. Такой синтаксис экономит место и упрощает код.


Пример 2: Возвращение строки с приветствием

В этом примере функция-стрелка возвращает строку приветствия.

import 'package:flutter/material.dart';

class GreetingApp extends StatefulWidget {
  @override
  _GreetingAppState createState() => _GreetingAppState();
}

class _GreetingAppState extends State<GreetingApp> {
  String getGreeting() => "Hello, Flutter!";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Greeting Example")),
      body: Center(child: Text(getGreeting(), style: TextStyle(fontSize: 24))),
    );
  }
}

Объяснение: Функция-стрелка getGreeting возвращает строку без необходимости использовать блоки {} или оператор return. Такой синтаксис удобен, когда функция состоит из одного выражения.


Пример 3: Условный вывод текста

Функция-стрелка используется здесь для определения текста в зависимости от значения переменной isEnabled.

import 'package:flutter/material.dart';

class StatusApp extends StatefulWidget {
  @override
  _StatusAppState createState() => _StatusAppState();
}

class _StatusAppState extends State<StatusApp> {
  bool isEnabled = true;

  String getStatus() => isEnabled ? "Enabled" : "Disabled";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Status Example")),
      body: Center(child: Text("Status: ${getStatus()}", style: TextStyle(fontSize: 24))),
      floatingActionButton: FloatingActionButton(
        onPressed: () => setState(() => isEnabled = !isEnabled),
        child: Icon(Icons.toggle_on),
      ),
    );
  }
}

Объяснение: getStatus использует функцию-стрелку для возврата строки в зависимости от состояния isEnabled. Это позволяет сделать код компактнее.


Пример 4: Краткая функция вычисления площади

Функция-стрелка принимает два параметра для вычисления площади и возвращает результат.

import 'package:flutter/material.dart';

class AreaApp extends StatefulWidget {
  @override
  _AreaAppState createState() => _AreaAppState();
}

class _AreaAppState extends State<AreaApp> {
  double calculateArea(double width, double height) => width * height;

  @override
  Widget build(BuildContext context) {
    double width = 5;
    double height = 10;
    return Scaffold(
      appBar: AppBar(title: Text("Area Example")),
      body: Center(child: Text("Area: ${calculateArea(width, height)}", style: TextStyle(fontSize: 24))),
    );
  }
}

Объяснение: Функция calculateArea принимает width и height и возвращает их произведение. Функция-стрелка делает код более компактным и легко читаемым.


Пример 5: Фильтрация списка значений

Здесь используется функция-стрелка для фильтрации списка чисел и создания нового списка только из чётных чисел.

import 'package:flutter/material.dart';

class FilterApp extends StatefulWidget {
  @override
  _FilterAppState createState() => _FilterAppState();
}

class _FilterAppState extends State<FilterApp> {
  List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

  List<int> getEvenNumbers() => numbers.where((number) => number % 2 == 0).toList();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("Filter Example")),
      body: Center(child: Text("Even Numbers: ${getEvenNumbers()}", style: TextStyle(fontSize: 24))),
    );
  }
}

Объяснение: getEvenNumbers использует функцию-стрелку для фильтрации списка чисел, возвращая только чётные.

Last updated