Mztj67_#M}W?l>kYSliK<%xAp;0j{!}J0!o7b
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
diff --git a/rolodex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/rolodex/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
deleted file mode 100644
index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 1418
zcmV;51$Fv~P)q
zKfU)WzW*n(@|xWGCA9ScMt*e9`2kdxPQ&&>|-UCa7_51w+
zLUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq
z^={4hPQv)y=I|4n+?>7Fim=dxt1
z2H+Dm+1+fh+IF>G0SjJMkQQre1x4|G*Z==(Ot&kCnUrL4I(rf(ucITwmuHf^hXiJT
zkdTm&kdTm&kdTm&kdP`esgWG0BcWCVkVZ&2dUwN`cgM8QJb`Z7Z~e<&Yj2(}>Tmf`
zm1{eLgw!b{bXkjWbF%dTkTZEJWyWOb##Lfw4EK2}<0d6%>AGS{po>WCOy&f$Tay_>
z?NBlkpo@s-O;0V%Y_Xa-G#_O08q5LR*~F%&)}{}r&L%Sbs8AS4t7Y0NEx*{soY=0MZExqA5XHQkqi#4gW3
zqODM^iyZl;dvf)-bOXtOru(s)Uc7~BFx{w-FK;2{`VA?(g&@3z&bfLFyctOH!cVsF
z7IL=fo-qBndRUm;kAdXR4e6>k-z|21AaN%ubeVrHl*<|s&Ax@W-t?LR(P-24A5=>a
z*R9#QvjzF8n%@1Nw@?CG@6(%>+-0ASK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE
z>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8Dd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(
zdqY93Zy}v&c4n($Vv!UybR8ocs7#zbfX1IY-*w~)p}XyZ-SFC~4w>BvMVr`dFbelV{lLL0bx7@*ZZdebr3`sP;?
zVImji)kG)(6Juv0lz@q`F!k1FE;CQ(D0iG$wchPbKZQELlsZ#~rt8#90Y_Xh&3U-<
z{s<&cCV_1`^TD^ia9!*mQDq&
zn2{r`j};V|uV%_wsP!zB?m%;FeaRe+X47K0e+KE!8C{gAWF8)lCd1u1%~|M!XNRvw
zvtqy3iz0WSpWdhn6$hP8PaRBmp)q`#PCA`Vd#Tc$@f1tAcM>f_I@bC)hkI9|o(Iqv
zo}Piadq!j76}004RBio<`)70k^`K1NK)q>w?p^C6J2ZC!+UppiK6&y3Kmbv&O!oYF
z34$0Z;QO!JOY#!`qyGH<3Pd}Pt@q*A0V=3SVtWKRR8d8Z&@)3qLPA19LPA19LPEUC
YUoZo%k(ykuW&i*H07*qoM6N<$f+CH{y8r+H
diff --git a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
deleted file mode 100644
index 0bedcf2fd..000000000
--- a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "filename" : "LaunchImage.png",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "filename" : "LaunchImage@2x.png",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "filename" : "LaunchImage@3x.png",
- "scale" : "3x"
- }
- ],
- "info" : {
- "version" : 1,
- "author" : "xcode"
- }
-}
diff --git a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
deleted file mode 100644
index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
diff --git a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
deleted file mode 100644
index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
diff --git a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
deleted file mode 100644
index 9da19eacad3b03bb08bbddbbf4ac48dd78b3d838..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 68
zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx0wlM}@Gt=>Zci7-kcv6Uzs@r-FtIZ-&5|)J
Q1PU{Fy85}Sb4q9e0B4a5jsO4v
diff --git a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
deleted file mode 100644
index 89c2725b7..000000000
--- a/rolodex/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# Launch Screen Assets
-
-You can customize the launch screen with your own desired assets by replacing the image files in this directory.
-
-You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/rolodex/ios/Runner/Base.lproj/LaunchScreen.storyboard b/rolodex/ios/Runner/Base.lproj/LaunchScreen.storyboard
deleted file mode 100644
index f2e259c7c..000000000
--- a/rolodex/ios/Runner/Base.lproj/LaunchScreen.storyboard
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rolodex/ios/Runner/Base.lproj/Main.storyboard b/rolodex/ios/Runner/Base.lproj/Main.storyboard
deleted file mode 100644
index f3c28516f..000000000
--- a/rolodex/ios/Runner/Base.lproj/Main.storyboard
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/rolodex/ios/Runner/Info.plist b/rolodex/ios/Runner/Info.plist
deleted file mode 100644
index c1c9bd170..000000000
--- a/rolodex/ios/Runner/Info.plist
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
-
-
- CFBundleDevelopmentRegion
- $(DEVELOPMENT_LANGUAGE)
- CFBundleDisplayName
- Rolodex
- CFBundleExecutable
- $(EXECUTABLE_NAME)
- CFBundleIdentifier
- $(PRODUCT_BUNDLE_IDENTIFIER)
- CFBundleInfoDictionaryVersion
- 6.0
- CFBundleName
- rolodex
- CFBundlePackageType
- APPL
- CFBundleShortVersionString
- $(FLUTTER_BUILD_NAME)
- CFBundleSignature
- ????
- CFBundleVersion
- $(FLUTTER_BUILD_NUMBER)
- LSRequiresIPhoneOS
-
- UILaunchStoryboardName
- LaunchScreen
- UIMainStoryboardFile
- Main
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- CADisableMinimumFrameDurationOnPhone
-
- UIApplicationSupportsIndirectInputEvents
-
-
-
diff --git a/rolodex/ios/Runner/Runner-Bridging-Header.h b/rolodex/ios/Runner/Runner-Bridging-Header.h
deleted file mode 100644
index 308a2a560..000000000
--- a/rolodex/ios/Runner/Runner-Bridging-Header.h
+++ /dev/null
@@ -1 +0,0 @@
-#import "GeneratedPluginRegistrant.h"
diff --git a/rolodex/ios/RunnerTests/RunnerTests.swift b/rolodex/ios/RunnerTests/RunnerTests.swift
deleted file mode 100644
index 86a7c3b1b..000000000
--- a/rolodex/ios/RunnerTests/RunnerTests.swift
+++ /dev/null
@@ -1,12 +0,0 @@
-import Flutter
-import UIKit
-import XCTest
-
-class RunnerTests: XCTestCase {
-
- func testExample() {
- // If you add code to the Runner application, consider adding tests here.
- // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
- }
-
-}
diff --git a/rolodex/lib/data/contact.dart b/rolodex/lib/data/contact.dart
deleted file mode 100644
index 2348f7fbd..000000000
--- a/rolodex/lib/data/contact.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2018 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-class Contact {
- Contact({
- required this.id,
- required this.firstName,
- this.middleName,
- required this.lastName,
- this.suffix,
- });
-
- final int id;
- final String firstName;
- final String lastName;
- final String? middleName;
- final String? suffix;
-}
-
-final johnAppleseed = Contact(id: 0, firstName: 'John', lastName: 'Appleseed');
-final kateBell = Contact(id: 1, firstName: 'Kate', lastName: 'Bell');
-final annaHaro = Contact(id: 2, firstName: 'Anna', lastName: 'Haro');
-final danielHiggins = Contact(
- id: 3,
- firstName: 'Daniel',
- lastName: 'Higgins',
- suffix: 'Jr.',
-);
-final davidTaylor = Contact(id: 4, firstName: 'David', lastName: 'Taylor');
-final hankZakroff = Contact(
- id: 5,
- firstName: 'Hank',
- middleName: 'M.',
- lastName: 'Zakroff',
-);
-
-final Set allContacts = {
- johnAppleseed,
- kateBell,
- annaHaro,
- danielHiggins,
- davidTaylor,
- hankZakroff,
-};
diff --git a/rolodex/lib/data/contact_group.dart b/rolodex/lib/data/contact_group.dart
deleted file mode 100644
index 0671238c1..000000000
--- a/rolodex/lib/data/contact_group.dart
+++ /dev/null
@@ -1,118 +0,0 @@
-// Copyright 2018 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:collection';
-
-import 'package:flutter/cupertino.dart';
-
-import 'contact.dart';
-
-void _sortContacts(List contacts) {
- contacts.sort((Contact a, Contact b) {
- final int checkLastName = a.lastName.compareTo(b.lastName);
- if (checkLastName != 0) {
- return checkLastName;
- }
- final int checkFirstName = a.firstName.compareTo(b.firstName);
- if (checkFirstName != 0) {
- return checkFirstName;
- }
- if (a.middleName != null && b.middleName != null) {
- final int checkMiddleName = a.middleName!.compareTo(b.middleName!);
- if (checkMiddleName != 0) {
- return checkMiddleName;
- }
- } else if (a.middleName != null || b.middleName != null) {
- return a.middleName != null ? 1 : -1;
- }
- // If both contacts have the exact same name, order by first created.
- return a.id.compareTo(b.id);
- });
-}
-
-typedef AlphabetizedContactMap = SplayTreeMap>;
-
-class ContactGroup {
- factory ContactGroup({
- required int id,
- required String label,
- bool permanent = false,
- String? title,
- List? contacts,
- }) {
- final contactsCopy = contacts ?? [];
- _sortContacts(contactsCopy);
- return ContactGroup._internal(
- id: id,
- label: label,
- permanent: permanent,
- title: title,
- contacts: contactsCopy,
- );
- }
-
- ContactGroup._internal({
- required this.id,
- required this.label,
- this.permanent = false,
- String? title,
- List? contacts,
- }) : title = title ?? label,
- _contacts = contacts ?? const [];
-
- final int id;
-
- final bool permanent;
-
- final String label;
-
- final String title;
-
- final List _contacts;
-
- List get contacts => _contacts;
-
- AlphabetizedContactMap get alphabetizedContacts {
- final AlphabetizedContactMap contactsMap = AlphabetizedContactMap();
- for (Contact contact in _contacts) {
- final String lastInitial = contact.lastName[0].toUpperCase();
- if (contactsMap.containsKey(lastInitial)) {
- contactsMap[lastInitial]!.add(contact);
- } else {
- contactsMap[lastInitial] = [contact];
- }
- }
- return contactsMap;
- }
-}
-
-class ContactGroupsModel extends ChangeNotifier {
- final List _lists = generateSeedData();
-
- List get lists => _lists;
-
- ContactGroup findContactList(int id) {
- return lists[id];
- }
-}
-
-final allPhone = ContactGroup(
- id: 0,
- permanent: true,
- label: 'All iPhone',
- title: 'iPhone',
- contacts: allContacts.toList(),
-);
-
-final friends = ContactGroup(
- id: 1,
- label: 'Friends',
- contacts: [allContacts.elementAt(3)],
-);
-
-final work = ContactGroup(id: 2, label: 'Work');
-
-List generateSeedData() {
- return [allPhone, friends, work];
-}
diff --git a/rolodex/lib/main.dart b/rolodex/lib/main.dart
deleted file mode 100644
index 238ef0164..000000000
--- a/rolodex/lib/main.dart
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2018 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/cupertino.dart';
-import 'package:provider/provider.dart';
-
-import 'data/contact_group.dart';
-import 'screens/contacts.dart';
-import 'screens/contact_groups.dart';
-
-void main() {
- runApp(const RolodexApp());
-}
-
-class RolodexApp extends StatelessWidget {
- const RolodexApp({super.key});
-
- @override
- Widget build(BuildContext context) {
- return ChangeNotifierProvider(
- create: (context) => ContactGroupsModel(),
- child: CupertinoApp(
- title: 'Rolodex',
- theme: CupertinoThemeData(
- barBackgroundColor: CupertinoDynamicColor.withBrightness(
- color: Color(0xFFF9F9F9),
- darkColor: Color(0xFF1D1D1D),
- ),
- ),
- initialRoute: '/contacts',
- onGenerateInitialRoutes: (initialRoute) {
- return [
- CupertinoPageRoute(
- title: 'Lists',
- builder: (BuildContext context) {
- return ContactGroupsPage();
- },
- ),
- CupertinoPageRoute(
- builder: (BuildContext context) {
- return ContactListsPage(listId: 0);
- },
- ),
- ];
- },
- onUnknownRoute: (RouteSettings settings) {
- return CupertinoPageRoute(
- builder: (BuildContext context) {
- return const CupertinoPageScaffold(
- child: Center(child: Text('Unknown Route')),
- );
- },
- );
- },
- ),
- );
- }
-}
diff --git a/rolodex/lib/screens/contact_groups.dart b/rolodex/lib/screens/contact_groups.dart
deleted file mode 100644
index e7d66ddd3..000000000
--- a/rolodex/lib/screens/contact_groups.dart
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2018 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/cupertino.dart';
-import 'package:provider/provider.dart';
-import 'package:rolodex/data/contact.dart';
-import 'package:rolodex/data/contact_group.dart';
-import 'contacts.dart';
-
-class ContactGroupsPage extends StatelessWidget {
- const ContactGroupsPage({super.key});
-
- Widget _buildTrailing(List contacts, BuildContext context) {
- final TextStyle style = CupertinoTheme.of(
- context,
- ).textTheme.textStyle.copyWith(color: CupertinoColors.systemGrey);
-
- return Row(
- spacing: 5,
- children: [
- Text(contacts.length.toString(), style: style),
- Icon(
- CupertinoIcons.forward,
- color: CupertinoColors.systemGrey3,
- size: 18,
- ),
- ],
- );
- }
-
- @override
- Widget build(BuildContext context) {
- return CupertinoPageScaffold(
- backgroundColor: CupertinoColors.extraLightBackgroundGray,
- child: CustomScrollView(
- slivers: [
- CupertinoSliverNavigationBar(
- padding: EdgeInsetsDirectional.only(start: 8, end: 16),
- stretch: true,
- leading: CupertinoButton(
- padding: EdgeInsets.zero,
- onPressed: () {},
- child: Text('Edit'),
- ),
- largeTitle: Text('Lists'),
- trailing: CupertinoButton(
- padding: EdgeInsets.zero,
- onPressed: () {},
- child: Text('Add List'),
- ),
- ),
- SliverFillRemaining(
- child: Consumer(
- builder: (context, contactLists, child) {
- const groupIcon = Icon(
- CupertinoIcons.group,
- weight: 900,
- size: 32,
- );
-
- const pairIcon = Icon(
- CupertinoIcons.person_2,
- weight: 900,
- size: 24,
- );
-
- return CupertinoListSection.insetGrouped(
- header: Text('iPhone'),
- children: [
- for (ContactGroup contactList in contactLists.lists)
- CupertinoListTile(
- leading: contactList.id == 0 ? groupIcon : pairIcon,
- leadingSize: 32,
- leadingToTitle: 9,
- padding: EdgeInsets.symmetric(horizontal: 13.0),
- title: Text(contactList.label),
- trailing: _buildTrailing(contactList.contacts, context),
- onTap:
- () => Navigator.of(context).push(
- CupertinoPageRoute(
- title: contactList.title,
- builder: (BuildContext context) {
- return ContactListsPage(
- listId: contactList.id,
- );
- },
- ),
- ),
- ),
- ],
- );
- },
- ),
- ),
- ],
- ),
- );
- }
-}
diff --git a/rolodex/lib/screens/contacts.dart b/rolodex/lib/screens/contacts.dart
deleted file mode 100644
index 86ac5ae9b..000000000
--- a/rolodex/lib/screens/contacts.dart
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright 2018 The Flutter team. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/cupertino.dart';
-import 'package:provider/provider.dart';
-import 'package:rolodex/data/contact.dart';
-import 'package:rolodex/data/contact_group.dart';
-
-class ContactListsPage extends StatelessWidget {
- const ContactListsPage({super.key, required this.listId});
-
- final int listId;
-
- @override
- Widget build(BuildContext context) {
- return CupertinoPageScaffold(
- child: Consumer(
- builder: (context, contactGroups, child) {
- final ContactGroup contactList = contactGroups.findContactList(
- listId,
- );
- final AlphabetizedContactMap contacts =
- contactList.alphabetizedContacts;
- return CustomScrollView(
- slivers: [
- CupertinoSliverNavigationBar.search(
- padding: EdgeInsetsDirectional.only(start: 8, end: 6),
- transitionBetweenRoutes: false,
- automaticallyImplyLeading: true,
- largeTitle: Text(contactList.title),
- trailing: CupertinoButton(
- padding: EdgeInsets.zero,
- onPressed: () {},
- child: Icon(CupertinoIcons.add, size: 25),
- ),
- bottomMode: NavigationBarBottomMode.always,
- searchField: CupertinoSearchTextField(
- suffixIcon: Icon(CupertinoIcons.mic_fill),
- suffixMode: OverlayVisibilityMode.always,
- ),
- ),
- SliverList.list(
- children: [
- SizedBox(height: 20),
- ...contacts.keys.map(
- (String initial) => ContactListSection(
- lastInitial: initial,
- contacts: contacts[initial]!,
- ),
- ),
- ],
- ),
- ],
- );
- },
- ),
- );
- }
-}
-
-// Section of contacts grouped under the first letter of their last name.
-class ContactListSection extends StatelessWidget {
- const ContactListSection({
- super.key,
- required this.lastInitial,
- required this.contacts,
- });
-
- final String lastInitial;
-
- final List contacts;
-
- @override
- Widget build(BuildContext context) {
- return Padding(
- padding: EdgeInsetsDirectional.fromSTEB(20, 0, 20, 0),
- child: Column(
- children: [
- SizedBox(height: 15),
- Align(
- alignment: AlignmentDirectional.bottomStart,
- child: Text(
- lastInitial,
- style: TextStyle(
- color: CupertinoColors.systemGrey,
- fontSize: 15,
- fontWeight: FontWeight.w700,
- ),
- ),
- ),
- CupertinoListSection(
- backgroundColor: CupertinoColors.systemBackground,
- dividerMargin: 0,
- additionalDividerMargin: 0,
- topMargin: 4,
- children:
- contacts.map((contact) {
- return CupertinoListTile(
- padding: EdgeInsetsDirectional.only(start: 0.0, end: 0.0),
- title: RichText(
- text: TextSpan(
- text: "${contact.firstName} ",
- style: DefaultTextStyle.of(context).style,
- children: [
- if (contact.middleName != null)
- TextSpan(text: "${contact.middleName} "),
- TextSpan(
- text: contact.lastName,
- style: TextStyle(fontWeight: FontWeight.w600),
- ),
- if (contact.suffix != null)
- TextSpan(text: " ${contact.suffix}"),
- ],
- ),
- ),
- );
- }).toList(),
- ),
- ],
- ),
- );
- }
-}
diff --git a/rolodex/pubspec.yaml b/rolodex/pubspec.yaml
deleted file mode 100644
index ab8c774d1..000000000
--- a/rolodex/pubspec.yaml
+++ /dev/null
@@ -1,90 +0,0 @@
-name: rolodex
-description: "A new Flutter project."
-# The following line prevents the package from being accidentally published to
-# pub.dev using `flutter pub publish`. This is preferred for private packages.
-publish_to: 'none' # Remove this line if you wish to publish to pub.dev
-
-# The following defines the version and build number for your application.
-# A version number is three numbers separated by dots, like 1.2.43
-# followed by an optional build number separated by a +.
-# Both the version and the builder number may be overridden in flutter
-# build by specifying --build-name and --build-number, respectively.
-# In Android, build-name is used as versionName while build-number used as versionCode.
-# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
-# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
-# Read more about iOS versioning at
-# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-# In Windows, build-name is used as the major, minor, and patch parts
-# of the product and file versions while build-number is used as the build suffix.
-version: 1.0.0+1
-
-environment:
- sdk: ^3.7.0-0
-
-# Dependencies specify other packages that your package needs in order to work.
-# To automatically upgrade your package dependencies to the latest versions
-# consider running `flutter pub upgrade --major-versions`. Alternatively,
-# dependencies can be manually updated by changing the version numbers below to
-# the latest version available on pub.dev. To see which dependencies have newer
-# versions available, run `flutter pub outdated`.
-dependencies:
- flutter:
- sdk: flutter
-
- # The following adds the Cupertino Icons font to your application.
- # Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: ^1.0.8
- provider: ^6.1.2
-
-dev_dependencies:
- flutter_test:
- sdk: flutter
-
- # The "flutter_lints" package below contains a set of recommended lints to
- # encourage good coding practices. The lint set provided by the package is
- # activated in the `analysis_options.yaml` file located at the root of your
- # package. See that file for information about deactivating specific lint
- # rules and activating additional ones.
- flutter_lints: ^5.0.0
-
-# For information on the generic Dart part of this file, see the
-# following page: https://dart.dev/tools/pub/pubspec
-
-# The following section is specific to Flutter packages.
-flutter:
-
- # The following line ensures that the Material Icons font is
- # included with your application, so that you can use the icons in
- # the material Icons class.
- uses-material-design: true
-
- # To add assets to your application, add an assets section, like this:
- # assets:
- # - images/a_dot_burr.jpeg
- # - images/a_dot_ham.jpeg
-
- # An image asset can refer to one or more resolution-specific "variants", see
- # https://flutter.dev/to/resolution-aware-images
-
- # For details regarding adding assets from package dependencies, see
- # https://flutter.dev/to/asset-from-package
-
- # To add custom fonts to your application, add a fonts section here,
- # in this "flutter" section. Each entry in this list should have a
- # "family" key with the font family name, and a "fonts" key with a
- # list giving the asset and other descriptors for the font. For
- # example:
- # fonts:
- # - family: Schyler
- # fonts:
- # - asset: fonts/Schyler-Regular.ttf
- # - asset: fonts/Schyler-Italic.ttf
- # style: italic
- # - family: Trajan Pro
- # fonts:
- # - asset: fonts/TrajanPro.ttf
- # - asset: fonts/TrajanPro_Bold.ttf
- # weight: 700
- #
- # For details regarding fonts from package dependencies,
- # see https://flutter.dev/to/font-from-package
diff --git a/rolodex/test/widget_test.dart b/rolodex/test/widget_test.dart
deleted file mode 100644
index 67f9e7c96..000000000
--- a/rolodex/test/widget_test.dart
+++ /dev/null
@@ -1,19 +0,0 @@
-import 'package:flutter_test/flutter_test.dart';
-
-import 'package:rolodex/main.dart';
-import 'package:rolodex/screens/contacts.dart';
-
-void main() {
- testWidgets('Opens on all contacts page', (WidgetTester tester) async {
- await tester.pumpWidget(const RolodexApp());
-
- expect(find.byType(ContactListsPage), findsOneWidget);
- expect(find.text('Add List'), findsNothing);
-
- await tester.tap(find.text('Lists'));
- await tester.pumpAndSettle();
-
- expect(find.text('Add List'), findsOneWidget);
- expect(find.byType(ContactListsPage), findsNothing);
- });
-}
diff --git a/tool/flutter_ci_script_master.sh b/tool/flutter_ci_script_master.sh
index f59b1e65a..d393d2992 100755
--- a/tool/flutter_ci_script_master.sh
+++ b/tool/flutter_ci_script_master.sh
@@ -60,7 +60,6 @@ declare -ar PROJECT_NAMES=(
"platform_view_swift"
"provider_counter"
"provider_shopper"
- "rolodex"
"simple_shader"
"simplistic_calculator"
# TODO(ewindmill): 'scribble' is deprecated and shouldn't be used. Use stylusHandwriting instead.