wemersonrv

SQFLite plugin com erro

Jul 25th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.15 KB | None | 0 0
  1. void main() => runApp(MyApp());
  2.  
  3. class MyApp extends StatelessWidget {
  4. @override
  5. Widget build(BuildContext context) {
  6. return BlocProvider<SettingsBloc>(
  7. bloc: SettingsBloc(),
  8. child: MaterialApp(
  9. theme: ThemeData(
  10. primarySwatch: Colors.red,
  11. ),
  12. title: APP_TITLE,
  13. debugShowCheckedModeBanner: false,
  14. home: SyncWrapper(),
  15. ),
  16. );
  17. }
  18. }
  19.  
  20. class SyncWrapper extends StatefulWidget {
  21. @override
  22. _SyncWrapperState createState() => _SyncWrapperState();
  23. }
  24.  
  25. class _SyncWrapperState extends State<SyncWrapper> {
  26. AbastecimentoHelper _abHelper;
  27.  
  28. @override
  29. void initState() {
  30. super.initState();
  31.  
  32. _abHelper = AbastecimentoHelper();
  33.  
  34. _abHelper.syncPendentes();
  35. }
  36.  
  37. @override
  38. Widget build(BuildContext context) {
  39. final bloc = BlocProvider.of<SettingsBloc>(context);
  40. return StreamBuilder<SettingsState>(
  41. stream: bloc.outState,
  42. builder: (context, snapshot) {
  43. if (snapshot.data != SettingsState.DONE) {
  44. return Center(
  45. child: CircularProgressIndicator(),
  46. );
  47. }
  48.  
  49. return HomeScreen();
  50. },
  51. );
  52. }
  53.  
  54. @override
  55. void dispose() {
  56. _abHelper.close();
  57. super.dispose();
  58. }
  59. }
  60.  
  61. class AbastecimentoHelper {
  62. static final AbastecimentoHelper _instance = AbastecimentoHelper.internal();
  63.  
  64. factory AbastecimentoHelper() => _instance;
  65.  
  66. AbastecimentoHelper.internal();
  67.  
  68. Database _db;
  69.  
  70. Future<Database> get db async {
  71. if (_db != null) return _db;
  72.  
  73. _db = await initDb();
  74.  
  75. return _db;
  76. }
  77.  
  78. Future<Database> initDb() async {
  79. final databasesPath = await getDatabasesPath();
  80. final path = join(databasesPath, 'maissync.db');
  81.  
  82. return openDatabase(path, version: 1,
  83. onCreate: (Database db, int newerVersion) async {
  84. String schema = "CREATE TABLE $abastecimentoTable("
  85. "$stringColumn TEXT NOT NULL,"
  86. "$dataLeituraColumn TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,"
  87. "$dataSincronizadoColumn TIMESTAMP DEFAULT NULL"
  88. ")";
  89.  
  90. await db.execute(schema);
  91. });
  92. }
  93.  
  94. Future close() async {
  95. Database dbAbastecimento = await db;
  96. dbAbastecimento.close();
  97. }
  98.  
  99. Future<void> syncPendentes() async {
  100. List pendentes = await getPendentes();
  101. if (pendentes.length > 0) {
  102. try {
  103. String body = json.encode({"abastecimentos": pendentes});
  104. var response = await http.post(API_ENDPOINT_ABASTECIMENTOS, body: body);
  105.  
  106. if (response.statusCode == 200) {
  107. List<int> ids = [];
  108. String whereStr = "";
  109. for (var p in pendentes) {
  110. ids.add(p["rowid"]);
  111. whereStr += "?, ";
  112. }
  113. whereStr = "(${whereStr.substring(0, whereStr.length - 2)})";
  114.  
  115. Database dbAbastecimento = await db;
  116. await dbAbastecimento.update(
  117. abastecimentoTable,
  118. {"$dataSincronizadoColumn": nowStr()},
  119. where: "$rowIdColumn IN $whereStr",
  120. whereArgs: ids,
  121. );
  122.  
  123. } else {
  124. debugLog(
  125. file: "helpers/abastecimento-helper.dart",
  126. method: "syncPendentes",
  127. location: "Falha na requisição",
  128. message: "Falha na requisição... Status: ${response.statusCode}.",
  129. );
  130. }
  131. } catch (e) {
  132. debugLog(
  133. file: "helpers/abastecimento-helper.dart",
  134. method: "syncPendentes",
  135. location: "Erro endpoint/desconhecido",
  136. message: "Falha desconhecida na requisição HTTP...\n"
  137. "\t\t- Provavelmente o Endpoint não está respondendo!",
  138. );
  139. }
  140. }
  141.  
  142. // Interval
  143. Future.delayed(SQLITE_CHECK_INTERVAL).then((_) {
  144. syncPendentes();
  145. });
  146. }
  147.  
  148. Future<List> getPendentes() async {
  149. Database dbAbastecimento = await db;
  150.  
  151. List listMap = await dbAbastecimento.query(
  152. abastecimentoTable,
  153. columns: [rowIdColumn, stringColumn],
  154. where: "$dataSincronizadoColumn IS NULL",
  155. orderBy: "$rowIdColumn",
  156. limit: SYNC_ROWS,
  157. );
  158.  
  159. return listMap;
  160. }
  161.  
  162. }
Advertisement
Add Comment
Please, Sign In to add comment