self sqflite sample =======================
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | import 'package:path_provider/path_provider.dart' ; import 'dart:async' ; import 'package:flutter/material.dart' ; import 'package:sqflite/sqflite.dart' ; import 'package:path/path.dart' ; import 'package:rxdart/rxdart.dart' ; main() = >runApp(MaterialApp(home: MyApp(),)); class MyApp extends StatefulWidget { @override State<StatefulWidget> createState() { return MyAppState(); } } class MyAppState extends State<MyApp> { TextEditingController _textController = TextEditingController(); Future createDB() async{ var path = (await getApplicationDocumentsDirectory()).path; var dbPath = join(path, 'whois.db' ); Database _database = await openDatabase(dbPath, version: 1 , onCreate: (db, ver){ db.execute( 'CREATE TABLE whois (id INTEGER PRIMARY KEY, name TEXT)' ); }); return _database; } / / mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm Future addData (String table, Map <String, dynamic> sqlMap) async { Database db = await createDB(); var a = await db.insert(table, sqlMap); print ( '$a, done' ); db.close(); } Future getData (String sqlString) async { Database db = await createDB(); var b = await db.rawQuery(sqlString); print (b); db.close(); } / / mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm checkString () async { await getData( 'SELECT * FROM whois' ); } addString () async { await addData( 'whois' , { 'name' : 'just testing' }); } / / mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text( 'as' ),), body: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Text( 'ss' ), TextField(controller: _textController,), RaisedButton(child: Text( 'add' ), onPressed: addString,), RaisedButton(child: Text( 'get' ), onPressed: checkString,), ], ), ); } } |
flutter + bloc + sqflite demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | import 'package:path_provider/path_provider.dart' ; import 'dart:async' ; import 'package:flutter/material.dart' ; import 'package:sqflite/sqflite.dart' ; import 'package:path/path.dart' ; import 'package:rxdart/rxdart.dart' ; main() = >runApp(MaterialApp(home: MyApp(bloc: DataBloc(), db: DB(),),)); class MyApp extends StatelessWidget { MyApp({this.bloc, this.db}); final DataBloc bloc; final DB db; TextEditingController _textController = TextEditingController(); add()async{ await db.addData( 'grant' , { 'name' : '${_textController.text}' }); } query() async{ List result = await db.queryData( 'SELECT * FROM grant' ); _textController.text = result[result.length - 1 ][ 'name' ]; } delete()async{ await db.deleteData( 'DELETE FROM grant WHERE id<4' ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text( 'test' ),), body: StreamBuilder( stream: bloc.dataBloc.stream, builder: (context, snapshot){ if (snapshot.hasData){ return Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ Text( 'head' ), TextField(controller: _textController,), RaisedButton(child: Text( 'add' ),onPressed: add,), RaisedButton(child: Text( 'query' ),onPressed: query,), RaisedButton(child: Text( 'delete' ),onPressed: delete,), ], ); } else { return Center(child: RaisedButton( child:Text( 'start' ), onPressed: (){ bloc.dataBloc.add( 'start' ); }, ), ); } } ), ); } } class DataBloc { PublishSubject dataBloc = PublishSubject(); DataBloc(){ dataBloc.listen(onData); } void onData(value) {} } class DB { Future getDB() async{ var path = (await getApplicationDocumentsDirectory()).path; var dbPath = join(path, 'abc' , 'whois.db' ); Database _database = await openDatabase(dbPath, version: 1 , onCreate: (db, ver){ db.execute( 'CREATE TABLE grant (id INTEGER PRIMARY KEY, name TEXT)' ); }); return _database; } Future addData (String table, Map <String, dynamic> sqlMap) async { Database db = await getDB(); var ret = await db.insert(table, sqlMap); print ( '$ret done' ); db.close(); return ret; } Future queryData (String sql) async{ Database db = await getDB(); var ret = await db.rawQuery(sql); db.close(); print ( '$ret done' ); return ret; } Future deleteData (String sql) async { Database db = await getDB(); var ret = await db.rawDelete(sql); db.close(); print ( '$ret done' ); return ret; } Future updateData (String sql) async{ Database db = await getDB(); var ret = await db.rawUpdate(sql); db.close(); print ( '$ret done' ); return ret; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下