質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

344閲覧

TextFormFieldに入力した単語をurl_launcherのリンクに複数個入れたいのですが方法がわかりません

hikagami

総合スコア14

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2022/06/27 13:46

TextFormFieldに入力した単語をurl_launcherのリンクに複数個入れたいです
また、その際複数ある入力フォームのうち入力してある箇所のみ連結させてリンクとして出したいです。
現在は

class

1 2 3 final TextEditingController _controller1 = TextEditingController(text: ''); 4 final TextEditingController _controller2 = TextEditingController(text: ''); 5 final TextEditingController _controller3 = TextEditingController(text: ''); 6 final TextEditingController _controller4 = TextEditingController(text: ''); 7 final TextEditingController _controller5 = TextEditingController(text: ''); 8 final TextEditingController _controller6 = TextEditingController(text: ''); 9 final TextEditingController _controller7 = TextEditingController(text: ''); 10 final TextEditingController _controller8 = TextEditingController(text: ''); 11 final TextEditingController _controller9 = TextEditingController(text: ''); 12 final TextEditingController _controller10 = TextEditingController(text: ''); 13 final TextEditingController _controller11 = TextEditingController(text: ''); 14 final TextEditingController _controller12 = TextEditingController(text: ''); 15 16 @override 17 Widget build(BuildContext context) { 18 return Scaffold( 19 appBar: AppBar( 20 title: const Text('Google'), 21 ), 22 body: SingleChildScrollView( 23 ==========省略========================================== 24 Row( 25 mainAxisAlignment: MainAxisAlignment.end, 26 children: [ 27 SizedBox( 28 width: MediaQuery.of(context).size.width * 0.6, 29 height: 50, //高さ 30 child: ElevatedButton( 31 style: ElevatedButton.styleFrom( 32 primary: Colors.blueAccent, 33 onPrimary: Colors.white, 34 ), 35 onPressed: () async { 36 var url = 37 'https://www.google.com/search?q='; 38 if (await canLaunch(url)) { 39 40 launch(url, forceSafariVC: false); 41 } 42 }, 43 child: const Text('you'), 44 ), 45 ),

という感じなのですが、自分なりに色々調べましたがやりかたがわからず困っています。
よろしくおねがいします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

やりたいことを正しく理解できているかわかりませんが、TextFormFieldにはGoogleで検索したいキーワードが一つずつ入り、それを連結してurlのq=の後に指定して呼び出すということでしょうか?

であれば、以下のようにTextEditingController.textを連結する関数を用意して、更新したいタイミングで呼び出すのはいかがでしょうか?

入力されていなければ空になるので、入力されている文字列だけ連結できるかと思います。

void _makeQuery() { setState(() { _queryString = '${_controller1.text} ${_controller2.text} ${_controller3.text}'; }); }

投稿2022/06/28 21:06

harakazu

総合スコア150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hikagami

2022/06/29 08:33

ありがとうございます。 言葉足らずでしたが、入力する場所によって任意の検索演算子を使用したいので単純な連結ではおかしくなってしまうのです。 現在は onPressed: () async { var url = '$enterurl'; if (await canLaunch(url)) { launch(url, forceSafariVC: false); } }, 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 String baseurl(){ return 'https://www.google.com/search?q='; } String test1() { return '+${_controller1.text}'; } String enterurl() { return '$baseurl() + $test1()'; } のように試行錯誤しています(おそらくめちゃくちゃだと思います)が、これだと Closure: () => String from Function 'enterurl':. is null と出てしまいます。
harakazu

2022/06/29 20:43

例えば、controller1は完全一致検索、controller2は除外、controller3はAND検索みたいな感じですかね? でしたら、以下のようなコードで動くかと思います。 String _query1 = _controller1.text != '' ? '\"${_controller1.text}\"' : ''; String _query2 = _controller2.text != '' ? '-${_controller2.text}' : ''; String _query3 = _controller3.text != '' ? 'AND ${_controller3.text}' : ''; _queryString = '${_query1} ${_query2} ${_query3}';
hikagami

2022/07/01 05:23

返信ありがとうございます。 import 'package:flutter/material.dart'; import 'package:url_launcher/url_launcher.dart'; // import 'package:flutter/services.dart'; class Google extends StatefulWidget { const Google({Key? key}) : super(key: key); @override _SampleState createState() => _SampleState(); } class _SampleState extends State<Google> { final TextEditingController _controller1 = TextEditingController(text: ''); final TextEditingController _controller2 = TextEditingController(text: ''); final TextEditingController _controller3 = TextEditingController(text: ''); final TextEditingController _controller4 = TextEditingController(text: ''); final TextEditingController _controller5 = TextEditingController(text: ''); final TextEditingController _controller6 = TextEditingController(text: ''); final TextEditingController _controller7 = TextEditingController(text: ''); final TextEditingController _controller8 = TextEditingController(text: ''); final TextEditingController _controller9 = TextEditingController(text: ''); final TextEditingController _controller10 = TextEditingController(text: ''); final TextEditingController _controller11 = TextEditingController(text: ''); final TextEditingController _controller12 = TextEditingController(text: ''); @override Widget build(BuildContext context) { String _query1 = _controller1.text != '' ? '${_controller1.text}' : ''; String _query2 = _controller2.text != '' ? ' \"${_controller2.text}\"' : ''; String _query3 = _controller3.text != '' ? ' -${_controller3.text}' : ''; String _query4 = _controller4.text != '' ? ' intitle:${_controller4.text}' : ''; String _query5 = _controller5.text != '' ? ' site:${_controller5.text}' : ''; String _query6 = _controller6.text != '' ? ' ${_controller6.text}' : ''; String _query7 = _controller7.text != '' ? ' after:${_controller7.text}' : ''; String _query8 = _controller8.text != '' ? ' before:${_controller8.text}' : ''; String _query9 = _controller9.text != '' ? ' ${_controller9.text}' : ''; String _query10 = _controller10.text != '' ? ' ${_controller10.text}' : ''; String _query11 = _controller11.text != '' ? ' ${_controller11.text}' : ''; String _query12 = _controller12.text != '' ? ' ${_controller12.text}' : ''; String queryString = 'https://www.google.com/search?q= ${_query1} ${_query2} ${_query3} ${_query4} ${_query5} ${_query6} ${_query7} ${_query8} ${_query9} ${_query10} ${_query11} ${_query12}';  return Scaffold( appBar: AppBar( title: const Text('Google'), ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜     child: ElevatedButton( style: ElevatedButton.styleFrom( primary: Colors.blueAccent, onPrimary: Colors.white, ), onPressed: () async { final url = Uri.parse( '${queryString}', ); if (await canLaunchUrl(url)) { launchUrl(url); } else { // ignore: avoid_print print("Can't launch $url"); } として、画面はgoogleに変遷するのですが、なぜか出力されるURLどのようなキーワードでも https://www.google.com/search?q=%20%20%20%20%20%20%20%20%20%20%20%20となってしまいます。 また、no activity for token android.os.BinderProxyというエラーがでてしまいました。 頑張ったのですが直せず途方にくれています。助言をどうかよろしくおねがいします。
harakazu

2022/07/01 07:50

queryStringが更新されるように、ElevatedButtonのonPressの中で、 String _query1 = _controller1.text != '' ? '${_controller1.text}' : ''; String _query2 = _controller2.text != '' ? ' \"${_controller2.text}\"' : ''; (省略) String queryString = 'https://www.google.com/search?q= ${_query1} ${_query2} ${_query3} ${_query4} ${_query5} ${_query6} ${_query7} ${_query8} ${_query9} ${_query10} ${_query11} ${_query12}'; を実行するようにしてください。 関数を作って外に出す方がいいと思います。
hikagami

2022/07/04 05:26

返信おそくなり申し訳ありません! 想定した通りの動きができました! 本当にありがとうございます。助かりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問