#flutter #dart
#flutter #dart
Вопрос:
Я не специалист по flutter, я все еще изучаю его, но я не могу понять, где я ошибаюсь. Я благодарю всех, кто хочет мне помочь, я не специалист по flutter, я все еще изучаю его, но я не могу понять, где я ошибаюсь. Я благодарю всех, кто хочет мне помочь, я не специалист по flutter, я все еще изучаю его, но я не могу понять, где я ошибаюсь. Я благодарю всех, кто хочет мне помочь
import 'package:flutter/material.dart';
import 'package:todo_app/database_helper.dart';
import 'package:todo_app/screens/taskpage.dart';
import 'package:todo_app/widgets.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
DatabaseHelper _dbHelper = DatabaseHelper();
@override
Widget build(
BuildContext context,
) {
return Scaffold(
floatingActionButton: FloatingActionButton(
backgroundColor: Colors.deepPurple,
child: Icon(Icons.add),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => TaskPage(),
),
);
},
),
body: SafeArea(
child: Container(
width: double.infinity,
padding: EdgeInsets.symmetric(horizontal: 24),
margin: EdgeInsets.only(bottom: 20),
color: Colors.grey[100],
child: Stack(children: [
Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Container(
margin: EdgeInsets.only(bottom: 32),
child: Text(
'Logo',
style: TextStyle(fontSize: 22),
),
),
Expanded(
child: FutureBuilder(
future: _dbHelper.getTasks(),
builder: (context, AsyncSnapshot snapshot) {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (context, index) {
return TaskCardWidget(
title: snapshot.data[index].title,
desc: snapshot.data[index].description,
);
});
},
),
),
])
]),
),
),
);
}
}
// This is the database class instead
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';
import 'package:todo_app/models/task.dart';
class DatabaseHelper {
Future<Database> database() async {
return openDatabase(
join(await getDatabasesPath(), 'todo_database.db'),
onCreate: (db, version) {
return db.execute(
"CREATE TABLE task(id INTEGER PRIMARY KEY, title TEXT, description TEXT)",
);
},
version: 1,
);
}
Future<void> insertTask(Task task) async {
Database _db = await database();
await _db.insert('task', task.toMap(),
conflictAlgorithm: ConflictAlgorithm.replace);
}
Future<List<Task>> getTasks() async {
final Database _db = await database();
final List<Map<String, dynamic>> taskMap = await _db.query('tasks');
return List.generate(
taskMap.length,
(index) => Task(
id: taskMap[index]['id'],
title: taskMap[index]['title'],
description: taskMap[index]['description'],
));
}
}
Ответ №1:
Изначально, когда ваш Future
не завершен, у вас нет данных из AsyncSnapshot
. Попробуйте добавить следующие проверки в свой FutureBuilder
.
FutureBuilder(
future: _dbHelper.getTasks(),
builder: (context, AsyncSnapshot snapshot) {
if (snapshot.hasError) {
return Text('${snapshot.error}');
} else if (snapshot.hasData) {
return ListView.builder(...);
}
return Center(child: CircularProgressIndicator()); // Default loading
},
)