Итак, если вы просто хотите создать ListView из собранных строк даты, вы можете сделать это следующим образом:
@immutable
class DrawerView extends StatelessWidget {
const DrawerView({
@required this.items,
}) : assert(items != null);
final List<String> items;
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
// Important: Remove any padding from the ListView.
padding: EdgeInsets.zero,
children: items.map<Widget>((String item) => ListTile(title: Text(item))),
),
);
}
}
Я предпочитаю создать новый класс для таких вещей, как это.
РЕДАКТИРОВАТЬ
ОК, вы можете попробовать это (я не запускал, потому что у меня нет такого API для тестирования, но он должен работать очень хорошо ):
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:http/http.dart' as http;
void main() => runApp(MyApp());
/// [MyApp] class - where it all begins! :D
class MyApp extends StatefulWidget {
MyApp({Key key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
int _counter = 0;
List<String> _dateList = <String>[];
@override
void initState() {
super.initState();
addDateList();
}
Future addDateList({ DateTime date }) async {
final DateTime d = date ?? DateTime.now();
String dateString = DateFormat('dd/MM/yyyy').format(d);
http.Response response = await http.get('https://www.example.com/json/$dateString-17.json');
if (response.statusCode == 200) {
setState(() {
_dateList.add(dateString);
_counter++;
});
}
// if you reach the desired length or the counter gets too high break the execution
if (_dateList.length >= 7 || _counter > 50) return true;
setState(() {
_counter++;
});
return addDateList(date: d.subtract(Duration(days: 1)));
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Drawer Demo',
home: Scaffold(
appBar: AppBar(
title: const Text('HOME'),
),
endDrawer: MyDrawer(items: _dateList),
body: Center(
child: const Text('DRAWER WITH LISTVIEW - DEMO'),
),
),
);
}
}
class MyDrawer extends StatelessWidget {
const MyDrawer({
@required this.items,
}) : assert(items != null);
final List<String> items;
@override
Widget build(BuildContext context) {
return Drawer(
child: ListView(
// Important: Remove any padding from the ListView.
padding: EdgeInsets.zero,
children: items.map<Widget>((String item) => ListTile(title: Text(item))).toList(),
),
);
}
}