mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
What's important about this code is that it's presenting services outside the VM, not the particular technology used to present the services.
88 lines
2.2 KiB
Dart
88 lines
2.2 KiB
Dart
// Copyright 2014 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Snapshot from http://www.nasdaq.com/screening/company-list.aspx
|
|
// Fetched 2/23/2014.
|
|
// "Symbol","Name","LastSale","MarketCap","IPOyear","Sector","industry","Summary Quote",
|
|
// Data in stock_data.json
|
|
|
|
import 'dart:convert';
|
|
import 'dart:math' as math;
|
|
|
|
import 'package:sky/services.dart';
|
|
|
|
final math.Random _rng = new math.Random();
|
|
|
|
class Stock {
|
|
String symbol;
|
|
String name;
|
|
double lastSale;
|
|
String marketCap;
|
|
double percentChange;
|
|
|
|
Stock(this.symbol, this.name, this.lastSale, this.marketCap, this.percentChange);
|
|
|
|
Stock.fromFields(List<String> fields) {
|
|
// FIXME: This class should only have static data, not lastSale, etc.
|
|
// "Symbol","Name","LastSale","MarketCap","IPOyear","Sector","industry","Summary Quote",
|
|
lastSale = 0.0;
|
|
try{
|
|
lastSale = double.parse(fields[2]);
|
|
} catch(_) {}
|
|
symbol = fields[0];
|
|
name = fields[1];
|
|
marketCap = fields[4];
|
|
percentChange = (_rng.nextDouble() * 20) - 10;
|
|
}
|
|
}
|
|
|
|
class StockData {
|
|
List<List<String>> _data;
|
|
|
|
StockData(this._data);
|
|
|
|
void appendTo(List<Stock> stocks) {
|
|
for (List<String> fields in _data)
|
|
stocks.add(new Stock.fromFields(fields));
|
|
}
|
|
}
|
|
|
|
typedef void StockDataCallback(StockData data);
|
|
const _kChunkCount = 30;
|
|
|
|
String _urlToFetch(int chunk) {
|
|
if (rootBundle == null)
|
|
return '../data/stock_data_${chunk}.json';
|
|
return 'https://domokit.github.io/examples/stocks/data/stock_data_${chunk}.json';
|
|
}
|
|
|
|
class StockDataFetcher {
|
|
int _nextChunk = 0;
|
|
final StockDataCallback callback;
|
|
|
|
static bool actuallyFetchData = true;
|
|
|
|
StockDataFetcher(this.callback) {
|
|
_fetchNextChunk();
|
|
}
|
|
|
|
void _fetchNextChunk() {
|
|
if (!actuallyFetchData)
|
|
return;
|
|
fetchBody(_urlToFetch(_nextChunk++)).then((Response response) {
|
|
String json = response.bodyAsString();
|
|
if (json == null) {
|
|
print("Failed to load stock data chunk ${_nextChunk - 1}");
|
|
return;
|
|
}
|
|
JsonDecoder decoder = new JsonDecoder();
|
|
|
|
callback(new StockData(decoder.convert(json)));
|
|
|
|
if (_nextChunk < _kChunkCount)
|
|
_fetchNextChunk();
|
|
});
|
|
}
|
|
}
|