寻找有关从 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 上观看了很多视频并提出了问题,但都没有成功。
如果有人能告诉我如何实现状态管理,将不胜感激!
我检查了代码库,首先是初学者的伟大工作!我写了一些笔记(我没有时间写很多东西,但你必须更多地关注架构)。
关闭功能是通过简单的 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 中创建了一个专用于在应用程序开始为 stocks
和 etf
获取数据后工作的方法,如下所示:
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
坚持下去,不断学习!
在学习了很多视频和课程之后,我正在尝试制作我的第一个应用程序。在此之前我没有编程经验。 Dart/Flutter 是我的第一语言,但我无法完成应用程序的最后几步。
我第一次尝试能够从 ListView.builder 添加和删除股票,但我无法从 api 获取数据以正常工作。
我想出了如何按照我需要的方式使用 api,但我无法让它与应用程序 built 的方式一起工作。所以我完全重做了应用程序以使用 api 数据,但现在我不知道如何使用 TextField 添加股票并使用 Dismissible 删除它们。
我讨厌寻求帮助,因为我正在努力自学,但自从 ui 成为 built 以来,我已经被困了 2 周。我在 Stack 上观看了很多视频并提出了问题,但都没有成功。
如果有人能告诉我如何实现状态管理,将不胜感激!
我检查了代码库,首先是初学者的伟大工作!我写了一些笔记(我没有时间写很多东西,但你必须更多地关注架构)。
关闭功能是通过简单的 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 中创建了一个专用于在应用程序开始为 stocks
和 etf
获取数据后工作的方法,如下所示:
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
坚持下去,不断学习!