代码之家  ›  专栏  ›  技术社区  ›  MaybeExpertDBA

数据库未更新(SQLITE和Dart)

  •  0
  • MaybeExpertDBA  · 技术社区  · 4 年前

    我正在《城市旅游指南》上开发一个安卓移动应用程序。我希望用户对此应用程序上的某个地方发表评论。我可以在数据库的“注释”表中看到我写的注释。但是,当我想添加新注释时,它不会保存在数据库中,因此如果应用程序关闭,我将无法再次访问该注释。

    我在等你的帮助。提前感谢。

    数据库_助手.dart

    Future<List<Comments>> getComments() async {
        var dbClient = await db;
        var result =
            await dbClient.rawQuery("SELECT * FROM Comments ORDER BY userName ASC");
        return result.map((data) => Comments.fromMap(data)).toList();
      }
    
      Future<void> insertComment(Comments comments) async {
        var dbClient = await db;
        return await dbClient.insert("Comments", comments.toMap());
      }
    
      Future<int> updateComment(Comments comments) async {
        var dbClient = await db;
        return await dbClient.update("Comments", comments.toMap(),
            where: "id=?", whereArgs: [comments.id]);
      }
    
      Future<int> removeComment(int id) async {
        var dbClient = await db;
        return await dbClient.delete("Comments", where: "id=?", whereArgs: [id]);
      }
    
      Future closeDb() async {
        var dbClient = await db;
        dbClient.close();
      }
    }
    

    Comments.dart

    class Comments {
      int id;
      String userName;
      String userComment;
      String avatar;
    
      //Constructor
      Comments({this.userName, this.userComment, this.avatar});
    
      Map<String, dynamic> toMap() {
        var map = Map<String, dynamic>();
        map["userName"] = userName;
        map["userComment"] = userComment;
        map["avatar"] = avatar;
        return map;
      }
    
      Comments.fromMap(Map<String, dynamic> map) {
        id = map["id"];
        userName = map["userName"];
        userComment = map["userComment"];
        avatar = map["avatar"];
      }
    }
    

    addcomment.dart

    import 'package:flutter/material.dart';
    import 'package:cascade_travel_guide/data/database_helper.dart';
    import 'package:cascade_travel_guide/model/Comments.dart';
    
    class AddCommentPage extends StatelessWidget {
      final Comments comments;
    
      const AddCommentPage({Key key, @required this.comments}) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title:
                Text(comments.id == null ? "Add New Comment" : comments.userName),
          ),
          body: SingleChildScrollView(
              child: CommentsForm(comments: comments, child: AddCommentsForm())),
        );
      }
    }
    
    class CommentsForm extends InheritedWidget {
      final Comments comments;
    
      CommentsForm({Key key, @required Widget child, @required this.comments})
          : super(key: key, child: child);
    
      static CommentsForm of(BuildContext context) {
        return context.dependOnInheritedWidgetOfExactType<CommentsForm>();
      }
    
      @override
      bool updateShouldNotify(CommentsForm oldWidget) {
        return comments.id != oldWidget.comments.id;
      }
    }
    
    class AddCommentsForm extends StatefulWidget {
      @override
      _AddCommentsFormState createState() => _AddCommentsFormState();
    }
    
    class _AddCommentsFormState extends State<AddCommentsForm> {
      final _formKey = GlobalKey<FormState>();
      DbHelper _dbHelper;
    
      @override
      void initState() {
        _dbHelper = DbHelper();
        super.initState();
      }
    
      @override
      Widget build(BuildContext context) {
        Comments comments = CommentsForm.of(context).comments;
    
        return Column(
          children: <Widget>[
            Stack(
              children: [
                Image.asset(
                  comments.avatar == null
                      ? "assets/images/person.jpg"
                      : comments.avatar,
                  fit: BoxFit.cover,
                  width: double.infinity,
                  height: 250,
                ),
                Positioned(
                    bottom: 8,
                    right: 8,
                    child: IconButton(
                      onPressed: getFile,
                      icon: Icon(Icons.camera_alt),
                      color: Colors.white,
                    ))
              ],
            ),
            Padding(
              padding: EdgeInsets.all(8),
              child: Form(
                key: _formKey,
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: <Widget>[
                    Padding(
                      padding: EdgeInsets.symmetric(vertical: 8),
                      child: TextFormField(
                        decoration: InputDecoration(hintText: "Username:"),
                        initialValue: comments.userName,
                        validator: (value) {
                          if (value.isEmpty) {
                            return "Username required";
                          }
                        },
                        onSaved: (value) {
                          comments.userName = value;
                        },
                      ),
                    ),
                    Padding(
                      padding: EdgeInsets.symmetric(vertical: 8),
                      child: TextFormField(
                        keyboardType: TextInputType.text,
                        decoration: InputDecoration(hintText: "Comment"),
                        initialValue: comments.userComment,
                        validator: (value) {
                          if (value.isEmpty) {
                            return "Comment required";
                          }
                        },
                        onSaved: (value) {
                          comments.userComment = value;
                        },
                      ),
                    ),
                    RaisedButton(
                        color: Colors.blue,
                        textColor: Colors.white,
                        child: Text("Submit"),
                        onPressed: () async {
                          if (_formKey.currentState.validate()) {
                            _formKey.currentState.save();
                            if (comments.id == null) {
                              await _dbHelper.insertComment(comments);
                            } else {
                              await _dbHelper.updateComment(comments);
                            }
    
                            var snackBar = Scaffold.of(context).showSnackBar(
                              SnackBar(
                                  content: Text(
                                      "${comments.userComment} has been saved")),
                            );
    
                            snackBar.closed.then((onValue) {
                              Navigator.pop(context);
                            });
                          }
                        }),
                  ],
                ),
              ),
            ),
          ],
        );
      }
    
      void getFile() async {
        Comments comments = CommentsForm.of(context).comments;
      }
    }
    
    0 回复  |  直到 4 年前