blob: 0352dc7e78389db91ef8dc0814108b0713804028 [file] [log] [blame]
Sarah Zakarias969397b2018-10-15 09:30:34 +02001import 'dart:io';
2
3import 'dart_tutorial/addressbook.pb.dart';
4
Roman Kamykdc974d22019-09-04 10:14:20 -07005/// This function fills in a Person message based on user input.
Jonathan Whiteb017ac42018-11-20 18:45:25 -08006Person promptForAddress() {
Roman Kamykdc974d22019-09-04 10:14:20 -07007 final person = Person();
Sarah Zakarias969397b2018-10-15 09:30:34 +02008
9 print('Enter person ID: ');
Roman Kamykdc974d22019-09-04 10:14:20 -070010 final input = stdin.readLineSync();
Sarah Zakarias969397b2018-10-15 09:30:34 +020011 person.id = int.parse(input);
12
13 print('Enter name');
14 person.name = stdin.readLineSync();
15
16 print('Enter email address (blank for none) : ');
Roman Kamykdc974d22019-09-04 10:14:20 -070017 final email = stdin.readLineSync();
18 if (email.isNotEmpty) person.email = email;
Sarah Zakarias969397b2018-10-15 09:30:34 +020019
Sarah Zakariasbc004842018-10-23 09:52:44 +020020 while (true) {
Sarah Zakarias969397b2018-10-15 09:30:34 +020021 print('Enter a phone number (or leave blank to finish): ');
Roman Kamykdc974d22019-09-04 10:14:20 -070022 final number = stdin.readLineSync();
Sarah Zakarias969397b2018-10-15 09:30:34 +020023 if (number.isEmpty) break;
24
Roman Kamykdc974d22019-09-04 10:14:20 -070025 final phoneNumber = Person_PhoneNumber()..number = number;
Sarah Zakarias969397b2018-10-15 09:30:34 +020026
Sarah Zakarias969397b2018-10-15 09:30:34 +020027 print('Is this a mobile, home, or work phone? ');
28
Roman Kamykdc974d22019-09-04 10:14:20 -070029 final type = stdin.readLineSync();
Sarah Zakariasbc004842018-10-23 09:52:44 +020030 switch (type) {
Sarah Zakarias969397b2018-10-15 09:30:34 +020031 case 'mobile':
32 phoneNumber.type = Person_PhoneType.MOBILE;
33 break;
34 case 'home':
35 phoneNumber.type = Person_PhoneType.HOME;
36 break;
37 case 'work':
38 phoneNumber.type = Person_PhoneType.WORK;
39 break;
40 default:
41 print('Unknown phone type. Using default.');
42 }
43 person.phones.add(phoneNumber);
44 }
45
46 return person;
47}
48
Roman Kamykdc974d22019-09-04 10:14:20 -070049/// Reads the entire address book from a file, adds one person based
50/// on user input, then writes it back out to the same file.
51void main(List<String> arguments) {
Sarah Zakarias969397b2018-10-15 09:30:34 +020052 if (arguments.length != 1) {
53 print('Usage: add_person ADDRESS_BOOK_FILE');
54 exit(-1);
55 }
56
Roman Kamykdc974d22019-09-04 10:14:20 -070057 final file = File(arguments.first);
Sarah Zakarias969397b2018-10-15 09:30:34 +020058 AddressBook addressBook;
59 if (!file.existsSync()) {
60 print('File not found. Creating new file.');
Sarah Zakariasbc004842018-10-23 09:52:44 +020061 addressBook = AddressBook();
Sarah Zakarias969397b2018-10-15 09:30:34 +020062 } else {
63 addressBook = AddressBook.fromBuffer(file.readAsBytesSync());
64 }
Jonathan Whiteb017ac42018-11-20 18:45:25 -080065 addressBook.people.add(promptForAddress());
Sarah Zakarias969397b2018-10-15 09:30:34 +020066 file.writeAsBytes(addressBook.writeToBuffer());
Sarah Zakariasbc004842018-10-23 09:52:44 +020067}