#json #flutter #dart #static-variables
#json #flutter #dart #статические переменные
Вопрос:
Вот полный фрагмент кода, который должен продемонстрировать проблему, с которой я столкнулся.
import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setPreferredOrientations([
DeviceOrientation.landscapeLeft,
DeviceOrientation.landscapeRight,
]);
SystemChrome.setEnabledSystemUIOverlays([]);
runApp(
MaterialApp(
home: MyHomePage(),
),
);
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key,}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
Future<latestVersion> fetchAlbum() async {
final response = await http.get('https://api.jsonbin.io/b/5fd25941bef8b7699e57dce9');
if (response.statusCode == 200) {
print('yay');
return latestVersion.fromJson(jsonDecode(response.body));
} else {
print('nay');
throw Exception('Failed to load version');
}
}
class latestVersion {
final String title;
final String version;
latestVersion({this.version, this.title});
factory latestVersion.fromJson(Map<String, dynamic> json) {
return latestVersion(version: json['version'], title: json['title'],
);
}
}
class _MyHomePageState extends State<MyHomePage> {
static Future<latestVersion> futureAlbum;
@override
void initState() {
super.initState();
futureAlbum = fetchAlbum();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.yellow,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(''),
Text('CURRENT'),
Text('---------'),
Text('0.37'),
Text(''),
Text('LATEST'),
Text('--------'),
Text(latestVersion.version),
Text(''),
Text(''),
],
),
),
);
}
}
При попытке запустить этот код я получаю сообщение об ошибке в строке 76.
"instance member 'version' cannot be accessed using static access"
Как именно я могу получить доступ к этой json-декодированной переменной? Заранее благодарю вас. Я новичок в работе с асинхронными функциями и будущим и был бы признателен за любую помощь, которая может быть оказана.
Ответ №1:
Ошибка означает version
, что это не статическая переменная. Поэтому, чтобы получить к нему такой доступ, LatestVersion.version либо создает version
статическую переменную, либо
Заменить
Text(LatestVersion.version),
с
Text(LatestVersion().version),
Если в вашем коде все остальное правильно, то вышеприведенное должно сработать.
Комментарии:
1. Спасибо. Это абсолютно правильно. Теперь я сталкиваюсь с проблемой, что мое значение равно нулю. но это другая проблема, с которой мне нужно будет справиться самостоятельно. Большое вам спасибо за вашу помощь.