寻找有关从 ListView 将状态实现为 add/delete 的建议

Looking for advice on implementing state to add/delete from a ListView

在学习了很多视频和课程之后,我正在尝试制作我的第一个应用程序。在此之前我没有编程经验。 Dart/Flutter 是我的第一语言,但我无法完成应用程序的最后几步。

我第一次尝试能够从 ListView.builder 添加和删除股票,但我无法从 api 获取数据以正常工作。

我想出了如何按照我需要的方式使用 api,但我无法让它与应用程序 built 的方式一起工作。所以我完全重做了应用程序以使用 api 数据,但现在我不知道如何使用 TextField 添加股票并使用 Dismissible 删除它们。

我讨厌寻求帮助,因为我正在努力自学,但自从 ui 成为 built 以来,我已经被困了 2 周。我在 Stack 上观看了很多视频并提出了问题,但都没有成功。

如果有人能告诉我如何实现状态管理,将不胜感激!

https://github.com/romajc84/my_stock_app.git

我检查了代码库,首先是初学者的伟大工作!我写了一些笔记(我没有时间写很多东西,但你必须更多地关注架构)。

关闭功能是通过简单的 Dismissible 小部件完成的。

I hate to ask for help because I am trying to teach myself as I got but I have been stuck for 2 weeks since the ui was built.

不讨厌问^_^。可以问,但你的问题应该有重点和具体。您不应该期望人们在您的存储库中搜索并修复您的错误。你必须展示你有疑问的代码片段、你尝试过的、你期望的以及你得到的。 并尝试根据 post.

保留一个具体问题

这样你会得到你想要的帮助。

我只是像这样使用 ChangeNotifier 实现了添加机制:

import 'dart:collection';

import 'package:flutter/material.dart';
import 'package:http/http.dart';

import 'http_etf.dart';
import 'http_stock.dart';

class ProvModel extends ChangeNotifier {
  static const _defaultSymbols = ['t', 'aapl', 'tsla', 'amd', 'googl', 'spy'];

  final List<Stock> _symbols = [];
  final List<Etf> _etf = [];
  bool _adding = false;

  void fetchData() async {
    _fetchEtf().catchError(print);
    _fetchStocks().catchError(print);
  }

  Future<void> _fetchStocks() async {
    final stocks = await fetchStocks(_defaultSymbols, Client());
    _symbols.addAll(stocks);
    notifyListeners();
  }

  Future<void> _fetchEtf() async {
    final etf = await fetchEtf(Client());
    _etf.addAll(etf);
    notifyListeners();
  }

  UnmodifiableListView<Stock> get symbols => UnmodifiableListView(_symbols);
  UnmodifiableListView<Etf> get etf => UnmodifiableListView(_etf);
  bool get adding => _adding;

  void addSymbol(String newSymbol) async {
    _adding = true;
    notifyListeners();
    final stocks = await fetchStocks([newSymbol], Client());
    if (stocks == null || stocks.isEmpty) return;
    final stock = stocks.first;
    _symbols.add(stock);
    _adding = false;
    notifyListeners();
  }
}

我在 MyApp 中创建了一个专用于在应用程序开始为 stocksetf 获取数据后工作的方法,如下所示:

import 'package:flutter/material.dart';
import 'package:my_stock_app/prov_model.dart';
import 'package:provider/provider.dart';
import 'home_page.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => ProvModel()..fetchData(),
      child: MaterialApp(
        theme: ThemeData(
          primaryColor: Colors.black,
          textTheme: TextTheme(
            bodyText2: TextStyle(
              color: Colors.white,
            ),
          ),
        ),
        home: HomePage(),
      ),
    );
  }
}

我试着稍微重构一下代码。 这是正常运行的项目:Repository

坚持下去,不断学习!