DevGang
Авторизоваться

Упрощение управления состояниями с помощью Provider в Flutter

В этой статье мы рассмотрим, как реализовать управление состояниями с помощью пакета Provider во Flutter. В качестве иллюстрации мы создадим приложение Voting Age Calculator. Это приложение поможет пользователям определить, имеют ли они право голосовать, исходя из их возраста.

Введение в Provider

Provider - это универсальное решение для управления состоянием во Flutter. Оно предлагает простой и эффективный способ управления состоянием приложения и обмена им. Давайте рассмотрим, как можно использовать Provider в своих Flutter-проектах.

Что такое Provider и почему это важно для вас?

Provider - это библиотека управления состоянием для Flutter, которая позволяет легко управлять состоянием приложения и делиться им. Ее легко понять и интегрировать в свои проекты, что делает код более организованным и эффективным.

Вот почему Provider должен быть важен для вас:

Простота: Provider упрощает управление состоянием, особенно по сравнению с другими подходами, такими как InheritedWidget или Redux.

Масштабируемость: Provider подходит как для небольших приложений, так и для больших и сложных. Provider никогда не потеряет своей актуальности.

Оптимизация перестроения виджетов: Provider автоматически оптимизирует перестройку виджетов, повышая производительность.

Широкое распространение: Provider хорошо поддерживается сообществом Flutter и используется во многих пакетах с открытым исходным кодом.

Теперь, когда мы поняли, почему Provider - это здорово, давайте посмотрим, как его можно реализовать!

Настройка Provider

Во-первых, убедитесь, что пакет Provider добавлен в качестве зависимости в файл pubspec.yaml:

dependencies:
  flutter:
    sdk: flutter
  provider: ^6.0.5  # Use the latest version

Создание модели

Во Flutter модель представляет собой данные, которыми вы хотите обмениваться в приложении. В нашем случае модель будет хранить сообщение о праве на участие в голосовании и булево значение, указывающее, имеет ли пользователь право голосовать.

class EligibilityScreenProvider extends ChangeNotifier {
  String _eligibilityMessage = "";
  bool _isEligible = false;

  // Check eligibility based on age
  void checkEligibility(int age) {
    if (age >= 18) {
      eligibleForVoting();
    } else {
      notEligibleForVoting();
    }
  }

  // User is eligible for voting
  void eligibleForVoting() {
    _eligibilityMessage = "You are eligible for Voting";
    _isEligible = true;
    notifyListeners();
  }

  // User is not eligible for voting
  void notEligibleForVoting() {
    _eligibilityMessage = "You are not eligible for Voting";
    _isEligible = false;
    notifyListeners();
  }

  String get eligibilityMessage => _eligibilityMessage;
  bool get isEligible => _isEligible;
}

Построение пользовательского интерфейса

Теперь, когда мы получили модель данных, давайте создадим пользовательский интерфейс. Мы разработаем простую форму, в которой пользователи смогут вводить свой возраст и проверять свое право на участие в голосовании.

class Voting extends StatefulWidget {
  const Voting({super.key});

  @override
  State<Voting> createState() => VotingState();
}

class VotingState extends State<Voting> {
  final votingAge = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider<EligibilityScreenProvider>(
      create: (context) => EligibilityScreenProvider(),
      child: Builder(builder: (context) {
        return Scaffold(
          body: Container(
            padding: const EdgeInsets.all(16),
            child: Form(
              child: Consumer<EligibilityScreenProvider>(
                builder: (context, provider, child) {
                  return Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      Container(
                        decoration: BoxDecoration(
                          shape: BoxShape.circle,
                          color: (provider.isEligible == null)
                              ? Colors.grey
                              : provider.isEligible
                                  ? Colors.green
                                  : Colors.red,
                        ),
                        height: 50,
                        width: 50,
                      ),
                      const SizedBox(height: 16),
                      TextFormField(
                        controller: votingAge,
                        decoration:
                            const InputDecoration(hintText: "Enter your age"),
                      ),
                      const SizedBox(height: 16),
                      SizedBox(
                        width: double.infinity,
                        child: ElevatedButton(
                          onPressed: () {
                            final int age = int.parse(votingAge.text.trim());
                            provider.checkEligibility(age);
                          },
                          child: const Text("Check if you can vote"),
                        ),
                      ),
                      const SizedBox(height: 16),
                      Text(provider.eligibilityMessage)
                    ],
                  );
                },
              ),
            ),
          ),
        );
      }),
    );
  }
}

Запуск приложения

В файле main.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),
        useMaterial3: true,
      ),
      debugShowCheckedModeBanner: false,
      home: const Voting(),
    );
  }
}

Заключение

Следуя этому руководству, вы узнали, как реализовать управление состояниями с помощью пакета Provider во Flutter. Мы создали приложение Voting Age Calculator, которое демонстрирует, как Provider может упростить управление состояниями и сделать ваш путь разработки во Flutter более плавным.

Делиться - значит заботиться! Если вы нашли это руководство полезным, не забудьте поделиться им со своими коллегами-разработчиками Flutter. Счастливого кодинга!

Источник:

#Начинающим #Flutter #Android
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу