使用API​​密钥和Webview Flutter发布请求

我有一个flask应用程序,该应用程序曾经从flutter应用程序中调用过,创建了一些HTML文件并返回了文件名的位置。然后,我的flutter应用程序使用“ webview_flutter”包查看该文件。在本地开发服务器中,这工作得很好。当我将其上传到AWS LAMbda时,我使用一些API密钥保护了应用程序。因此,我的问题是如何立即使用http.post使用此密钥调用此API,然后使用“ webview_flutter软件包”和该api_key查看创建的HTML文件。请帮助我。

gukoule 回答:使用API​​密钥和Webview Flutter发布请求

AWS LAMbda的第一部分

您可以使用软件包https://pub.dev/packages/amazon_cognito_identity_dart
对API Gateway + Lambda的身份验证访问,请参阅
https://github.com/jonsaw/amazon-cognito-identity-dart/#for-api-gateway--lambda

代码段

public class addproduct extends AppCompatActivity {
    RecyclerView recyclerView;
    ArrayList<customitem> datalist =new ArrayList<customitem>();
    FirebaseDatabase mdatabase;
    DatabaseReference mreference;

    EditText productname,price,size,b2;
    Spinner sizespinner;
    Button okbutton;
    View mview;
    ImageView cancel;
    AlertDialog d;
    AlertDialog.Builder alert;
    recyclerviewadapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_addproduct);
        getSupportActionBar().setTitle("Add product");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mdatabase = FirebaseDatabase.getInstance();
        //?????????????????????? my firebase referance ????????????
        mreference = mdatabase.getReference().child("product");
        mreference.keepSynced(true);



        recyclerView = findViewById(R.id.recyclerviewid);



        buildrecyclerview();

        //mreference.child("product").setValue(datalist);






    }

    public void buildrecyclerview(){
        adapter = new recyclerviewadapter(datalist);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new GridLayoutManager(this,4));
        recyclerView.setAdapter(adapter);
        mreference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot dataSnapshot1:dataSnapshot.getChildren()){
                    customitem j =dataSnapshot1.getValue(customitem.class);
                    datalist.add(j);

                }
                adapter.notifyDataSetChanged();

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

        adapter.recyclerviewonclicl(new recyclerviewadapter.vonclick() {
            @Override
            public void cclick(final int possition) {

                //?????????????? alert dilog two for delete and update data ????????????????
                AlertDialog.Builder bl = new AlertDialog.Builder(addproduct.this);
                View v = getLayoutInflater().inflate(R.layout.manageralertdilogtwo,null);
                bl.setView(v);
                d=bl.create();
                d.show();
                final EditText productname2 = v.findViewById(R.id.productname2);
                final EditText size2 = v.findViewById(R.id.packsizeid2);
                final EditText price2 = v.findViewById(R.id.priceid2);
                final EditText box2 = v.findViewById(R.id.Box2);
                Button okbtn = v.findViewById(R.id.okbuttonid2);
                Button dltbtn = v.findViewById(R.id.deleteid);
                ImageView cross =v.findViewById(R.id.cancelid2);
                final Spinner sp =v.findViewById(R.id.spinnerid2);
                //String pn = datalist.get(possition).getproductname();

                productname2.setText(datalist.get(possition).getproductname());
                size2.setText(datalist.get(possition).getsize());
                price2.setText(datalist.get(possition).getPrice());
                box2.setText(datalist.get(possition).getBox());
                sp.setSelection(datalist.get(possition).getKg());
                cross.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        d.dismiss();
                    }
                });
                okbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        //?????????????? update data accroding user selectiong  ??????????????


                       //datalist.get(possition).setproductname(productname2.getText().toString());
                       //datalist.get(possition).setPrice(price2.getText().toString());
                       //datalist.get(possition).setsize(size2.getText().toString());
                       //datalist.get(possition).setBox(box2.getText().toString());
                       //datalist.get(possition).setKg(sp.getSelectedItemPosition());
                       customitem m = new customitem(productname2.getText().toString(),size2.getText().toString(),price2.getText().toString(),box2.getText().toString(),sp.getSelectedItemPosition());

                       mreference.child(String.valueOf(datalist.get(possition))).setValue(m);

                        d.dismiss();
                    }
                });
                dltbtn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        //???????????????? delete data from recycler view accroding user selection ???????????
                        //datalist.remove(possition);
                        mreference.child(String.valueOf(datalist.get(possition))).removeValue();

                       // adapter.notifyDataSetChanged();
                        d.dismiss();
                    }
                });




            }
        });

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.addproductmenu,menu);
        return true;

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.addproduct:
                buildalert();
                break;
            case R.id.seedetails:
                Intent n  = new Intent(addproduct.this,managermain.class);
                startActivity(n);
                break;

        }
        return super.onOptionsItemSelected(item);
    }
    public void buildalert(){
        //?????? alert dilog one for take data ???????????????
          alert = new AlertDialog.Builder(addproduct.this);
          mview = getLayoutInflater().inflate(R.layout.manageralertalertdilog,null);
          productname = mview.findViewById(R.id.productname);
          price = mview.findViewById(R.id.priceid);
          alert.setCancelable(true);

          size = mview.findViewById(R.id.packsizeid);
          cancel = mview.findViewById(R.id.cancelid);
          sizespinner = mview.findViewById(R.id.spinnerid);
          okbutton = mview.findViewById(R.id.okbuttonid);
          b2 = mview.findViewById(R.id.Box);
          alert.setView(mview);


        final AlertDialog dl = alert.create();
        dl.show();
        cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dl.dismiss();
            }
        });
        okbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (productnamem() && sizem()){
                    //add data from alert dilog


                    String productnm = productname.getText().toString();
                    String pricec = price.getText().toString();

                    String sizee = size.getText().toString();
                    int kg = sizespinner.getSelectedItemPosition();
                    String box= b2.getText().toString();

                  //?? add data in recyclerview from alert dilog ???????????????


                    //datalist.add(new customitem(productnm,sizee,pricec,box,kg));
                    customitem n = new customitem(productnm,kg);
                    mreference.child(String.valueOf(datalist.size())).setValue(n);


                    //adapter.notifyDataSetChanged();
                    //mreference.setValue(datalist);
                    dl.dismiss();




                }

            }
        });





    }
    public boolean productnamem(){
        if (productname.getText().toString().trim().isEmpty()){
            productname.setError("Please fill it");
            productname.setFocusable(true);
            return false;
        }
        else {
            return true;
        }

    }

    public boolean sizem(){
        if (size.getText().toString().trim().isEmpty()){
            size.setError("Please fill it");
            size.setFocusable(true);
            return false;
        }
        else {
            return true;
        }
    }

}

