Skip to content
Open
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
2 changes: 2 additions & 0 deletions lib/constants/app_strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ class AppStrings {
static const String listViewExample = "ListView Example";
static const String taboolaWebIntegration = "Taboola Web Integration";
static const String taboolaInAppWebViewIntegration = "Taboola InAppWebView Integration";
static const String taboolaTwoWebUnitsIntegration = "Taboola Two Web Units Integration";

// Menu items
static const String menuItemSliverListWidgetFeed = 'SliverList Widget + Feed';
static const String menuItemSliverGridWidget = 'SliverGrid Widget';
static const String menuItemListViewWidget = 'ListView Widget';
static const String menuItemWebIntegration = 'Web Integration Flutter weview';
static const String menuItemWebIntegrationInappWebview = 'Web Integration InappWebview';
static const String menuItemWebIntegrationTwoWebUnits = 'Web Integration Two Web Units';

// Widget labels
static const String feedContainer = "Feed Container";
Expand Down
1 change: 1 addition & 0 deletions lib/constants/colors.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ class AppColors {
static const Color lightGreen = Color.fromARGB(255, 67, 240, 177);
static const Color orange = Color.fromARGB(255, 240, 147, 67);
static const Color pink = Color.fromARGB(255, 240, 67, 149);
static const Color purple = Color.fromARGB(255, 155, 67, 240);
static const Color darkGreen = Color(0xFF158443);
static const Color blue = Color(0xFF61B3C3);
static const Color indigo = Color(0xFF7C6DAF);
Expand Down
1 change: 1 addition & 0 deletions lib/constants/routes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ class Routes {
static const String customListViewFeedAndWidget = '/customlistviewfeedAndWidget';
static const String webIntegrationFlutterWebview = '/webIntegrationFlutterWebview';
static const String webIntegrationInappWebview = '/webIntegrationInappWebview';
static const String webIntegrationTwoWebUnits = '/webIntegrationTwoWebUnits';
}
5 changes: 5 additions & 0 deletions lib/data/menu_items.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,10 @@ class MenuItemRepository {
itemColor: AppColors.pink,
routeName: Routes.webIntegrationInappWebview,
),
MenuItemModel(
title: AppStrings.menuItemWebIntegrationTwoWebUnits,
itemColor: AppColors.purple,
routeName: Routes.webIntegrationTwoWebUnits,
),
];
}
4 changes: 3 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ import 'package:taboola_flutter_example/pages/custom_scroll_view_page_widget.dar
import 'package:taboola_flutter_example/pages/home_page.dart';
import 'package:taboola_flutter_example/pages/web_integration_inappwebview_page.dart';
import 'package:taboola_flutter_example/pages/web_integration_flutter_webview.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_flutter_example/pages/web_integration_two_web_units_screen.dart';
import 'package:taboola_sdk_beta/taboola.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
Expand All @@ -34,6 +35,7 @@ class TaboolaExampleApp extends StatelessWidget {
Routes.customListViewFeedAndWidget: (context) => const CustomListViewPageFeedAndWidget(),
Routes.webIntegrationFlutterWebview: (context) => const WebIntegrationFlutterWebview(),
Routes.webIntegrationInappWebview: (context) => const WebIntegrationInappWebviewPage(),
Routes.webIntegrationTwoWebUnits: (context) => const WebIntegrationTwoWebUnitsScreen(),
},
);
}
Expand Down
8 changes: 4 additions & 4 deletions lib/pages/custom_list_view_page_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import 'package:taboola_flutter_example/constants/publisher_params.dart';
import 'package:taboola_flutter_example/constants/ui_constants.dart';

import 'package:taboola_flutter_example/constants/app_strings.dart';
import 'package:taboola_sdk/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk/classic/tbl_classic_page.dart';
import 'package:taboola_sdk/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_page.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk_beta/taboola.dart';

