【问题标题】:Provider Package and where to put my methods/logic?提供程序包以及将我的方法/逻辑放在哪里?
【发布时间】:2020-05-30 21:38:54
【问题描述】:

我正在尝试将我的代码转换为使用提供程序(提供程序包),因为我认为它可能会更有效,尤其是因为我需要通过“设置页面”和“添加更多名称页面”来更新小部件' 位于小部件树的下方。

但是,我不确定在使用提供程序时将大部分“逻辑”放在哪里。例如,在我的原始格式中,我有两个列表 namesgames

final List<String> names = [];
  List<String> games = ["Game 1", "Game 2", "Game 3", "Game 4", "Game 5"]; 

之前,我创建了一个将添加到列表names 的文本字段。

TextEditingController nameController = TextEditingController();

TextField(
     controller: nameController,
     onSubmitted: addToList(),

addToList() {
    if (nameController.text.isNotEmpty) {
      setState(() {
        names.add(nameController.text);
      });
      nameController.clear();
    }
  }

我应该将这个TextFieldaddTooList 方法放入我的DataProvider 类中,如下所示,因为我需要在小部件树的下方添加更多namesgames。如果是这样,您将如何/如何使用它?

import 'package:flutter/material.dart';

class DataProvider with ChangeNotifier{
  List<String> _names;
  List<String> _games;

  DataProvider(){
    _names = [];
    _games = ["Game 1", "Game 2", "Game 3", "Game 4", "Game 5"];
  }

  // Getters - How we get these values
  List<String> get names => _names;  
  List<String> get games => _games;

  // Setters
  void setNames(List<String> names){
    _names = names;
    notifyListeners();
  }

  void setGames(List<String> games){
    _games = games;
    notifyListeners();
  }
}

谢谢!将不胜感激。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    通常,您会将与 UI 不直接相关的任何内容放在您的 Provider 中。然后在小部件中执行任何操作,例如修改 UI 和使用来自 Provider 的数据。

    另一种看待它的方式是,“如果它在 Provider 中,我可以编写更少的代码吗?”因此,如果您在许多地方调用您的函数,并且这些值在其他地方被修改和使用,请将其放在 Provider 中。

    总的来说,它只是为了让您的开发更容易,所以做最有意义的事情,没有严格的规则。

    编辑:

    如果没有看到更多您的代码,很难说出我将如何使用您的示例来完成它。但我猜 TextField 会保留在小部件中,因为它是一个 UI 元素。而且您的函数看起来应该在 Provider 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-29
      • 2012-01-22
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 2019-08-11
      • 2012-08-21
      • 2014-03-16
      相关资源
      最近更新 更多