Published 2024-02-01
This package contains all the useful and necessary utility's for creating client specific code with an allocations list, artwork and specifications
with library code
in lib/, and example unit test in test/.

wat betreft instellingen/code templates/copyright template/snippets:
svn up
in android studio > File > Manage IDE Settings > Import Settings >>>>>> work_dart/settings.zip bij "new dart file" heb je dan een standaard copyright blokkie, bij bestaande files kun je intikken 'hhcopyright', dan krijg je de snippet in je tekst
je staat al als package 'maintainer' / 'creator' in de pubspec.yaml, dus overal in de header reinbeumer zetten is niet nodig,
/data_models, kan gewoon models worden, 1 model per file
alleen bij stateful widgets zijn er 2 classes in een file, de widget, de state.
extensions in de extensions map, niet in io, podo, evt. extensions/io en extensions/podo
podo is geen gebruikelijke aanduiding, meer 'model' of 'vo' (value object). ik maak vaak onderscheid: 'models' zijn actief (zijn ChangeNotifiers, icm. Provider), en 'vo's zijn 'dood', bevatten alleen data.
let wel op met extension classes: je kunt ze niet over-erven, dus als je bijv 'GetSpreadsheetData' zou willen aanpassen, dan kan dat niet echt
test resources naar de test folder, resources is geen gebruikelijke aanduiding, 'assets' meer gangbaar.
test output naar een outputfolder (/test/assets/output), evt. deze output folder svn-excluden, of in je test init de folder maken, en in de shutdown de folder verwijderen (doe ik zelf ook niet, moet nog eens gebeuren)
extensies voegen iets toe aan een class, maar zijn niet te overloaden, maakt de structuur veel te statisch en niet aanpasbaar.
mixins voegen iets toe aan een class, maar weten niets van die class, en de functies moeten dus opzichzelf staan.
mixins en extensies zijn 'special cases', gebruik in de basis classes.
gerefactored, nu is ie wat mij betreft beter, benieuwd wat je er van vind.
je kunt nu alle classes los gebruiken en eigenlijk is BaseRunnerUtils niet echt meer nodig.
je kunt nu ook een custom BaseRunnerUtils maken met bijv een andere SpreadsheetReader implementatie.
path package wordt wel gebruikt hier en daar in de andere code, maar is niet ideaal omdat ie alles met strings doet, imho File en Directory zijn beter (uit dart:io).
gebruik Platform.pathSeparator voor / of \ in paden.
functie namen hoeven niet zo lang te zijn SpreadsheetReader.read is genoeg bijv.
alle enums/classes/mixins/extensions : 1 per file.
CamelCaseClass = camel_case_class.dart
probeer lange functies op te breken in losse functies (_private)
probeer functie namen te doen volgens 'do, get, set, has, can, is'.
CrossFileChecker is wel handig, verdient een eigen plekje in pkg_core.
FileReader, not sure. Wat is er mis met:
final List<file> files = Directory("what")
.listSync(recursive: true, followLinks: false)
.whereType<File>()
.where((e)=>e.path.contains('/.')==false)
.where((e)=>e.getExtension().compareCaseInsensitive('pdf'))
.toList();
class MyPojo {
final String vestiging;
final String adres;
final String postcode;
const MyPojo({
required this.vestiging,
required this.adres,
required this.postcode,
});
factory MyPojo.fromRow(final List<String> row) {
return MyPojo(
vestiging: row[somekey],
adres: row[someotherkey],
postcode: row[dontknowwhat],
);
}
}
Spreadsheet s = Spreadsheet(File('test.xlsx'));
await s.read();
List<MyPojo> models = s.data[s.getSheets().first]
.skip(headerCount)
.map(MyModel.fromRow)
.toList();
List<Something> result = doProcess(models);
doWriteSomething(result);
PrintCalculator, throw gewoon de ItemToBigForSheetException, niet in de functie afhandelen.
ResultHandler, ok.
SpreadsheetReader, zal zich wel bewezen hebben, beter is om functionaliteit die hier in zit en nog niet in pkg_spreadsheet over te hevelen.
RetValData, ReturnData, geen fan van.
BaseRunnerUtils is eigenlijk overtollig (wrapper), kan gewoon worden:
void main () {
final ResultHandler resultHandler = ResultHandler(
runContext: RunContext.debug,
notifyOnError: true,
quitOnError: true,
);
final FileReader fileReader = FileReader(resultHandler);
final CrossFileChecker crossFileChecker = CrossFileChecker(resultHandler);;
final PrintCalculator printCalculator = PrintCalculator(resultHandler);
final OrderModelsGenerator orderModelsGenerator = OrderModelsGenerator(resultHandler);
final SpreadsheetReader spreadsheetReader = SpreadsheetReader(resultHandler);
... doe je ding ...
}
print statements for logging..DS_Store folder added to test assets.file_reader_test hidden folders now handled.