class CustomListViewPageFeedAndWidget extends StatefulWidget {
const CustomListViewPageFeedAndWidget({Key? key}) : super(key: key);
Expand Down
8 changes: 4 additions & 4 deletions lib/pages/custom_scroll_view_page_feed_and_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import 'package:flutter/material.dart';

import 'package:taboola_flutter_example/constants/publisher_params.dart';
import 'package:taboola_flutter_example/constants/ui_constants.dart';
import 'package:taboola_sdk/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk/classic/tbl_classic_page.dart';
import 'package:taboola_sdk/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_page.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk_beta/taboola.dart';
import 'package:taboola_flutter_example/constants/app_strings.dart';

class CustomScrollViewPageFeedAndWidget extends StatefulWidget {
Expand Down
8 changes: 4 additions & 4 deletions lib/pages/custom_scroll_view_page_widget.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:taboola_flutter_example/constants/publisher_params.dart';
import 'package:taboola_flutter_example/constants/ui_constants.dart';
import 'package:taboola_sdk/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk/classic/tbl_classic_page.dart';
import 'package:taboola_sdk/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_listener.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_page.dart';
import 'package:taboola_sdk_beta/classic/tbl_classic_unit.dart';
import 'package:taboola_sdk_beta/taboola.dart';
import 'package:taboola_flutter_example/constants/app_strings.dart';

class CustomScrollViewPageWidget extends StatefulWidget {
Expand Down
1 change: 1 addition & 0 deletions lib/pages/home_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import 'package:taboola_flutter_example/constants/app_strings.dart';
import 'package:taboola_flutter_example/constants/ui_constants.dart';
import 'package:taboola_flutter_example/data/menu_items.dart';
import 'package:taboola_flutter_example/widgets/menu_item.dart';
import 'package:taboola_flutter_example/pages/web_integration_two_web_units_screen.dart';

class HomePage extends StatelessWidget {
const HomePage({Key? key}) : super(key: key);
Expand Down
78 changes: 29 additions & 49 deletions lib/pages/web_integration_flutter_webview.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:taboola_flutter_example/constants/ui_constants.dart';
import 'package:taboola_flutter_example/utils/snack_bar_utils.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_sdk_beta/taboola.dart';
import 'package:webview_flutter_wkwebview/webview_flutter_wkwebview.dart';
import 'package:taboola_flutter_example/constants/app_strings.dart';
import 'package:webview_flutter_android/webview_flutter_android.dart';


const String kLocalExamplePage = '''
<html>
<!DOCTYPE html>
Expand Down Expand Up @@ -78,7 +78,8 @@ class WebIntegrationFlutterWebview extends StatefulWidget {
State<WebIntegrationFlutterWebview> createState() => _WebIntegrationFlutterWebviewState();
}

class _WebIntegrationFlutterWebviewState extends State<WebIntegrationFlutterWebview> {
class _WebIntegrationFlutterWebviewState extends State<WebIntegrationFlutterWebview>
with SnackBarMixin {
late final WebViewController _webViewController;
late final TBLWebUnit _taboolaWebUnit;
final ScrollController _scrollController = ScrollController();
Expand All @@ -97,19 +98,14 @@ class _WebIntegrationFlutterWebviewState extends State<WebIntegrationFlutterWebv
} else {
params = const PlatformWebViewControllerCreationParams();
}
_webViewController = WebViewController.fromPlatformCreationParams(params);
_webViewController = WebViewController.fromPlatformCreationParams(params);
// Create Taboola web listener
TBLWebListener tblWebListener = TBLWebListener(
tblDidResize,
tblDidShow,
tblDidFailToLoad,
tblDidClickOnItem,
);
tblDidResize, tblDidShow, tblDidFailToLoad, tblDidClickOnItem, tblOnUpdateContentCompleted);

// Initialize Taboola web page and unit
TBLWebPage webPage = Taboola.getWebPage();
_taboolaWebUnit = webPage.buildWebUnit(
_webViewKey, _webViewController, tblWebListener,
_taboolaWebUnit = webPage.buildWebUnit(_webViewKey, _webViewController, tblWebListener,
scrollController: _scrollController);

_webViewController
Expand All @@ -118,20 +114,18 @@ class _WebIntegrationFlutterWebviewState extends State<WebIntegrationFlutterWebv
}

WebViewWidget getWebViewWidget() {
WebViewWidget webViewWidget =
_webViewController.platform is AndroidWebViewController
? WebViewWidget.fromPlatformCreationParams(
key: _webViewKey,
params: AndroidWebViewWidgetCreationParams
.fromPlatformWebViewWidgetCreationParams(
AndroidWebViewWidgetCreationParams(
controller: _webViewController.platform,
),
// ** Notice: displayWithHybridComposition is set to true, to avoid issues **
// see github issue: https://github.com/flutter/flutter/issues/104889
displayWithHybridComposition: true,
))
: WebViewWidget(key: _webViewKey, controller: _webViewController);
WebViewWidget webViewWidget = _webViewController.platform is AndroidWebViewController
? WebViewWidget.fromPlatformCreationParams(
key: _webViewKey,
params: AndroidWebViewWidgetCreationParams.fromPlatformWebViewWidgetCreationParams(
AndroidWebViewWidgetCreationParams(
controller: _webViewController.platform,
),
// ** Notice: displayWithHybridComposition is set to true, to avoid issues **
// see github issue: https://github.com/flutter/flutter/issues/104889
displayWithHybridComposition: true,
))
: WebViewWidget(key: _webViewKey, controller: _webViewController);
return webViewWidget;
}

Expand Down Expand Up @@ -191,47 +185,33 @@ class _WebIntegrationFlutterWebviewState extends State<WebIntegrationFlutterWebv

// Callback when the ad is shown
void tblDidShow(String placement) {
print("tblDidShow for placement: $placement");
_showSnackBar("${AppStrings.adShownMessage}$placement");
showSnackBar("${AppStrings.adShownMessage}$placement");
}

// Callback when the ad is resized
void tblDidResize(String placement, double height) {
print("Publisher did get height $height");
_showSnackBar("${AppStrings.adResizedMessage}$placement${AppStrings.adResizedHeightMessage}$height");
showSnackBar(
"${AppStrings.adResizedMessage}$placement${AppStrings.adResizedHeightMessage}$height");
}

// Callback when the ad fails to load
void tblDidFailToLoad(String placement, String error) {
print("Publisher placement: $placement did fail with error: $error");
_showSnackBar("${AppStrings.adFailedMessage}$placement${AppStrings.adFailedErrorMessage}$error");
showSnackBar("${AppStrings.adFailedMessage}$placement${AppStrings.adFailedErrorMessage}$error");
}

// Callback when an item is clicked
bool tblDidClickOnItem(
String placement, String itemId, String clickUrl, bool organic) {
bool tblDidClickOnItem(String placement, String itemId, String clickUrl, bool organic) {
print(
"Publisher did click on item: $itemId with clickUrl: $clickUrl in placement: $placement; organic: $organic");
if (organic) {
_showSnackBar(AppStrings.organicClickMessage);
print("organic");
showSnackBar(AppStrings.organicClickMessage);
} else {
_showSnackBar(AppStrings.sponsoredClickMessage);
print("SC");
showSnackBar(AppStrings.sponsoredClickMessage);
}
return false;
}

// Helper method to show a SnackBar message
void _showSnackBar(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(message),
action: SnackBarAction(
label: AppStrings.okButton,
onPressed: () => ScaffoldMessenger.of(context).hideCurrentSnackBar(),
),
),
);
void tblOnUpdateContentCompleted() {
showSnackBar("Content update completed");
}
}
}
55 changes: 18 additions & 37 deletions lib/pages/web_integration_inappwebview_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:taboola_sdk/taboola.dart';
import 'package:taboola_flutter_example/utils/snack_bar_utils.dart';
import 'package:taboola_sdk_beta/taboola.dart';

import 'package:taboola_flutter_example/constants/app_strings.dart';

Expand Down Expand Up @@ -95,12 +96,11 @@ class WebIntegrationInappWebviewPage extends StatefulWidget {
const WebIntegrationInappWebviewPage({Key? key}) : super(key: key);

@override
_WebIntegrationInappWebviewPageState createState() =>
_WebIntegrationInappWebviewPageState();
_WebIntegrationInappWebviewPageState createState() => _WebIntegrationInappWebviewPageState();
}

class _WebIntegrationInappWebviewPageState
extends State<WebIntegrationInappWebviewPage> {
class _WebIntegrationInappWebviewPageState extends State<WebIntegrationInappWebviewPage>
with SnackBarMixin {
final GlobalKey webViewKey = GlobalKey();
InAppWebViewController? webViewController;
late TBLWebUnit tblWebUnit;
Expand Down Expand Up @@ -135,12 +135,8 @@ class _WebIntegrationInappWebviewPageState
InAppWebView(
key: webViewKey,
onWebViewCreated: (inappwebviewController) async {
TBLWebListener tblWebListener = TBLWebListener(
_tblDidResize,
_tblDidShow,
_tblDidFailToLoad,
_tblDidClickOnItem,
);
TBLWebListener tblWebListener = TBLWebListener(tblDidResize, tblDidShow,
tblDidFailToLoad, tblDidClickOnItem, tblOnUpdateContentCompleted);
TBLWebPage webPage = Taboola.getWebPage();
tblWebUnit = webPage.buildWebUnit(
webViewKey,
Expand All @@ -157,46 +153,31 @@ class _WebIntegrationInappWebviewPageState
])));
}

void _tblDidShow(String placement) {
print("tblDidShow for placement: $placement");
_showSnackBar("${AppStrings.adShownMessage}$placement");
void tblDidShow(String placement) {
showSnackBar("${AppStrings.adShownMessage}$placement");
}

void _tblDidResize(String placement, double height) {
print("Ad resized for placement $placement to height $height");
_showSnackBar(
void tblDidResize(String placement, double height) {
showSnackBar(
"${AppStrings.adResizedMessage}$placement${AppStrings.adResizedHeightMessage}$height");
}

void _tblDidFailToLoad(String placement, String error) {
print("Ad failed to load for placement: $placement with error: $error");
_showSnackBar(
"${AppStrings.adFailedMessage}$placement${AppStrings.adFailedErrorMessage}$error");
void tblDidFailToLoad(String placement, String error) {
showSnackBar("${AppStrings.adFailedMessage}$placement${AppStrings.adFailedErrorMessage}$error");
}

bool _tblDidClickOnItem(
String placement, String itemId, String clickUrl, bool organic) {
bool tblDidClickOnItem(String placement, String itemId, String clickUrl, bool organic) {
print(
"Publisher did click on item: $itemId with clickUrl: $clickUrl in placement: $placement of organic: $organic");
if (organic) {
_showSnackBar(AppStrings.organicClickMessage);
print("organic");
showSnackBar(AppStrings.organicClickMessage);
} else {
_showSnackBar(AppStrings.sponsoredClickMessage);
print("SC");
showSnackBar(AppStrings.sponsoredClickMessage);
}
return false;
}

void _showSnackBar(String message) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(message),
action: SnackBarAction(
label: AppStrings.okButton,
onPressed: () => ScaffoldMessenger.of(context).hideCurrentSnackBar(),
),
),
);
void tblOnUpdateContentCompleted() {
showSnackBar("Content update completed");
}
}
Loading