- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 flutter 中使用 fl_chart
依赖项在图表中实现我的 API 数据。但我就是不知道如何实现它。
以下是我如何实现我的数据:
@ghi đè
Xây dựng tiện ích (BuildContext context) {
return ListView.builder(
padding: EdgeInsets.zero,
shrinkWrap: true,
scrollDirection: Axis.vertical,
physics: NeverScrollableScrollPhysics(),
itemCount: 1,
itemBuilder: (context, index){
// ignore: unused_local_variable
int number = index + 1;
return Container(
width: MediaQuery.of(context).size.width * 0.50,
child: LineChart(
LineChartData(
gridData: FlGridData(
show: true,
drawVerticalLine: true,
getDrawingHorizontalLine: (value) {
return FlLine(
color: const Color(0xff37434d),
strokeWidth: 1,
);
},
getDrawingVerticalLine: (value) {
return FlLine(
color: const Color(0xff37434d),
strokeWidth: 1,
);
},
),
titlesData: FlTitlesData(
show: true,
bottomTitles: SideTitles(
showTitles: true,
reservedSize: 22,
getTextStyles: (value) =>
const TextStyle(color: Color(0xff68737d), fontWeight: FontWeight.bold, fontSize: 16),
getTitles: (value) {
switch (value.toInt()) {
case 2:
return 'MAR';
case 5:
return 'JUN';
case 8:
return 'SEP';
}
return '';
},
margin: 8,
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Color(0xff67727d),
fontWeight: FontWeight.bold,
fontSize: 15,
),
getTitles: (value) {
switch (value.toInt()) {
case 1:
return '10k';
case 3:
return '30k';
case 5:
return '50k';
}
return '';
},
reservedSize: 28,
margin: 12,
),
),
borderData:
FlBorderData(show: true, border: Border.all(color: const Color(0xff37434d), width: 1)),
minX: 0,
maxX: 11,
minY: 0,
maxY: 6,
lineBarsData: [
LineChartBarData(
spots: [
FlSpot(0 , pings[number.toString()][index].volume),
FlSpot(2.6, 2),
FlSpot(4.9, 5),
FlSpot(6.8, 3.1),
FlSpot(8, 4),
FlSpot(9.5, 3),
FlSpot(11, 4),
],
isCurved: true,
colors: gradientColors,
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: true,
),
belowBarData: BarAreaData(
show: true,
colors: gradientColors.map((color) => color.withOpacity(0.3)).toList(),
),
),
],
)
下面是我如何调用我的数据:
Map> pings;
initState() {
Services.fetchPing().then((tankPings) => {
setState((){
pings = tankPings;
})
});
super.initState();
}
我的 API 调用在另一个文件中。我调用 API 如下所示:
static Future<>>> fetchPing() async {
String url3 = 'https://api.orbital.katsana.com/devices/graph-data';
Future _prefs = SharedPreferences.getInstance();
final SharedPreferences prefs = await _prefs;
final token = prefs.getString('access_token');
final response3 = await http.get(url3, headers: {
'Authorization': 'Bearer $token'
});
if(response3.statusCode == 200) {
final tankPings = tankPingFromJson(response3.body);
return tankPings;
}else if(response3.statusCode == 400) {
print('Connection to server is bad');
}else if(response3.statusCode == 500){
print('No authorization');
}
}
我试图在 FlSPot()
函数中实现它。但是然后你收到这个错误:
The method '[]' was called on null.
Receiver: null
Tried calling: []("1")
这是我的模型:
import 'dart:convert';
Map> tankPingFromJson(dynamic str) => Map.from(json.decode(str)).map((k, v) => MapEntry>(k, List.from(v.map((x) => TankPing.fromJson(x)))));
String tankPingToJson(Map> data) => json.encode(Map.from(data).map((k, v) => MapEntry(k, List.from(v.map((x) => x.toJson())))));
class TankPing {
TankPing({
this.trackedAt,
this.fuel,
this.level,
this.volume,
});
DateTime trackedAt;
double fuel;
double level;
double volume;
factory TankPing.fromJson(Map json) => TankPing(
trackedAt: DateTime.parse(json["tracked_at"]),
fuel: json["fuel"].toDouble(),
level: json["level"].toDouble(),
volume: json["volume"].toDouble(),
);
Map toJson() => {
"tracked_at": trackedAt.toString(),
"fuel": fuel,
"level": level,
"volume": volume,
};
}
API 的外观如下:
{
"1": [
{
"tracked_at": "2020-11-20T19:41:21.000000Z",
"fuel": 87.03,
"level": 3.0460554,
"volume": 50665.14
},
{
"tracked_at": "2020-11-22T00:19:41.000000Z",
"fuel": 85.75,
"level": 3.0012249,
"volume": 50051.86
},
{
"tracked_at": "2020-11-22T00:32:00.000000Z",
"fuel": 84.17,
"level": 2.9460489,
"volume": 49265.04
},
]
我的 API 很长,看起来像那样。任何帮助将不胜感激。
1 Câu trả lời
我只是在这里发布代码示例。如果你有任何问题,你可以问我,我会尽量回答我能回答的问题,因为这段代码现在差不多有 2 或 3 年的历史了,我不再从事这个项目了。希望下面的代码对你有帮助!
import 'package:charts_flutter/flutter.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:charts_flutter/flutter.dart' as charts;
import 'package:intl/intl.dart';
import 'custom_symbol_renderer.dart';
import 'package:orbital_app/Model/tank_ping.dart';
import 'package:orbital_app/Provider/api_provider.dart';
class TankChart extends StatefulWidget {
//This is my API class object to extract the data
TankChart({Key key}) : super(key: key);
@ghi đè
_TankChartState createState() => _TankChartState();
}
class _TankChartState extends State {
var ping;
var tankInfo;
// Since I am using a Provider in this code, I call the API here
getPingProvider(){
setState((){
ping = Provider.of(context, listen: false);
ping.getTankPing(context);
});
}
getInfoProvider(){
setState((){
tankInfo = Provider.of(context, listen: false);
tankInfo.getTankInfo(context);
});
}
@ghi đè
initState() {
super.initState();
getPingProvider();
getInfoProvider();
}
@ghi đè
Xây dựng tiện ích (BuildContext context) {
// Here I format the time to normal human time
final numericFormatter = charts.BasicNumericTickFormatterSpec.fromNumberFormat(
NumberFormat.compact()
);
final ping = Provider.of(context);
return ListView.builder(
padding: EdgeInsets.zero,
// Here I want everything to be shrink and expand when the user needs it
shrinkWrap: true,
// Here is where I set whether the graph can be expand by user vertical
// scroll
physics: NeverScrollableScrollPhysics(),
//The data from the API is here
itemCount: ping.tankPing.length,
itemBuilder: (context, index){
if(ping.tankPing.length == null){
return CircularProgressIndicator();
} else if(ping.tankPing == null){
return CircularProgressIndicator();
} else{
int no = index + 1;
final size = MediaQuery.of(context).size;
// Here is the API dot or data dot on the graph
List<>> series = [
charts.Series(
id: '${tankInfo.tankInfos.data[index].name}',
data: ping.tankPing[no.toString()],
colorFn: (_, __) => MaterialPalette.blue.shadeDefault,
domainFn: (TankPing ping, _) => ping.trackedAt,
measureFn: (TankPing ping, _) => ping.volume
),
];
return Container(
height: 250,
child: Card(
child: Column(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.only(
left: 5
),
child: charts.TimeSeriesChart(
series,
animate: false,
domainAxis: charts.DateTimeAxisSpec(
tickFormatterSpec: charts.AutoDateTimeTickFormatterSpec(
day: charts.TimeFormatterSpec(
format: 'dd',
transitionFormat: 'dd MMM',
),
),
),
primaryMeasureAxis: charts.NumericAxisSpec(
tickFormatterSpec: numericFormatter,
renderSpec: charts.GridlineRendererSpec(
// Tick and Label styling here.
labelStyle: charts.TextStyleSpec(
fontSize: 10, // size in Pts.
color: charts.MaterialPalette.black
),
)
),
defaultRenderer: charts.LineRendererConfig(
includeArea: true,
includeLine: true,
includePoints: true,
strokeWidthPx: 0.5,
radiusPx: 1.5
),
dateTimeFactory: const charts.LocalDateTimeFactory(),
behaviors: [
charts.SlidingViewport(),
charts.PanAndZoomBehavior(),
charts.SeriesLegend(
position: charts.BehaviorPosition.top,
horizontalFirst: false,
cellPadding: EdgeInsets.only(
left: MediaQuery.of(context).size.width * 0.27,
top: 15
),
),
charts.SelectNearest(
eventTrigger: charts.SelectionTrigger.tap
),
charts.LinePointHighlighter(
symbolRenderer: CustomCircleSymbolRenderer(size: size),
),
],
selectionModels: [
charts.SelectionModelConfig(
type: charts.SelectionModelType.info,
changedListener: (charts.SelectionModel model) {
if(model.hasDatumSelection) {
final tankVolumeValue = model.selectedSeries[0].measureFn(model.selectedDatum[0].index).round();
final dateValue = model.selectedSeries[0].domainFn(model.selectedDatum[0].index);
CustomCircleSymbolRenderer.value = '$dateValue \n $tankVolumeValue L';
}
})
]),
),
),
],
),
),
);
}
});
}
}
关于flutter - 如何在折线图中实现 API 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65389839/
Tôi đang cố gắng xây dựng một apk từ ứng dụng Flutter của mình nhưng tôi nhận được lỗi này: Lưu ý: /mnt/Software/Linux/Flutter/flutter/.pub-cache/hosted/pub.dartl
Tôi có một ứng dụng lớn hơn có tên là X và một ứng dụng nhỏ hơn có tên là Y. Bây giờ chúng đã tách biệt với nhau và hoạt động tốt. Tôi muốn tích hợp ứng dụng Y vào X. Tôi muốn đưa mã từ Y vào dự án X, nhưng chúng phải có Mail khác nhau
Chọn Tạo dự án Flutter mới trong Android Studio và 4 tùy chọn sau sẽ xuất hiện. Ứng dụng Flutter Plugin Flutter Gói Flutter Mô-đun Flutter
Tôi thấy dự án Flutter của tôi tạo ra một tệp ios/Flutter/Flutter.podspec. Tệp này có tác dụng gì? Nếu nó liên quan đến Flutter.framework được tạo ra? Tôi nên đưa nó vào
Những gì tôi đã thử Thêm/chỉnh sửa tệp .bash_profile.rtf vào vị trí chứa SDK Flutter. xuất PATH=/Người dùng/temur/Tài liệu/Dự án/F
Nhật ký Flutter in ra hàng nghìn nhật ký dài dòng/rác. Tôi đang cố gắng gỡ lỗi một ứng dụng phức tạp, nhưng nội dung in quá dài dòng đến nỗi tôi gặp khó khăn trong việc tìm nội dung mình đang in. Có cách nào để tắt chế độ verbose không? Ví dụ: Logger.level.
Sau khi cập nhật Flutter 1.22, tôi gặp lỗi trong thuộc tính màu LinearGradient, lỗi này báo rằng tham số màu tên chưa được xác định. .Cập nhật plugin flutter và flutter trong Android
Trong mã bên dưới, widget.hintText đang báo lỗi, tôi đang cố gắng tạo bộ chọn ngày thành một thành phần riêng biệt và truyền giá trị văn bản gợi ý một cách động trong khi gọi nó từ tệp khác. nhập 'gói: date_field/date_
Trong mã bên dưới, widget.hintText đang báo lỗi, tôi đang cố gắng tạo bộ chọn ngày thành một thành phần riêng biệt và truyền giá trị văn bản gợi ý một cách động trong khi gọi nó từ tệp khác. nhập 'gói: date_field/date_
Sau khi Flutter 1.0 được phát hành, tôi đang thực hiện các bước để xây dựng môi trường phát triển Flutter. Trong các bước (như được hiển thị trong ảnh chụp màn hình đính kèm), nó nói rằng phải cập nhật $PATH hai lần, một lần với đường dẫn đến công cụ flutter export PAT
Tôi có một ứng dụng di động được viết bằng flutter và tôi muốn chuyển đổi nó thành ứng dụng flutter_web (tích hợp flutter_web hiện chưa khả dụng). Hiện tại tôi đang gặp vấn đề với một gói hàng. Tôi đã làm theo các hướng dẫn được liệt kê trên trang web này.
Làm thế nào để thêm hiệu ứng chuyển tiếp tùy chỉnh vào tuyến đường Flutter của tôi? Đây là cấu trúc tuyến đường hiện tại của tôi. lớp MyApp mở rộng StatelessWidget { // Tiện ích này là
Tôi đang cố gắng hiển thị một trang web trong chế độ xem web thông qua URL. Tôi đã thử plugin flutter_webview_plugin nhưng nó không hoạt động khi tôi chạy dự án trên trình duyệt. Trong ứng dụng web flutter
Tôi đang sử dụng animatedContainer để hiển thị listView.builder() khi nhấn một nút. Đây là danh sách đơn giản các phần tử con (monad) để hiển thị, nhưng vấn đề là tôi không biết chiều cao của trình xây dựng ListView sẽ được truyền là bao nhiêu
Hiện tại tôi đang làm việc trên một hình ảnh động nền chuyển màu trong ứng dụng của mình... Tôi đang sử dụng sự trợ giúp của Lottie Animations để thực hiện điều đó! Tôi đã thử đóng gói nó trong một vùng chứa và đã thành công. Nhưng có một vấn đề, mặc dù tôi thay đổi chiều cao thành một giá trị lớn hơn 2000,
Chào bạn! Tôi không biết cách thiết lập Flutter với trình quản lý thẻ Google. Tôi tìm thấy gói này bao gồm api quản lý thẻ. Nhưng tôi không biết cách cấu hình nó đúng cách. (Trên Internet tôi chỉ cần sao chép và dán một
Mô hình giỏ hàng của tôi như sau class Cart { String description; double unitCost; double amount; int quantity; S
Trong ứng dụng Flutter của mình, tôi muốn triển khai tính năng lưu trữ đệm cho các tài nguyên (hình ảnh, video, v.v.) được lưu trữ trực tuyến. Tôi muốn nó hoạt động trên nền tảng gốc (Android/iOS) (ví dụ: sử dụng hệ thống tệp) và trên web (ví dụ: sử dụng IndexedDB). F
Tôi đã viết một trang và mọi thứ ở đầu trang đều ổn, như mong đợi. Ở phía dưới tôi có lịch sử các sự kiện. Chiều rộng của vùng chứa của tôi được xác định tự động (tùy thuộc vào chiều rộng của màn hình) và chiều cao - không, trên các thiết bị khác nhau sẽ có chiều cao khác nhau (khoảng thụt lề ở phía dưới cũng khác nhau). Nó có thể được xác nhận tự động không?
Tôi đang làm việc trên một trang có một số trường như trường văn bản và thanh trượt. Cuối trang phải có nút để chuyển sang bước tiếp theo, nút này được bao trong Align để có vị trí cố định giữa các trang. Mặt khác,
Tôi là một lập trình viên xuất sắc, rất giỏi!