webview_flutter负载响应字符串的第二部分
借助webViewController,您可以使用controller.loadUrl
您可以在下面的
复制粘贴运行演示完整代码 代码段

import 'package:http/http.dart' as http;
import 'package:amazon_cognito_identity_dart/cognito.dart';
import 'package:amazon_cognito_identity_dart/sig_v4.dart';

void main() async {
  final credentials = new CognitoCredentials(
      'ap-southeast-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',userPool);
  await credentials.getAwsCredentials(session.getIdToken().getJwtToken());

  const endpoint =
      'https://xxxx.execute-api.ap-southeast-1.amazonaws.com/dev';
  final awsSigV4Client = new AwsSigV4Client(
      credentials.accessKeyId,credentials.secretAccessKey,endpoint,sessionToken: credentials.sessionToken,region: 'ap-southeast-1');

  final signedRequest = new SigV4Request(awsSigV4Client,method: 'POST',path: '/projects',headers: new Map<String,String>.from(
          {'header-1': 'one','header-2': 'two'}),queryParams: new Map<String,String>.from({'tracking': 'x123'}),body: new Map<String,dynamic>.from({'color': 'blue'}));

  http.Response response;
  try {
    response = await http.post(
        signedRequest.url,headers: signedRequest.headers,body: signedRequest.body);
  } catch (e) {
    print(e);
  }
  print(response.body);
}

工作演示

enter image description here

完整代码

WebView(
                initialUrl: 'abc',javascriptMode: JavascriptMode.unrestricted,onWebViewCreated: (WebViewController webViewController) {
                  _controller = webViewController;
                  _loadHtmlFromString();
                },),_controller.loadUrl( Uri.dataFromString(
        fileText,mimeType: 'text/html',encoding: Encoding.getByName('utf-8')
    ).toString());
本文链接:https://www.f2er.com/3144888.html

大家都在问