Skip to content

Fix/lp #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jun 11, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions devtools_options.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:
2 changes: 1 addition & 1 deletion lib/domain/2024/qa_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ enum QAType {
translation(
question: '英語が得意ではないのですが、日本語への翻訳はございますか?',
answer:
'日本語字幕を生成AIでリアルタイム生成した映像へのリンクを提供し、必要な方はご自身のPCで見れるようにする方向性で調整中です。ただ、通信と翻訳のレイテンシを踏まえるとラグが10秒程度発生すると考えられます。あくまでも補助的な位置付けとお考えください。',
'日本語字幕を生成AIでリアルタイム生成した映像をモニターに投影する予定です。',
),
live(
question: 'Do you have live streaming?',
Expand Down
35 changes: 35 additions & 0 deletions lib/domain/sponsor_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,16 @@ enum SilverSponsorType {
url: 'https://flutterflow.io/',
logoAssetName: 'resources/images/flutterflow.png',
),
mercari(
name: 'mercari',
url: 'https://about.mercari.com/',
logoAssetName: 'resources/images/mercari.png',
),
dcm(
name: 'DCM',
url: 'https://dcm.dev',
logoAssetName: 'resources/images/dcm.png',
),
;

const SilverSponsorType({
Expand All @@ -81,6 +91,26 @@ enum SilverSponsorType {
final String logoAssetName;
}

enum AppSponsorType {
nekologic(
name: 'Nekologic',
url: 'https://neko-logic.com',
logoAssetName: 'resources/images/nekologic.png',
),
;

const AppSponsorType({
required this.name,
required this.url,
required this.logoAssetName,
});

final String name;
final String url;
final String logoAssetName;
}


enum CommunitySponsorType {
ibj(
name: 'IBJ',
Expand All @@ -92,6 +122,11 @@ enum CommunitySponsorType {
url: 'https://twitter.com/blendthink',
logoAssetName: 'resources/images/blendthink.png',
),
shorebird(
name: 'shorebird',
url: 'https://shorebird.dev/',
logoAssetName: 'resources/images/shorebird.png',
),
;

const CommunitySponsorType({
Expand Down
3 changes: 2 additions & 1 deletion lib/presentation/lp_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'lp_header_appbar.dart';
import 'lp_model.dart';
import 'lp_organizers_widget.dart';
import 'lp_outline_widget.dart';
import 'lp_qa_widget.dart';
import 'lp_schedule_widget.dart';
import 'lp_speakers_widget.dart';
import 'lp_sponsors_widget.dart';
Expand Down Expand Up @@ -41,8 +42,8 @@ class LPPage extends StatelessWidget {
const SpeakersWidget(),
const SponsorsWidget(),
const VenueWidget(),
const QAWidget(),
const About2024Widget(),
//QAWidget(),
const OrganizersWidget(),
FooterWidget(isMobile: model.isMobile),
],
Expand Down
76 changes: 58 additions & 18 deletions lib/presentation/lp_sponsors_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,10 @@ class SponsorsWidget extends StatelessWidget {
SelectableText(
'Gold',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: AppColor.primaryYellowColor,
),
fontSize: isMobile ? 28 : 56,
height: 1,
color: AppColor.primaryYellowColor,
),
),
SizedBox(height: isMobile ? 16 : 24),
GridView.count(
Expand Down Expand Up @@ -64,14 +64,29 @@ class SponsorsWidget extends StatelessWidget {
.map((sponsor) => SilverSponsorItemWidget(type: sponsor))
.toList(),
),
SizedBox(height: isMobile ? 80 : 90),
SelectableText(
'App Sponsor',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
),
SizedBox(height: isMobile ? 16 : 24),
SizedBox(
width: isMobile ? 120 : 270,
height: isMobile ? 120 : 270,
child: const AppSponsorItemWidget(type: AppSponsorType.nekologic),
),
const SizedBox(height: 80),
SelectableText(
'Community',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
),
SizedBox(height: isMobile ? 16 : 24),
GridView.count(
Expand All @@ -89,20 +104,20 @@ class SponsorsWidget extends StatelessWidget {
SelectableText(
'We\'re looking for sponsors!',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
),
SizedBox(height: isMobile ? 16 : 24),
SelectableText(
'Support FlutterNinjas in a way that suits you.\n'
'Community Sponsorship offers logo display only, while higher tiers come with additional benefits.\n'
'You can complete your Community Sponsorship online now. For Silver or higher, please contact us for details.',
'Community Sponsorship offers logo display only, while higher tiers come with additional benefits.\n'
'You can complete your Community Sponsorship online now. For Silver or higher, please contact us for details.',
style: Theme.of(context).textTheme.titleMedium!.copyWith(
color: Colors.white,
fontWeight: FontWeight.normal,
),
color: Colors.white,
fontWeight: FontWeight.normal,
),
textAlign: TextAlign.center,
),
const SizedBox(height: 16),
Expand Down Expand Up @@ -204,6 +219,31 @@ class SilverSponsorItemWidget extends StatelessWidget {
}
}

class AppSponsorItemWidget extends StatelessWidget {
const AppSponsorItemWidget({
super.key,
required this.type,
});
final AppSponsorType type;

@override
Widget build(BuildContext context) {
final isMobile = context.watch<LPModel>().isMobile;

return InkWell(
onTap: () {
launchUrlString(type.url);
},
child: Padding(
padding: EdgeInsets.all(isMobile ? 8 : 40),
child: Image.asset(
type.logoAssetName,
),
),
);
}
}

class CommunitySponsorItemWidget extends StatelessWidget {
const CommunitySponsorItemWidget({
super.key,
Expand All @@ -227,4 +267,4 @@ class CommunitySponsorItemWidget extends StatelessWidget {
),
);
}
}
}
25 changes: 6 additions & 19 deletions lib/presentation/lp_tickets_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,30 +25,17 @@ class TicketsWidget extends StatelessWidget {
),
const SizedBox(height: 16),
SelectableText(
'The ticket contains\n・2 days of FlutterNinjas💻\n・Asking the speakers🙋‍️\n・Coffee and some drinks☕️\n・Lunch for 2 days🍙\n・Dinner for 2nd day🥘\n・Pre-party🥳 \n・Slack community💬\n・Might get some special gifts🎁\n\nThe earlier you buy, the more you save.',
'The ticket contains\n・2 days of FlutterNinjas💻\n・Asking the speakers🙋‍️\n・Coffee and some drinks☕️\n・Lunch for 2 days🍙\n・Dinner for 2nd day🥘\n・Pre-party🥳 \n・Slack community💬\n・Might get some special gifts🎁',
style: Theme.of(context).textTheme.titleMedium!.copyWith(
color: Colors.white,
),
),
const SizedBox(height: 32),
isMobile
? const Column(
children: [
Regular(),
SizedBox(height: 32),
LateBird(),
],
)
: const Row(
children: [
Expanded(
child: Regular(),
),
Expanded(
child: LateBird(),
),
],
),
const SizedBox(
width: 300,
child: LateBird(),
),

],
),
);
Expand Down
121 changes: 105 additions & 16 deletions lib/presentation/lp_venue_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -86,24 +86,113 @@ class VenueWidget extends StatelessWidget {
)
],
),
// const SizedBox(height: 80),
// SelectableText(
// 'Floor Map',
// style: Theme.of(context).textTheme.displayLarge?.copyWith(
// fontSize: isMobile ? 28 : 56,
// height: 1,
// color: Colors.white,
// ),
// ),
// const SizedBox(
// height: 16,
// ),
// Image.asset(
// 'resources/images/floor_map.png',
// fit: BoxFit.cover,
// ),
const SizedBox(height: 40),
SelectableText(
'Floor Map',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
),
const SizedBox(
height: 16,
),
Image.asset(
'resources/images/floor_map_2025.png',
fit: BoxFit.cover,
),
const SizedBox(height: 40),
SelectableText(
'Entertainment',
style: Theme.of(context).textTheme.displayLarge?.copyWith(
fontSize: isMobile ? 28 : 56,
height: 1,
color: Colors.white,
),
),
const SizedBox(
height: 16,
),
Text('We have some entertainment for you!',
style: Theme.of(context).textTheme.titleMedium!.copyWith(
color: Colors.white,
fontWeight: FontWeight.normal,
),
textAlign: TextAlign.center,
),
const SizedBox(
height: 40,
),
const Wrap(
alignment: WrapAlignment.center,
spacing: 24,
runSpacing: 24,
children: [
EntertainmentWidget(
imageName: 'resources/images/nailist_kyoro.jpg',
title: 'Nail artist KYORO',
),
EntertainmentWidget(
imageName: 'resources/images/dj_nissei.jpg',
title: 'DJ 日聖',
),
EntertainmentWidget(
imageName: 'resources/images/flutter_quiz.png',
title: 'Flutter Quiz',
),
EntertainmentWidget(
imageName: 'resources/images/boardgame.jpg',
title: 'Boardgame',
),
EntertainmentWidget(
imageName: 'resources/images/snack.jpg',
title: 'Snack & Coffee',
),
EntertainmentWidget(
imageName: 'resources/images/oden.png',
title: 'ODEN',
),
],
),
],
),
);
}
}

class EntertainmentWidget extends StatelessWidget {
const EntertainmentWidget({
super.key,
required this.imageName,
required this.title,
});

final String imageName;
final String title;

@override
Widget build(BuildContext context) {
return Column(
children: [
Image.asset(
imageName,
fit: BoxFit.cover,
width: 110,
height: 110,
),
const SizedBox(
height: 8,
),
Text(title,
style: Theme.of(context).textTheme.titleMedium!.copyWith(
color: Colors.white,
fontWeight: FontWeight.normal,
fontSize: 12,
),
textAlign: TextAlign.center,
),
],
);
}
}
Binary file added resources/images/boardgame.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/dj_nissei.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/floor_map_2025.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/flutter_quiz.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/mercari.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/nailist_kyoro.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/nekologic.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/oden.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified resources/images/revenuecat.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/shorebird.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added resources/images/snack.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.