#class #flutter #oop #dart
#класс #flutter #ооп #dart
Вопрос:
Элемент экземпляра ‘PageNumber’ не может быть доступен в инициализаторе. Попробуйте заменить ссылку на элемент экземпляра другим выражением
Как я могу это решить?
Вот как это происходит
Первый класс
class _HomeState extends State<Home> {
int pageNumber = 1;
Future<String> fetchPosts = FetchPosts(pageNumber).getPosts(); //<== The error happens here(PageNumber)
List<wp.Post> posts = FetchPosts(pageNumber).posts; //<== The error happens here (PageNumber)
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: posts == null ? 0 : posts.length,
itemBuilder: (BuildContext context, int index) {
return buildPost(context, posts, index); //Building the posts list view
},
);
}
}
Второй класс
import 'package:flutter_wordpress/flutter_wordpress.dart' as wp;
import 'package:saviortv/models/fetchWordPressPosts.dart';
class FetchPosts {
FetchPosts(this.pageNumber);
final int pageNumber;
List<wp.Post> posts = [];
Future<String> getPosts() async {
var res = await fetchPosts(pageNumber);
print(pageNumber);
posts = res;
return "Success!";
}
}
Как я могу это решить?
Ответ №1:
В этом сценарии вам нужно использовать FutureBuilder, как getPosts()
и метод asyc.
Переработанный код:
class FetchPosts {
FetchPosts(this.pageNumber);
final int pageNumber;
Future<wp.Post> getPosts() async {
List<wp.Post> posts = [];
posts = await fetchPosts(pageNumber);
print(pageNumber);
return posts;
}
}
FutureBuilder(
future: FetchPosts(pageNumber).getPosts(),
builder: (context, snapshot) {
if(snapshot.hasData){
List<wp.Post> posts=snapshot.data;
return ListView.builder(
itemCount: posts == null ? 0 : posts.length,
itemBuilder: (BuildContext context, int index) {
return buildPost(context, posts, index); //Building the posts list view
},
);
}
return Text('Error..');
}
)
Ответ №2:
Вам нужно изменить это.
class _HomeState extends State<Home> {
int pageNumber = 1;
Future<String> fetchPosts;
List<wp.Post> posts;
@override
void initState() {
fetchPosts = FetchPosts(pageNumber).getPosts();
posts = FetchPosts(pageNumber).posts;
super.initState();
}
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: posts == null ? 0 : posts.length,
itemBuilder: (BuildContext context, int index) {
return buildPost(context, posts, index); //Building the posts list view
},
);
}
}
Комментарии:
1. Я хочу, чтобы он был в другом файле man… Можете ли вы дать мне лучшее решение?
2. Я не понимаю, что вы имеете в виду, когда хотите, чтобы он был в другом файле. Можете ли вы это объяснить?
3. Я разделил классы на два файла (вы можете видеть в моем вопросе) Я разделил их, чтобы я мог использовать другой класс и в других файлах