我检查了代码库,首先对初学者来说做得很好!我写了一些笔记(我没有时间写很多东西,但你必须更多地关注架构)。
解除功能是通过简单的 Dismissible 小部件完成的。
我讨厌寻求帮助,因为我正在尝试自学,但是自从构建 ui 以来,我已经被困了 2 周。
不要讨厌问^_^。可以问,但你的问题应该是有针对性的和具体的。您不应该期望人们在您的存储库中搜索并修复您的错误。你必须展示你有疑问的代码片段,你尝试了什么,你期望什么以及你得到了什么。并尝试在每个帖子中保留一个特定问题。
这样你就会得到你想要的帮助。
我只使用 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 中开始为 thestocks
和 the获取数据时工作的方法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(),
),
);
}
}
我试着重构一下代码。这是正常运行的项目:存储库
坚持下去,继续学习!